. (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 Тестовый пример
Найти тригонометрический многочлен наилучшего среднеквадратичного приближения наименьшей степени со среднеквадратичным отклонением меньшим
для функцииВведем функцию
Вычислим коэффициенты Фурье
Вычислим частичные суммы ряда Фурье
Вычислим среднеквадратичное отклонение
Найдем минимальное
, при котором будет меньшеСледовательно многочлен степени
является наименьшим многочленом, удовлетворяющим нашим условиям. Построим график этого многочлениа и исходной функцииПостроим график среднеквадратичного отклонения
Найдем минимальное
, при котором будет меньше