Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
файл 2 теория Численные методы.doc
Скачиваний:
6
Добавлен:
07.09.2019
Размер:
777.22 Кб
Скачать

4.3. Методы построения аппроксимационных полиномов

Аппроксимация – это процес определения аналитического вида функции заданной таблично. Задача аппроксимации сводится к нахождению свободных параметров функции заданного вида, которые обеспечивают наилучшее приближение функции заданной таблично и модельной аналитической функцией.

Наиболее распространенным методом аппроксимации полинома является аппроксимация методом наименьших квадратов.

Пусть дана функция (i=1,n), которая задается таблично.

Определить аппроксимационный многочлен

, который наилучшим образом описывает таблицу .

Коэффициенты определяются по методу наименьших квадратов. Функционал должен быть минимальным, чтобы обеспечить наименьший разброс модельных точек и точек заданных таблично. Из условия оптимума формируется система линейных уравнений относительно :

После преобразований система имеет вид:

После введения обозначений ...; ;

...; ;

линейная система имеет вид:

Решая эту систему можно найти коэффициенты полинома, которые обеспечивают наилучшую аппроксимацию заданного вида.

Пример. Написать алгоритм и программу аппроксимации функции, заданной таблично, с помощью полинома второй степени .

x

0

1

2

3

4

5

6

7

8

10

11

12

F(x)

-1

1

5

17

31

49

71

97

127

199

241

287

x

13

14

15

16

17

18

19

20

F(x)

337

391

449

511

577

647

721

799

после введения обозначений

;

;

;

;

;

;

линейная система имеет вид:

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

uses crt;

type

tablica = array[0..2,0..3] of real;

colonka = array[0..2] of real;

var

flag : boolean;

cislo : integer;

temp : array[0..3] of real;

znaki : array[0..2] of integer;

x: array[1..20,1..2] of real;

f:text;

i,j:integer;

sum1,sum2,sum3,sum4,sum5,sum6,sum7:real;

mas: tablica;

a : colonka;

{procedure gauss(mas:tablica;cislo:integer;var X:colonka;var flag_virogdena:boolean);} {дана в разделе 5.1}

Begin

clrscr;

assign(f,'dat.txt');

reset(f);

for i:=1 to 20 do begin

for j:=1 to 2 do

read(f,x[i,j]); {ввод табулированной функции}

readln(f);

end;

close(f);

sum1:=0;sum2:=0;sum3:=0;

sum4:=0;sum5:=0;sum6:=0;sum7:=0;

mas[0,0]:=20;

for i:=1 to 20 do begin

sum1:=sum1+x[i,1];

sum2:=sum2+x[i,1]*x[i,1];

sum3:=sum3+x[i,1]*x[i,1]*x[i,1];

sum4:=sum4+x[i,1]*x[i,1]*x[i,1]*x[i,1];

sum5:=sum5+x[i,2];

sum6:=sum6+x[i,1]*x[i,2];

sum7:=sum7+x[i,1]*x[i,1]*x[i,2];

end;

mas[0,1]:=sum1;

mas[0,2]:=sum2;

mas[0,3]:=sum5;

mas[1,0]:=sum1;

mas[1,1]:=sum2;

mas[1,2]:=sum3;

mas[1,3]:=sum6;

mas[2,0]:=sum2;

mas[2,1]:=sum3;

mas[2,2]:=sum4;

mas[2,3]:=sum7;

cislo:=3;

for i:=0 to 3 do

temp[i]:=0;

for i:=0 to 2 do

znaki[i]:=0;

gauss(mas,cislo,A,flag);

write(‘a0=’,a[0]:5:2,' a1=',a[1]:5:2,' a2=',a[2]:5:2);

readln;

End.

Результаты задачи 3 :

Файл dat.txt:

0 -1

1 1

2 5

3 17

4 31

5 49

6 71

7 97

8 127

10 199

11 241

12 287

13 337

14 391

15 449

16 511

17 577

18 647

19 721

20 799

a0=-1.00 a1=0.00 a2==2.00