Исследование экономической или социологической системы с использованием методов регрессионного анализа.дисперсионного анализа, страница 2

jmax=j;

}

if(jmax>i)

{

for(j=i;j<m+1;j++)

{

max=A[i][j];

A[i][j]=A[jmax][j];

A[jmax][j]=max;

}

max=F[i];

F[i]=F[jmax];

F[jmax]=max;

}

F[i]/=A[i][i];

for(j=m;j>=i;j--)  A[i][j]/=A[i][i];

for(j=i+1;j<m+1;j++)

{

F[j]-=F[i]*A[j][i];

for(int k=m;k>=i;k--) A[j][k]-=A[i][k]*A[j][i];

}

}

for(i=m;i>=0;i--)

{

for(j=0;j<i;j++)

{

F[j]-=A[j][i]*F[i];                

}

X[i]=F[i];

}

}

void scala::obrtX(double **Q)

{

int i,j,jmax,k;

double max;

double **identity;

double **A;

identity = new double * [m+1];

for (i=0;i<m+1;i++)identity[i]= new double [m+1];

A = new double * [m+1];

for (i=0;i<m+1;i++) A[i]= new double [m+1];

for (i=0;i<m+1;i++)

for (j=0;j<m+1;j++)identity[i][j]=(i==j);

for(i=0;i<m+1;i++)

for(j=0;j<m+1;j++) A[i][j]=0;

for(i=0;i<m+1;i++)

for(j=0;j<m+1;j++)

{

for(max=0,k=0;k<n;k++) max+=Q[k][i]*Q[k][j];

A[i][j]=max;

}

for(i=0;i<m+1;i++)

{

for(jmax=i,max=fabs(A[i][i]),j=i+1;j<m+1;j++)

if(fabs(A[j][i])>max)

{

max=fabs(A[j][i]);

jmax=j;

}

if(jmax>i)

{

for(j=i;j<m+1;j++)

{

max=A[i][j];

A[i][j]=A[jmax][j];

A[jmax][j]=max;

}

for(j=0;j<m+1;j++)

{

max=identity[i][j];

identity[i][j]=identity[jmax][j];

identity[jmax][j]=max;

}

}

for(j=m;j>=0;j--)  identity[i][j]/=A[i][i];

for(j=m;j>=i;j--)  A[i][j]/=A[i][i];

for(j=i+1;j<m+1;j++)

{

for(int k=m;k>=0;k--) identity[j][k]-=identity[i][k]*A[j][i];

for(int k=m;k>=i;k--) A[j][k]-=A[i][k]*A[j][i];

}

}

for(i=m;i>=0;i--)

{

for(int k=0;k<m+1;k++)

for(j=0;j<i;j++)

identity[j][k]-=A[j][i]*identity[i][k];              

}

diR= new double [m+1];

for(i=0;i<m+1;i++) diR[i]=identity[i][i];

for(i=0;i<m+1;i++) delete [] identity[i];

delete [] identity;

for(i=0;i<m+1;i++) delete [] A[i];

delete [] A;

}

void scala::preobrazovanie()

{

int i;

double normY=Norm(y);

tetaY= new double [m+1];

for(i=0;i<m+1;i++) tetaY[i]=teta[i]*normY/sqrt(tmpnorm[i]);

}

int scala::solve()

{

if(!init()) return 0;

printf("\n\t Исходный вектор отклика(Y)и матрица(X) :\n\n");

print(x,y,n,m+1);

if(!scaling()) return 0;

printf("\n\n\t Шкалированный вектор отклика(Z)и матрица(W) :\n\n");

print(W,Z,n,m+1);

solve_r(); 

teta= new double [m+1];

gauss(R,teta,r);

printf("\n\n\t Оценки параметров(teta) для шкалированных данных :\n\n");

for(int i=0;i<m+1;i++) printf("\t %lf\n",teta[i]);

preobrazovanie();

printf("\n\n\t Оценки параметров(tetaY) для исходных данных :\n\n");

for(int i=0;i<m+1;i++) printf("\t %lf\n",tetaY[i]);

obrtX(x);

proverka_gipotez();

return 1;

}

int _tmain(int argc, _TCHAR* argv[])

{

class scala as;

as.solve();

return 0;

}

4.  Тестирование

·  Исходные данные и модели

Исходными данными являются данные о уровне относительной опасности выбросов загрязняющих веществ в городах России и набор данных, характеризующий данные города с точки зрения промышленного производства. В результате  исследования можно выявить какие из отраслей промышленности наиболее сильно влияют на окружающую среду и прогнозировать насколько изменится загрязнение при изменении промышленного производства в городе.

Исходные данные:

Y-Опасность зазрязнения;

X1 - металлургическая промышленность;

Х2 – хим/нефтехимическая промышленность;

Х3 – машиностроение и металлообработка;

Х4 - легкая и целлюлозно-бумажная промышленность;

Х5 – топливная промышленность.