Essays.club - Получите бесплатные рефераты, курсовые работы и научные статьи
Поиск

Метод наименьших квадратов. реализация на С++

Автор:   •  Июль 4, 2019  •  Лабораторная работа  •  2,079 Слов (9 Страниц)  •  1,194 Просмотры

Страница 1 из 9

//Программа реализует метод наименьших квадратов на языке С++. Составлена в рамках лабораторной работы по дисциплине численные методы.

#include <iostream>

#include <cmath>

#include <Windows.h>

using namespace std;

//Программа иллюстрирует применение метода наименьших квадратов

int SLAU(double **matrica_a, int n, double *massiv_b, double *x)

{

int i,j,k,r;

double c,M,max,s, **a, *b;

a=new double *[n];

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

a[i]=new double[n];

b=new double [n];

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

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

a[i][j]=matrica_a[i][j];

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

b[i]=massiv_b[i];

for(k=0;k<n;k++)

{ max=fabs(a[k][k]);

r=k;

for(i=k+1;i<n;i++)

if (fabs(a[i][k])>max)

{

max=fabs(a[i][k]);

r=i;

}

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

{

c=a[k][j];

a[k][j]=a[r][j];

a[r][j]=c;

}

c=b[k]; b[k]=b[r]; b[r]=c;

for(i=k+1;i<n;i++)

{ for(M=a[i][k]/a[k][k],j=k;j<n;j++)

a[i][j]-=M*a[k][j];

b[i]-=M*b[k];

}

}

if (a[n-1][n-1]==0)

if(b[n-1]==0)

return-1;

else return-2;

else

{ for(i=n-1;i>=0;i--)

{ for(s=0,j=i+1;j<n;j++)

s+=a[i][j]*x[j];

x[i]=(b[i]-s)/a[i][i];

}

return 0;

}

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

delete [] a[i];

delete [] a;

delete [] b;

}

int INVERSE(double **a, int n, double **y)

{ int i,j,res; double *b, *x;

b=new double [n];

x=new double [n];

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

{ for(j=0;j<n;j++)

if (j==i)

b[j]=1;

else

b[j]=0;

res=SLAU(a,n,b,x);

if (res!=0)

break;

else

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

y[j][i]=x[j];

}

delete [] x;

delete [] b;

if (res!=0)

return -1;

else

return 0;

}

double * Obratnaja(double c[9])

{

int result,i,j,N;

double **a, **b;

N=3;

a=new double *[N];

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

a[i]=new double[N];

b=new double *[N];

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

b[i]=new double[N];

int iter=-1;

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

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

{

iter++;

a[i][j]=c[iter];

}

result=INVERSE(a,N,b);

iter=-1;

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

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

{

iter++;

c[iter]=b[i][j];

}

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

delete [] a[i];

...

Скачать:   txt (7.6 Kb)   pdf (47.1 Kb)   docx (12.9 Kb)  
Продолжить читать еще 8 страниц(ы) »
Доступно только на Essays.club