Текст подпрограммы и версий 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 )