logo
ЭУМКД_ДиВМ3

Аппроксимация функций с помощью кубического сплайна

Входные параметры: N - число узлов интерполяции; y - массив размерности n, содержащий значения функции в узлах интерполяции; x-массив размерности n, содержащий значения узлов интерполяции; q-точка в которой вычисляем значения функции интерполяции.

Выходные параметры: приближенное значение функции в точке q; графическая интерпретация результата.

Схема алгоритма приведена на рисунке 7.

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

xi

yi

xi

yi

1

2,05

6

1,88

2

1,94

7

1,71

3

1,92

8

1,60

4

1,87

9

1,56

5

1,77

10

1,40

Текст программы:

Procedure Spline3(N:integer;X,Y:mas;S0,SN:real;Var A,B,C,D:mas);

Var F : Mas; H2,H3,p : real; i,j : integer;

Begin

H2:=X[2]-X[1];

H3:=X[3]-X[2];

A[1]:=(2*(H2+H3))/H3;

f[1]:=(6/h3)*(((y[3]-y[2])/h3)-((y[2]-y[1])/h2))-(h2*s0)/h3;

For i:=4 to n-1 do

begin

h2:=x[i-1]-x[i-2]; h3:=x[i]-x[i-1];

a[i-2]:=(2/h3)*(h2+h3); b[i-2]:=h2/h3;

f[i-2]:=(6/h3)*(((y[i]-y[i-1])/h3-((y[i-1]-y[i-2])/h2)));

end;

h2:=x[n-1]-x[n-2]; h3:=x[n]-x[n-1];

p:=2*(h2+h3); b[1]:=h2/p;

f[n-2]:=(6/p)*(((y[n]-y[n-1])/h3)-((y[n-1]-y[n-2])/h2))-(h3*sn)/p;

d[1]:=1/a[1]; c[1]:=f[1];

For i:=2 to n-3 do

begin

d[i]:=1/(a[i]-b[i]*d[i-1]); c[i]:=f[i]-b[i]*d[i-1]*c[i-1];

end;

d[n-2]:=(f[n-2]-b[1]*d[n-3]*c[n-3])/(1-b[1]*d[n-3]);

For i:=n-3 downto 1 do

d[i]:=d[i]*(c[i]-d[i+1]);

c[1]:=s0; c[n]:=sn;

For i:=2 to n-1 do c[i]:=d[i-1];

For i:=1 to n do

begin

a[i]:=0; b[i]:=0; d[i]:=0; end;

For i:=2 to n do

begin

h2:=x[i]-x[i-1]; d[i]:=(c[i]-c[i-1])/h2;

b[i]:=h2*c[i]/2-(Sqr(h2))*d[i]/6+(y[i]-y[i-1])/h2; a[i]:=y[i];

end; end;

Вычисления по программе привели к следующим результатам:

X=1 Y=2,21

X=1,5 Y=2,06

X=2 Y=1,94

X=2,5 Y=2,00

X=3 Y=1,92

X=3,5 Y=1,99

X=4 Y=1,87

X=4,5 Y=1,88

X=5 Y=1,77

X=5,5 Y=1,91

X=6 Y=1,88

X=6,5 Y=1,90

X=7 Y=1,71

X=7,5 Y=1,71

X=8 Y=1,6

X=8,5 Y=1,66

X=9 Y=1,56

X=9,5 Y=1,57

X=10 Y=1,4

Варианты заданий для решения задачи приближения функций приведены в таблице 2.

Рисунок 7 - Схема алгоритма приближения функций с помощью сплайнов