Лабораторная работа № 8
Аппроксимация функции методом наименьших квадратов
Постановка задачи
Определить коэффициенты а0, а1, а2 аппроксимирующей функции
Блок-схема

Текст программы
program lab8;
const k=10;
type vect=array [0..k] of real;
mass=array [1..3] of real;
matr=array [1..3] of mass;
function sum(a:matr;x:mass;n,i:word):real;
var s:real;
j:word;
begin
s:=0;
for j:=i+1 to n do s:=s+a[i][j]*x[j];
sum:=s;
end;
var i,n,j,b:word;
x,y:vect;
m:matr;
r,h:mass;
a:real;
begin
writeln('Введите количество узлов:');
readln(n);
writeln('Введите ',n,' экспериментальных точек:');
for i:=1 to n do read(x[i],y[i]);
m[1][1]:=0;
for i:=1 to n do m[1][1]:=m[1][1]+1;
m[1][2]:=0;
for i:=1 to n do m[1][2]:=m[1][2]+x[i];
m[1][3]:=0;
for i:=1 to n do m[1][3]:=m[1][3]+exp(ln(x[i])/3);
m[2][1]:=m[1][2];
m[2][2]:=0;
for i:=1 to n do m[2][2]:=m[2][2]+sqr(x[i]);
m[2][3]:=0;
for i:=1 to n do m[2][3]:=m[2][3]+x[i]*exp(ln(x[i])/3);
m[3][1]:=m[1][3];
m[3][2]:=m[2][3];
m[3][3]:=0;
for i:=1 to n do m[3][3]:=m[3][3]+sqr(exp(ln(x[i])/3));
h[1]:=0;
for i:=1 to n do h[1]:=h[1]+y[i];
h[2]:=0;
for i:=1 to n do h[2]:=h[2]+x[i]*y[i];
h[3]:=0;
for i:=1 to n do h[3]:=h[3]+exp(ln(x[i])/3)*y[i];
for i:=1 to 2 do
for j:=i+1 to 3 do
begin
a:=-m[j][i]/m[i][i];
for b:=i+1 to 3 do m[j][b]:=m[j][b]+a*m[i][b];
h[j]:=h[j]+a*h[i];
end;
for i:=3 downto 1 do r[i]:=(h[i]-sum(m,r,3,i))/m[i][i];
writeln('Коэффициенты аппроксимационной функции:');
for i:=1 to 3 do write(r[i]:8:3);
end.
Тестовые данные
Введите количество узлов:
5
Введите 5 экспериментальных точек:
9.2 2.1 11.4 3.0 11.9 4.1 13.5 5.2 14.0 6.3
Коэффициенты аппроксимационной функции:
85.477 4.848 -61.083
