Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичка только 2 cem си++l.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
265.22 Кб
Скачать

Лабораторная работа №3 Аппроксимация и Интерполяции.

Постановка задачи: Дана таблица координат точек {xi,yi}

x

x0

x1

x2

x3

x4

y

y0

y1

y2

y3

y4

  • Аппроксимировать точки полиномом 1 и 2 степени

  • Интерполировать точки полиномом 1 и 2 степени

Метод наименьших квадратов

Название метода

Система для нахождения коэффициентов полинома

Ответ

Метод наименьших квадратов

(аппроксимация)

полином 1 степени

полином 2 степени

P1(x)=a0+a1*x

P2(x)=a0+a1*x+a2*x2

Программа на языке си

#include <iostream.h>

#include <iomanip.h>

#include <math.h>

void gauss(double **c, int n)

{

int i,j;

cout.precision(3);

int k;

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

for (j=n; j>=k; j--)

c[k][j]/=c[k][k];

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

for (j=n; j>=k; j--)

c[i][j]-=c[k][j]*c[i][k];

}

double *a;

a=new double[n*sizeof(double)];

//Обратный ход

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

a[i]=c[i][n];

for (i=n-2; i>=0; i--)

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

a[i]-=a[j]*(c[i][j]);

//Печать результата

cout<<"Koeff\n";

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

cout<<"a"<<j<<"="<<a[j]<<endl;

delete[] a;

}

void vvod(double *a, int n)

{

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

cin>>a[i];

}

int main()

{

int n,i,j;

cout<<"kol-vo tochek"<<endl;

cin>>n;

double **c;

double *x, *y;

x= new double[n];

cout<<"vvod x"<<endl;

vvod(x,n);

y= new double[n];

cout<<"vvod y"<<endl;

vvod(y,n);

cout<<endl<<"prover'te koord tochek"<<endl;

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

cout<<"("<<x[i]<<","<<y[i]<<")"<<endl;

int m;

cout<<"stepen polinoma m"<<endl;

cin>>m;

m=m+1; //esli m=1, to yr-ya 2

c= new double *[m];

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

c[i]=new double[m];

int k;

double s;

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

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

s=0;

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

{

s=s+pow(x[k],(i+j));}

c[i][j]=s;}

for(i=0;i<m;i++){s=0;

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

{

s=s+y[k]*pow(x[k],i);}

c[i][m]=s;}

cout<<"Matritsa C+Y"<<endl;

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

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

cout<<setw(5)<<c[i][j]<<" ";

cout<<endl;

}

cout<<endl;

gauss(c,m);

delete[] x;

delete[] y;

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

// delete c[i];

delete[] c;

cin.get();

cin.get();

return 0;}

Метод неопределённых коэффициентов

Название метода

Система для нахождения коэффициентов полинома

Ответ

Метод неопределённых коэффициентов (интерполяция)

P2(x)=a0+a1*x+a2*x2