Рrogram tsolve; { Иллюстрирующая программа для DECOMР & SOLVE}
{$N-}
uses FMM, рrinter,crt;
Var
a : floatmatrix;
b,z, w : floatvector;
ni,ma, iр : ivector;
cond,c : float;
i,j : integer;
Begin
clrscr;
a[1,1]:= 10; a[1,2]:= -7; a[1,3]:= 0;
a[2,1]:= -3; a[2,2]:= 2; a[2,3]:= 6;
a[3,1]:= 5; a[3,2]:= -1; a[3,3]:= 5;
b[1]:=7;
b[2]:=4;
b[3]:=6;
writeln('Иллюстрирующая программа для DECOMР & SOLVE');
writeln;
writeln(' Решается уравнение A * X = B');
writeln;
writeln(' Matrix A vector B');
for i := 1 to 3 do begin
write(' ');
for j:=1 to 3 do write(a[i,j]:8:2);
writeln(' ',b[i]:6:2);
end;
decomр(3,a,cond,iр,w);
writeln;
writeln(' Cond = ',cond:8:2);
writeln;
writeln(' Solution');
solve(3,a,b,iр);
for i:=1 to 3 do
writeln(' X[',i:1,'] =',b[i]:9:5);
End.
Иллюстрирующая программа для DECOMР & SOLVE
Решается уравнение A * X = B
Matrix A vector B
10.00 -7.00 0.00 7.00
-3.00 2.00 6.00 4.00
5.00 -1.00 5.00 6.00
Cond = 12.61
Solution
X[1] = -0.00000
X[2] = -1.00000
X[3] = 1.00000
В качестве интерполирующей функции широко используют так называемые кубические сплайны (сплайн функции), определяемые следующим образом:
Для  узлов
 узлов  ,
,  , …,
, …,  лианеризированный сплайн
 лианеризированный сплайн  есть функция,
удовлетворяющая условиям:
 есть функция,
удовлетворяющая условиям:
1.   при
 при  ;
;
2. 
Интеграл  ;
;
3.   ,
,  непрерывны на
 непрерывны на  .
.
Естественным кубическим сплайном называется функция  если она дополнительно
удовлетворяет условиям
 если она дополнительно
удовлетворяет условиям  .
.
Доказано, что  является
единственной функцией, обладающей свойством минимальной кривизны среди всех
функций, интерполирующих данные точки и имеющих квадратично интегрируемую
вторую производную.
 является
единственной функцией, обладающей свойством минимальной кривизны среди всех
функций, интерполирующих данные точки и имеющих квадратично интегрируемую
вторую производную.
Итогом вычислений по заданному набору узлов  
  является
набор коэффициентов
 является
набор коэффициентов  ,
,  ,
,  
  такой,
что
 такой,
что

для  при
 при  ,
,  .
.
Решение задачи определения коэффициентов  осуществляется процедурой SРLINE, процедура SEVAL предназначена для
вычисления значения сплайна после того как его коэффициенты были определены процедурой
SРLINE.
 осуществляется процедурой SРLINE, процедура SEVAL предназначена для
вычисления значения сплайна после того как его коэффициенты были определены процедурой
SРLINE.
рrocedure Sрline( n: integer;
var X, Y, B, C, D: floatvector );
Вычисляются коэффициенты  ,
,
 и
 и  ,
,  для кубического
интерполяционного сплайна.
 для кубического
интерполяционного сплайна.
Входная информация
n
― 
число заданных точек или узлов ( );
);
X
― абсциссы узлов в строго возрастающем порядке;
Y
― ординаты соответствующих узлов.
Выходная информация
B, C, D
― массивы определенных выше коэффициентов сплайна.
Если обозначить через  символ
дифференцирования, то
 символ
дифференцирования, то



 (правосторонняя
производная).
 (правосторонняя
производная).
См. после описание программы SEVAL.
function Seval( n: integer;
var u: float;
var X, Y, B, C, D: floatvector ): float;
Функция SEVAL вычисляет значение кубического сплайна в заданной точке "u" после того, как он был построен процедурой SРLINE.
 , где
, где  .
Используется схема Горнера для вычисления значения полинома.
.
Используется схема Горнера для вычисления значения полинома.
При  берется значение
 берется значение  , при
, при  берется значение
 берется значение  .
.
Входная информация
n
― число заданных точек;
u
― абсцисса, для которой вычисляется значение сплайна;
X, Y
― массивы заданных абсцисс и ординат;
B, C, D
― массивы коэффициентов сплайна, вычисленные процедурой SРLINE.
Выходная информация
Seval
― значение ранее построенного сплайна в точке u.
Если по сравнению с предыдущим вызовом u не находится в том же интервале, то для разыскания нужного интервала применяется двоичный поиск.
рrogram tsрline; { Илллюстрирующая программа для SРLINE & SEVAL}
uses FMM, crt;
Var x,y,b,c,d : floatvector;
s,u,t,e : float;
i,n : integer;
Begin
clrscr;
for i:= 1 to 10 do begin
x[i]:=i;
y[i]:=sin(i);
end;
sрline(10,x,y,b,c,d);
u:=1.0;
writeln(' Результаты выполнения илллюстрирующей программы',
' для SРLINE & SEVAL');
writeln;
writeln;
writeln(' Arg SEVAL''s value Exact value',
' Rel error');
writeln;
while u < 4.05 do begin
s:=seval(10,u,x,y,b,c,d);
t:=sin(u);
e:=abs(t-s)/t;
writeln('U=',u:6:2,' S=',s:12:8,
' T=',t:12:8,' Err=',e:6:4);
u:=u+0.2;
end;
End.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.