Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаба 3;

.docx
Скачиваний:
94
Добавлен:
28.03.2015
Размер:
377.08 Кб
Скачать

Нижегородский Государственный Технический Университет

им Р.Е.Алексеева

Кафедра: Прикладная математика

Отчет по лабораторной работе №3

Тема «Методы аппроксимации и интерполяции при обработке экспериментальных данных»

Вариант №1

Выполнил: Кокурин М. А.

Студент группы: 11-КСУ-2

Проверил: Белоцерковская И. Е.

Нижний Новгород

2012г.

Оглавление.

Кусочно-Линейная интерполяция.

  • Ручной счет

  • Excel

  • Mathcad

Кусочно-Параболическая интерполяция.

  • Ручной счет

  • Excel

  • Mathcad

  • Си++

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

Ручной счет

Excel

Mathcad

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

Ручной счет

Excel

Mathcad

Метод наименьших квадратов(полином 1-ой степени)

Ручной счет

Excel

Mathcad

Си++

Метод наименьших квадратов(полином 2-ой степени)

Ручной счет

Excel

Mathcad

Список литературы

Вывод

1. Кусочно-линейная интерполяция

1.1 Ручной счет

x

0,1

0,3

0,5

0,8

1

y

0,3

0,55

0,65

0,4

0,25

В случае интерполяции функция проходит строго через экспериментальные точки. Для кусочно-линейной интерполяции получим две системы из условия прохождения соответствующей прямой через точки 1 и 2, 2 и 3, 3 и 4, а также 4 и 5:

А)

B)

С)

D)

1.2 Реализация в Excel

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

2 .Кусочно-параболическая интерполяция

Ручной счет

x

0,1

0,3

0,5

0,8

1

y

0,3

0,55

0,65

0,4

0,25

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

2.2 Реализация в Excel

2.3Реализация в MathCad

3 .Интерполяция полиномом 4-ой степени

Ручной счет

x

1

2

3

4

5

y

5

1

4

2

3

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

C A = Y,

где:

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

3.2 Реализация в Excel

3.3 Реализация в 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;

}

3.4Реализация в MathCad

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

4.1 Ручной счет

x

1

2

3

4

5

y

5

1

4

2

3

4.2 Реализация в Excel

5. Аппроксимация полиномом 1-ой степени

5.1 Ручной счет.

x

1

2

3

4

5

y

5

1

4

2

3

Полином первой степени.

Имеем систему:

5.2 Реализация в Excel

5.3Реализация в MathCad

5.4 Реализация в 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];

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;}

6. Аппроксимация полиномом 2-ой степени

6.1 Ручной счет.

x

1

2

3

4

5

y

5

1

4

2

3

;

Имеем систему:

6.2Реализация в Excel

6.3 Реализация в MathCad

Вывод

В данной работе я рассмотрел методы интерполяции и аппроксимации. Методы аппроксимации будут точнее, и чем выше степень полинома, тем точнее будет решение, так как отклонение от истинного значения будет наименьшим.

Список используемой литературы

1 Соболь, Б.В Мешков «Практикум по вычислительной математике»

2 Н. Культин «Самоучитель Программирования в Turbo Pascal 7.0 и Delphi»

3 Пискунов В.В. «Работа в MathCAD»

4 Кирьянов В. Д «Учебник по MathCAD 14»

5 П. Франка «Учебный курс по С++»

6 Волков «Численные методы»

7 Турчак «Численные методы»