- •4.Численные методы решения задач
- •Общая методика метода Гаусса. Система представлена в общем виде как:
- •4.2.Решение нелинейных уравнений
- •4.3. Методы построения аппроксимационных полиномов
- •Определить аппроксимационный многочлен
- •4.4.Численное дифференцирование и интегрирование
- •Ошибка вычисления интеграла определяется как
- •4.5.Методы решения дифференциальных уравнений. Метод Рунге-Кутта
- •4.6.Методы решения дифференциальных уравнений с частными производными
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