Смекни!
smekni.com

Численные методы решения типовых математических задач (стр. 5 из 8)

. (3.6)

Далее займемся отысканием наилучшего приближения.

Разложим функцию

по системе линейно независимых функций
:

. (3.7)

В дальнейшем для сокращения записи будем пользоваться определением скалярного произведения в пространстве функций

:

.

Подставляя (3.7) в условие (3.6), получим

.

Дифференцируя это выражение по

и приравнивая производные нулю, получим

. (3.8)

Определитель этой системы есть определитель Грама функций

. В силу их линейной независимости этот определитель не равен нулю. Следовательно, из системы (3.8) можно найти коэффициенты
, определяющие функцию
согласно (3.6) и минимизирующие интеграл от погрешности
. Таким образом, наилучшее среднеквадратичное приближение существует и оно единственно.

При использовании ортонормированной системы функций

система (3.8) упрощается:

,

т.е.

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

Доказано, что в любом линейно нормированном пространстве при линейной аппроксимации вида (3.4) наилучшее приближение существует, хотя оно может быть не единственным.

В тех случаях, когда функции

не ортогональны, при
определитель Грама уменьшается, приближаясь к нулю. Тогда система становится плохо обусловленной и ее решение дает большую погрешность. В этой ситуации обычно берут не более пяти-шести членов в сумме (3.7).

В качестве

чаще всего используют полиномы Лежандра, Чебышева, Лагерра, Эрмита, ортогональные с заданным весом.

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

, (3.9)

где

- число заданных узлов.

Условие наилучшего среднеквадратичного приближения записывается следующим образом:

. (3.10)

Полагая

, где
, и подставляя этот многочлен в (3.10), придем к системе (3.8), в которой скалярные произведения вычисляют согласно (3.9). Описанная процедура аппроксимации носит название метода наименьших квадратов.

Наиболее употребительный вариант метода наименьших квадратов соответствует случаю степенного вида функций

, т.е.
, причем
.

Система уравнений (3.8) при этом принимает вид

,
, (3.11)

где

.

3.5 Схема алгоритма

Рис. 3.1 Основная программа


Рис. 3.2 Процедура ввода данных


Рис 3.3 Процедура среднеквадратичного приближения


program srpribl; {$R+}

uses graph;

label 1,2,3,4;

const m=2;

type mas= array [1..21] of real;

mas1= array [1..m] of real;

mas2= array [1..m,1..m+1] of real;

var i,j:byte;

y1,x1:mas;

xx1:mas1;

a1:mas2;

procedure vvod (x,y: mas);

begin

x[1]:=0;y[1]:=0.290234387293458; x[2]:=0.25;y[2]:=0.201247759722173;

x[3]:=0.5;y[3]:=0.0712686786428094;x[4]:=0.75; y[4]:=0.044294935464859;

x[5]:=1;y[5]:=-0.0745576142333448; x[6]:=1.25;y[6]:=-0.0807833694852889;

x[7]:=1.5;y[7]:=-0.233371530473232;x[8]:=1.75;y[8]:=-0.283957027737051;

x[9]:=2;y[9]:=-0.308697660081089;x[10]:=2.25;y[10]:=-0.42091366359964;

x[11]:=2.5;y[11]:=-0.516991161741316;x[12]:=2.75;y[12]:=-0.427710095947851;

x[13]:=3;y[13]:=-0.374748698528856;x[14]:=3.25;y[14]:=-0.229905794281513;

x[15]:=3.5;y[15]:=-0.205365492492496639;x[16]:=3.75;y[16]:=-0.129155068378896;

x[17]:=4;y[17]:=-0.0438349825330079;x[18]:=4.25;y[18]:=0.0294586319476366;

x[19]:=4.5;y[19]:=0.132592592108995;x[20]:=4.75;y[20]:=0.206369574274868;

x[21]:=5;y[21]:=0.26959548862651;

end;

procedure srpribl (xx:mas1;a:mas2);

var l:real;

s,z,k1:integer;

begin

for s:=1 to m-1 do

for z:=s+1 to m do

begin

a[z,s]:=-a[z,s]/a[s,s];

for k1:=s+1 to m+1 do a[z,k1]:=a[z,k1]+a[z,s]*a[s,k1]

end;

xx[m]:=a[m,m+1]/a[m,m]; writeln(' xx[',m,']=',xx[m]:2:3);

for i:=m-1 downto 1 do

begin

l:=a[i,m+1];

for j:=i+1 to m do l:=l-xx[j]*a[i,j];

xx[i]:=l/a[i,i]; writeln(' xx[',i,']=',xx[i]:2:3)

end

end;

procedure Grafik (var x,y:mas;xx:mas1)

var ec,gd,gm:integer;

begin

gd:=detect;

initgraph (gd,gm,' ');

ec:=graphresult;

if ec<>grok then begin

writeln ('Oshibka v inicializacii grafika');

halt (1);

end;

setcolor(white);

line (0,420,620,420);

line (0,0,0,420);

setcolor (white);

for i:=1 to 21 do begin

circle (round (x[i]*150),round (y[i]*100),1);

end;

setcolor (yellow);

for i:=1 to m do begin

circle (round (x[i]*150),round (xx[i]*100),1);

end;

setcolor (green);

for i:=2 to m do begin

line (round (x[i-1]*150),round(xx[i-1]*100),round (x[i]*150),

round (xx[i]*100));

end;

end;

begin

vvod(x1,y1);

for i:=1 to 2 do

for j:=1 to 3 do a[i,j]:=0;

a[1,1]:=21;

for i:=1 to 21 do

begin

a[1,2]:=a[1,2]+x[i];

a[2,1]:=a[2,1]+x[i];

a[2,2]:=a[2,2]+x[i]*x[i];

a[1,3]:=a[1,3]+y[i];

a[2,3]:=a[2,3]+y[i]*x[i]

end;

srpribl(xx1,a1);

for i:=1 to 21 do

writeln(y[i]:2:3,' ',xx[1]+xx[2]*x[i]:2:3);

Grafik(x1,y1,xx1);

end.

3.7 Тестовый пример

Найти тригонометрический многочлен наилучшего среднеквадратичного приближения наименьшей степени со среднеквадратичным отклонением меньшим

для функции

Введем функцию

Вычислим коэффициенты Фурье

Вычислим частичные суммы ряда Фурье

Вычислим среднеквадратичное отклонение

Найдем минимальное

, при котором
будет меньше

Следовательно многочлен степени

является наименьшим многочленом, удовлетворяющим нашим условиям. Построим график этого многочлениа и исходной функции

Построим график среднеквадратичного отклонения

Найдем минимальное

, при котором
будет меньше