Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБА №310.doc
Скачиваний:
27
Добавлен:
27.03.2015
Размер:
553.47 Кб
Скачать

Квадратичная интерполяция

Постановка задачи:

Дана табличная функция (5 точек):

x

0,1

0,3

0,5

0,6

0,9

y

0,4

0,6

0,75

0,75

0,83

Требуется решить задачу интерполяции (кусочно-квадратичную) методом неопределенных коэффициентов.

Ручной счет:

Для квадратичной интерполяции с помощью метода неопределенных коэффициентов получим системы:

Реализация в Microsoft Excel:

Экспериментальные данные

x

0,1

0,3

0,5

0,6

0,9

y

0,4

0,6

0,75

0,75

0,83

Реализация в Mathcad:

Кусочно- квадратичная

Первый участок

Второй участок

Метод Лагранжа

Постановка задачи:

Дана табличная функция (5 точек):

x

0,1

0,3

0,5

0,6

0,9

y

0,4

0,6

0,75

0,75

0,83

Требуется решить задачу методом Лагранжа.

Ручной счет:

Реализация в Microsoft Excel:

Интерполяция методом Лагранжа

x=

2

 

 

 

 

 

 

 

 

i

xi

yi

0

1

2

3

4

Di

yi/Di

0

0,1

0,4

1,9

-0,2

-0,4

-0,5

-0,8

0,0608

6,578947

1

0,3

0,6

0,2

1,7

-0,2

-0,3

-0,6

-0,01224

-49,0196

2

0,5

0,75

0,4

0,2

1,5

-0,1

-0,4

0,0048

156,25

3

0,6

0,75

0,5

0,3

0,1

1,4

-0,3

-0,0063

-119,048

4

0,9

0,83

0,8

0,6

0,4

0,3

1,1

0,06336

13,09975

 

 

 

 

 

 

 

 

 

7,861468

 

 

 

 

 

 

 

7,4613

 

58,65677

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

Постановка задачи:

Дана табличная функция (5 точек):

x

0,1

0,3

0,5

0,6

0,9

y

0,4

0,6

0,75

0,75

0,83

Требуется решить задачу интерполяции (полином 4-ой степени) методом неопределенных коэффициентов.

Ручной счет:

Запишем задачу в матричном виде:

C A = Y,

где:

Для решения этой системы используем метод Гаусса, получаем:

Реализация в Microsoft Excel:

Экспериментальные данные

x

0,1

0,3

0,5

0,6

0,9

y

0,4

0,6

0,75

0,75

0,83

Реализация в Mathcad:

Реализация в Microsoft Visual C++:

#include "stdafx.h"

#include <iostream>

#include <fstream>

#include <ctime>

#include <iomanip>

#include <math.h>

using namespace std;

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*sizeof(double)];

cout<<"vvod x"<<endl;

vvod(x,n);

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

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;

c= new double *[n];

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

c[i]=new double[n];

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

{

for(j=0;j<n;j++) c[i][j]=pow(x[i],j);

c[i][n]=y[i];

}

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

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

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

cout<<setw(7)<<c[i][j];

cout<<endl;}

cout<<endl;

gauss(c,n);

delete[] x;

delete[] y;

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

// delete c[i];

delete[] c;

cin.get();

cin.get();

return 0;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]