Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Aplicação de Métodos Numéricos em Regressão Linear: Exemplos de Código, Trabalhos de Métodos Matemáticos para Análise Numérica e Otimização

Neste documento, encontram-se dois exemplos de código em c que ilustram a aplicação do método da regressão linear utilizando dados experimentais. O primeiro exemplo utiliza a técnica de gauss-seidel para determinar os coeficientes da reta de regressão. Já no segundo exemplo, é utilizada a técnica de matrizes para resolver o sistema de equações que define a reta de regressão. Os dados experimentais são fornecidos no documento e os resultados obtidos pelos métodos numéricos são comparados com os resultados obtidos por meio de cálculos manualmente.

Tipologia: Trabalhos

2018

Compartilhado em 19/06/2018

sting1
sting1 🇦🇴

3 documentos

1 / 5

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Problem 1
Coding:
int main() {
int i, N;
oat x[6], y[6], u[6];
oat sum_u = 0, sum_uu = 0, sum_y = 0, sum_uy = 0, a, b, Alphax, Beta;
oat Y[6], Mean_y, S = 0, S_t = 0, r2;
N = 6;
x[0] = 0.1; x[1] = 1; x[2] = 2; x[3] = 3; x[4] = 4; x[5] = 5;
y[0] = 0.05; y[1] = 0.62; y[2] = 1.1; y[3] = 2.1; y[4] = 3.6; y[5] = 6.9;
printf("Given equation: y=Alpha*x/(Beta + x)");
printf("\nRearrange the equation -> y = a + bu");
printf("\nwhere a = (Alpha*x)/Beta , b = -1/Beta , u = xy");
printf("\n\nGiven data points: \t\t\tNew data points:");
printf("\nx \t\ty \t\t\tu=xy \t\ty");
for (i = 0; i<6; i++) {
u[i] = x[i]*y[i];
printf("\n%f \t%f \t\t%f \t%f", x[i], y[i], u[i], y[i]);
sum_u = sum_u + u[i];
sum_uu = sum_uu + u[i] * u[i];
sum_y = sum_y + y[i];
sum_uy = sum_uy + u[i] * y[i];
}
printf("\n\nSum of u = %f", sum_u);
printf("\nSum of u^2 = %f", sum_uu);
printf("\nSum of y = %f", sum_y);
printf("\nSum of uy = %f", sum_uy);
printf("\n\nSubstituting the values gives");
printf("\n%da + %fb = %f", N, sum_u, sum_y);
printf("\n%fa + %fb = %f", sum_u, sum_uu, sum_uy);
b = (sum_uy - (sum_y*sum_u/N)) / (sum_uu - (sum_u*sum_u/N));
a = (sum_y - sum_u * b) / N;
printf("\n\nUsing Gauss elimination method, we obtain");
printf("\na = %f", a);
printf("\nb = %f", b);
Beta = -1/b;
Alphax = a*Beta;
printf("\n\nTherefore, Alpha*x and Beta are");
printf("\nAlpha*x = a*Beta = %f", Alphax);
printf("\nBeta = -1/b = %f", Beta);
for (i = 0; i<6; i++) {
Y[i] = a + (b*u[i]);
Mean_y = sum_y / N;
S = S + (y[i] - Y[i])*(y[i] - Y[i]);
pf3
pf4
pf5

Pré-visualização parcial do texto

Baixe Aplicação de Métodos Numéricos em Regressão Linear: Exemplos de Código e outras Trabalhos em PDF para Métodos Matemáticos para Análise Numérica e Otimização, somente na Docsity!

Problem 1

Coding:

int main() { int i, N; float x[6], y[6], u[6]; float sum_u = 0, sum_uu = 0, sum_y = 0, sum_uy = 0, a, b, Alphax, Beta; float Y[6], Mean_y, S = 0, S_t = 0, r2;

N = 6;

x[0] = 0.1; x[1] = 1; x[2] = 2; x[3] = 3; x[4] = 4; x[5] = 5; y[0] = 0.05; y[1] = 0.62; y[2] = 1.1; y[3] = 2.1; y[4] = 3.6; y[5] = 6.9;

printf("Given equation: y=Alphax/(Beta + x)"); printf("\nRearrange the equation -> y = a + bu"); printf("\nwhere a = (Alphax)/Beta , b = -1/Beta , u = xy"); printf("\n\nGiven data points: \t\t\tNew data points:"); printf("\nx \t\ty \t\t\tu=xy \t\ty");

for (i = 0; i<6; i++) {

u[i] = x[i]*y[i]; printf("\n%f \t%f \t\t%f \t%f", x[i], y[i], u[i], y[i]);

sum_u = sum_u + u[i]; sum_uu = sum_uu + u[i] * u[i]; sum_y = sum_y + y[i]; sum_uy = sum_uy + u[i] * y[i]; }

printf("\n\nSum of u = %f", sum_u); printf("\nSum of u^2 = %f", sum_uu); printf("\nSum of y = %f", sum_y); printf("\nSum of uy = %f", sum_uy);

printf("\n\nSubstituting the values gives"); printf("\n%da + %fb = %f", N, sum_u, sum_y); printf("\n%fa + %fb = %f", sum_u, sum_uu, sum_uy);

b = (sum_uy - (sum_ysum_u/N)) / (sum_uu - (sum_usum_u/N)); a = (sum_y - sum_u * b) / N;

printf("\n\nUsing Gauss elimination method, we obtain"); printf("\na = %f", a); printf("\nb = %f", b);

Beta = -1/b; Alphax = aBeta; printf("\n\nTherefore, Alphax and Beta are"); printf("\nAlphax = aBeta = %f", Alphax); printf("\nBeta = -1/b = %f", Beta);

for (i = 0; i<6; i++) { Y[i] = a + (bu[i]); Mean_y = sum_y / N; S = S + (y[i] - Y[i])(y[i] - Y[i]);

S_t = S_t + (y[i] - Mean_y)*(y[i] - Mean_y);

printf("\n\nValue of St = %f", S_t); printf("\nValue of S = %f", S);

printf("\n\nFitting curve:"); printf("\ny = Alpha*x/(Beta + x) = %fx/(%f + x)", Alphax, Beta); r2 = (S_t - S) / S_t; printf("\n\nCoefficient of determination:"); printf("\nr^2 = %f", r2); }

Result:

Conclusion:

The result shown above is the same as in hand calculations.

for (j = 0; j<7; j++) { FtF[0][0] = FtF[0][0] + Ft[0][j] * F[j][0]; FtF[0][1] = FtF[0][1] + Ft[0][j] * F[j][1]; FtF[0][2] = FtF[0][2] + Ft[0][j] * F[j][2]; FtF[1][0] = FtF[1][0] + Ft[1][j] * F[j][0]; FtF[1][1] = FtF[1][1] + Ft[1][j] * F[j][1]; FtF[1][2] = FtF[1][2] + Ft[1][j] * F[j][2]; FtF[2][0] = FtF[2][0] + Ft[2][j] * F[j][0]; FtF[2][1] = FtF[2][1] + Ft[2][j] * F[j][1]; FtF[2][2] = FtF[2][2] + Ft[2][j] * F[j][2]; } printf("\n\nFt * F matrix "); printf("\n%f \t%f \t%f", FtF[0][0], FtF[0][1], FtF[0][2]); printf("\n%f \t%f \t%f", FtF[1][0], FtF[1][1], FtF[1][2]); printf("\n%f \t%f \t%f", FtF[2][0], FtF[2][1], FtF[2][2]);

Y[0] = 0;

Y[1] = 0;

Y[2] = 0;

for (j = 0; j<7; j++) { Y[0] = Y[0] + Ft[0][j] * y[j]; Y[1] = Y[1] + Ft[1][j] * y[j]; Y[2] = Y[2] + Ft[2][j] * y[j]; } printf("\n\nFt * y matrix"); printf("\n%f^ ", Y[0]); printf("\n%f^ ", Y[1]); printf("\n%f^ ", Y[2]);

double deter[1] = { 0 }; double inv[3][3] = { 0 };

deter[0] = (FtF[0][0] * FtF[1][1] * FtF[2][2] + FtF[0][1] * FtF[1][2] * FtF[2][0] + FtF[0][2] * FtF[1][0] * FtF[2][1]) - (FtF[0][2] * FtF[1][1] * FtF[2][0] + FtF[0][1] * FtF[1][0] * FtF[2][2] + FtF[0][0] * FtF [1][2] * FtF[2][1]);

for (m = 0; m<3; m++) { float adj[3][3] = { 0 }; for (n = 0; n<3; n++) { adj[m][n] = (FtF[(m + 1) % 3][(n + 1) % 3] * FtF[(m + 2) % 3][(n + 2) % 3]) - (FtF[(m + 1) % 3][(n + 2) % 3] * FtF[(m + 2) % 3][(n + 1) % 3]); inv[m][n] = adj[m][n] / deter[0]; } }

C[0] = Y[0] * inv[0][0] + Y[1] * inv[0][1] + Y[2] * inv[0][2]; C[1] = Y[0] * inv[1][0] + Y[1] * inv[1][1] + Y[2] * inv[1][2]; C[2] = Y[0] * inv[2][0] + Y[1] * inv[2][1] + Y[2] * inv[2][2];

printf("\n\nUsing the eq [Ft * F * c = Ft * y]"); printf("\nand solving for C1, C2 and C3,");

printf("\nC1 = %f ", C[0]); printf("\nC2 = %f ", C[1]); printf("\nC3 = %f ", C[2]);

N = 7;

ym = (y[0] + y[1] + y[2] + y[3] + y[4] + y[5] + y[6]) / N; S = 0; S_t = 0;

for (j = 0; j<7; j++) { yc[j] = C[0] + C[1] * (log(1 + x[j])) + C[2] * (exp(x[j] / 1000));

S = S + (y[j] - yc[j])(y[j] - yc[j]); S_t = S_t + (y[j] - ym)(y[j] - ym);

r2 = (S_t - S) / S_t; printf("\n\nValue of S_t = %f", S_t); printf("\nValue of S = %f", S); printf("\n\nFitting Curve:"); printf("\ny = (%f) + (%f) ln(1+x) + (%f) exp(x/1000)", C[0], C[1], C[2]); printf("\n\nCoefficient of determination:"); printf("\nr^2 = %f", r2); }

Result:

Conclusion:

The result shown here are the same as

in hand calculations.