|
Текст подпрограммы и версий ids8r_p.zip , ids8e_p.zip |
Тексты тестовых примеров tids8r_p.zip , tids8e_p.zip |
Вычисление вторых производных таблично - заданной функции в узлах неравномерной сетки методом кубических или натуральных кубических сплайнов при заданных первых производных функции в концевых узлах сетки.
Пусть заданы узлы неравномерной сетки x1, x2, ..., xN, упорядоченные по возрастанию: x1 < x2 < ...< xN и значения y1, y2, ..., yN функции f (x) в узлах этой сетки. Пусть также известны значения YP1 и YPN первой производной функции f (x) в концевых узлах x1 и xN соответственно.
Если YP1 и YPN меньше (XMAX) 1/2, где XMAX - наибольшее положительное вещественное число, представимое на используемой машине, то подпрограмма IDS8R вычисляет вторые производные функции f (x) в узлах заданной сетки методом кубических сплайнов. Если же YP1 и/или YPN больше или равны (XMAX) 1/2, то подпрограмма IDS8R при вычислении вторых производных устанавливает соответствующее краевое условие для натурального кубического сплайна (нулевое значение второй производной в соответствующем концевом узле).
Н.С.Бахвалов. Численные методы. Изд - во "Наука", 1973.
procedure IDS8R(var X :Array of Real; var Y :Array of Real;
N :Integer; YP1 :Real; YPN :Real;
var Y2 :Array of Real; var U :Array of Real);
Параметры
| X - | вещественный вектор длины N, содержащий узлы заданной неравномерной сетки x1, x2, ..., xN, упорядоченные по возрастанию; |
| Y - | вещественный вектор длины N, содержащий значения y1, y2, ...,yN функции f (x) в узлах заданной сетки; |
| N - | количество узлов сетки (тип: целый); |
| YP1 - | заданное значение первой производной функции f (x) в узле x1 (тип: вещественный); |
| YPN - | заданное значение первой производной функции f (x) в узле xN (тип: вещественный); |
| Y2 - | вещественный вектор длины N, содержащий вычисленные вторые производные функции f (x) в узлах заданной сетки; |
| U - | вещественный вектор длины N, используемый в подпрограмме в качестве рабочего. |
Версии
| IDS8E - | вычисление вторых производных таблично - заданной функции в узлах неравномерной сетки методом кубических или натуральных кубических сплайнов при заданных первых производных функции в концевых узлах сетки в режиме расширенной (Extended) точности. При этом параметры X, Y, YP1, YP2 и Y2 должны иметь тип Extended. |
Вызываемые подпрограммы: нет
Замечания по использованию: нет
Unit tids8r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, IDS8R_p;
function tids8r: String;
implementation
function tids8r: String;
var
N,I,_i :Integer;
R,YP1,YPN :Real;
X :Array [0..4] of Real;
Y :Array [0..4] of Real;
Y2 :Array [0..4] of Real;
U :Array [0..4] of Real;
label
_1;
begin
Result := ''; { результат функции }
R := 0.0;
N := 5;
for I:=1 to N do
begin
X[I-1] := R;
Y[I-1] := Sin(X[I-1]);
_1:
R := R+0.2;
end;
YP1 := Cos(X[0]);
YPN := Cos(X[N-1]);
IDS8R(X,Y,N,YP1,YPN,Y2,U);
Result := Result + #$0D#$0A;
for _i:=0 to 4 do
begin
Result := Result + Format('%20.16f ',[Y2[_i]]);
if ( ((_i+1) mod 3)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
UtRes('tids8r',Result); { вывод результатов в файл tids8r.res }
exit;
end;
end.
Результаты:
Y2 = ( -0.15369E+00, -0.19929E+00, -0.39072E+00,
-0.56655E+00, -0.71964E+00 )