ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 08.04.2021
Просмотров: 399
Скачиваний: 1

16
Таблица
2
Варианты
задания
точек
, ,
Вариант
1 0,175118 0,715878
0,464331
2 0,090566 0,826611
0,395142
3 0,157369 0,826216
0,445135
4 0,053526 0,866027
0,610308
5 0,109658 0,710092
0,468515
6 0,094189 0,755627
0,343888
7 0,132747 0,755108
0,447232
8 0,058421 0,731564
0,429815
9 0,063946 0,907395
0,455020
10 0,182461 0,717093
0,525286
11 0,173762 0,759231
0,482714
12 0,129140 0,766507
0,238812
Вариант
2.
Таблица
1
Значения
функции
в
узлах
сетки
Узлы
сетки
Значение
функции
в
узлах
0,0 0,962852
0,1 1,044824
0,2 1,123512
0,3 1,198709
0,4 1,270228
0,5 1,337904
0,6 1,401593
0,7 1,461175
0,8 1,516552
0,9 1,567650
Таблица
2
Варианты
задания
точек
, ,
Вариант
1 0,052914 0,882964
0,391986
2 0,147327 0,721404
0,355038
3 0,148489 0,822272
0,544808
4 0,070926 0,901307
0,213966
5 0,124548 0,769617
0,303341
6 0,009510 0,944211
0,417157
7 0,087996 0,778350
0,546174

17
Продолжение
таблицы
2
Вариант
8 0,051598 0,709740
0,542017
9 0,083288 0,887929
0,517459
10 0,174607 0,902430
0,240569
11 0,172537 0,819656
0,698720
12 0,160270 0,851787
0,463563

18
ПРИЛОЖЕНИЕ
На
первом
этапе
создается
входной
файл
,
содержащий
значения
функции
в
узлах
интерполяции
(
эти
значения
берутся
из
табл
. 1)
и
строится
таблица
конечных
разностей
.
Значения
этой
таблицы
обозначаются
fr[i,j]
и
являются
входными
для
методов
Ньютона
,
Стирлинга
и
Бесселя
.
Для
куби
-
ческого
сплайна
создается
новый
входной
файл
(
содержащий
число
частич
-
ных
отрезков
,
узлы
интерполяции
и
значения
функции
в
узлах
).
Для
выполнения
задания
можно
использовать
следующие
процедуры
-
функции
:
1.
Процедура
newt
,
реализующая
алгоритм
построения
первой
интер
-
поляционной
формулы
Ньютона
:
function newt(m,k:integer; x:real):real;
{
Входные
параметры
:
степень
интерполяционного
многочлена
,
номер
ближайшего
узла
,
точка
,
в
которой
ищем
значение
интерпо
-
ляционного
многочлена
}.
var
i :integer;
y,z,q :real;
begin
y:=fr[k,1]; q:=x*10-k+1;
z:=1;
for i:=1 to m do begin
z:=z*(q-i+1)/i;
y:=y+z*fr[k,i+1]
end;
newt:=y
end.
Здесь
число
шагов
,
необходимое
для
достижения
точки
исходя
из
точки
;
2.
Процедура
stir
,
реализующая
алгоритм
построения
формулы
Стир
-
линга
:
function stir(m,k:integer; x:real):real;
{
Входные
параметры
:
степень
интерполяционного
многочлена
,
номер
ближайшего
узла
,
точка
,
в
которой
ищем
значение
интерпо
-
ляционного
многочлена
.}
var
i,j,ii,jj,l :integer;
y,z,q,r,s :real;
begin
l:=trunc(m/2); q:=x*10-k+1; z:=1.0; i:=2;
y:=fr[k,1]+0.5*q*(fr[k-1,2]+fr[k,2]);

19
repeat
ii:=trunc((i-1)/2);
z:=z*(q+ii)*(q-ii)/((i-1)*i);
y:=y+z*fr[k-trunc(i/2),i+1];
i:=i+2
until i>2*l;
r:=0.0; s:=q; j:=3;
repeat
jj:=trunc((j-1)/2);
s:=s*(q+jj)*(q-jj)/((j-1)*j);
r:=r+s*0.5*(fr[k-trunc((j+1)/2),j+1]+(fr[k-trunc(j/2),j+1]));
j:=j+2
until j>2*l-1;
stir:=y+r
end;
3.
Процедура
spl
,
реализующая
алгоритм
построения
естественного
кубического
сплайна
.
Процедура
spl
составляет
систему
,
основываясь
на
оптимальном
спо
-
собе
построения
естественного
кубического
сплайна
.
Процедура
sy
решает
систему
методом
прогонки
.
procedure sy(il,ir:integer; a,b,d:vec; var c:vec);
{
Входные
параметры
: il –
номер
1-
го
уравнения
системы
; ir –
номер
последнего
уравнения
системы
; a –
коэффициенты
ниже
главной
диагонали
;
b –
коэффициенты
выше
главной
диагонали
; d –
коэффициенты
на
главной
диагонали
; c –
вектор
правой
части
.
Выходные
параметры
: c –
решение
системы
.}
var
i,j,l :integer;
r :real;
begin
l:=il+1;
for i:=l to ir do begin
r:=b[i]/d[i-1];
d[i]:=d[i]-r*a[i-1];
c[i]:=c[i]-r*c[i-1]
end;
c[ir]:=c[ir]/d[ir];
for i:=l to ir do begin
j:=ir-i+il;
c[j]:=(c[j]-a[j]*c[j+1])/d[j]
end
end;

20
procedure spl(n:integer; x,f:vec; var x0,y0:real; var i0:integer);
{
Входные
параметры
:
число
узлов
;
вектор
,
состоящий
из
уз
-
лов
;
вектор
,
содержащий
значения
функции
в
узлах
; x0 –
точка
,
в
кото
-
рой
ищем
значение
интерполяционного
многочлена
.
Выходные
параметры
: y0 –
значение
кубического
сплайна
в
точке
x0;
i0 –
номер
частичного
отрезка
,
в
котором
находится
точка
.}
var
i :integer;
r,t :real;
a,b,c,d :vec;
begin
for i:=1 to n do b[i]:=x[i]-x[i-1];
for i:=1 to n do if (x[i-1]<x0) and (x0<=x[i]) then i0:=i;
write('i0= ',i0);
for i:=1 to n-1 do
begin
d[i]:=2*(b[i]+b[i+1]);
a[i]:=b[i+1];
c[i]:=6*((f[i+1]-f[i])/b[i+1]-(f[i]-f[i-1])/b[i])
end;
sy(1,n-1,a,b,d,c); c[0]:=0; c[n]:=0;
r:=(x[i0]-x0); t:=(x0-x[i0-1]);
y0:=(c[i0-1]*r*r*r+c[i0]*t*t*t)/(6*b[i0]);
y0:=y0+(f[i0-1]/b[i0]-c[i0-1]*b[i0]/6)*r;
y0:=y0+(f[i0]/b[i0]-c[i0]*b[i0]/6)*t
end.