Текст подпрограммы и версий ids7r_p.zip |
Тексты тестовых примеров tids7r_p.zip |
Вычисление вторых и третьих производных табличной функции в узлах неравномерной сетки методом интерполяционных сплайнов 5 - й степени по известным значениям первых производных в узлах сетки и значениям вторых производных в концевых точках.
Пусть в узлах неравномерной сетки xK : x1<x2< ...<xN заданы значения функции y(x) : yK = y(xK) и ее первой производной: y'K = y'(xK), и известны значения ее второй производной в концевых точках : y''1 = y''(x1), y''N = y''(xN). Интерполяционный сплайн S(x) 5 - й степени на каждом из отрезков [xK, xK+1] является многочленом 5 - й степени
AK(x-xK)5 + BK(x-xK)4 + CK(x-xK)3 + DK(x-xK)2 + EK(x-xK) + FK , где AK = 1/(ΔxK)4 [ 6 (ΔyK/ΔxK) - 3 (y'K + y'K+1) + ΔxK/2 (y''K+1 - y''K) ] , BK = 1/(ΔxK)3 [ -15(ΔyK/ΔxK) + 8y'K + 7y'K+1 + ΔxK/2 (3y''K - 2y''K+1) ] , CK = y'''K / 6 = = 1/(ΔxK)2 [ 10 ΔyK/ΔxK - 6y'K - 4 y'K+1 + ΔxK/2 (y''K+1 - 3y''K) ] , DK = y''K / 2 , EK = y'K , FK = yK , ΔxK = xK+1 - xK , ΔyK = yK+1 - yK ,
а вторые производные y''K определяются из условия непрерывности третьей производной S''' (x) сплайна S (x).
Подпрограмма IDS7R вычисляет в узлах сетки значения второй и третьей производной сплайна S (x).
Дж.Алберг, Э.Нильсон, Дж.Уолш, Теория сплайнов и ее приложения, M., Мир, 1972.
procedure IDS7R(N :Integer; var X :Array of Real; var Y :Array of Real; var Y1 :Array of Real; var Y2 :Array of Real; var Y3 :Array of Real);
Параметры
N - | заданное число узлов сетки, N ≥ 3 (тип: целый); |
X, Y - Y1 | вещественные одномерные массивы длины N, содержащие заданные значения xK, yK и y'K соответственно; |
Y2 - | вещественный одномерный массив длины N, в который помещаются вычисленные значения второй производной y''K; на входе y2 (1) = y''1, y2 (N) = y''N; |
Y3 - | вещественный одномерный массив длины N, в который помещаются вычисленные значения третьей производной y'''K. |
Версии: нет
Вызываемые подпрограммы: нет
Замечания по использованию: нет
На сетке xK = (K-1)*π/4 брались значения y = sin (xK) , K = 1, 2, ..., 5, y'K = cos (xK), y''1 = -sin (x1), y''5 = -sin (x5).
Unit tids7r_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc, UtRes_p, IDS7R_p; function tids7r: String; implementation function tids7r: String; var N,K :Integer; Y2 :Array [0..4] of Real; Y3 :Array [0..4] of Real; const X :Array [0..4] of Real = ( 0.0,0.7854,1.5708,2.3562,3.1416 ); Y :Array [0..4] of Real = ( 0.0,0.7071,1.0,0.7071,0.0 ); Y1 :Array [0..4] of Real = ( 1.0,0.7071,0.0,-0.7071,-1.0 ); label _2; begin Result := ''; { результат функции } Y2[0] := 0.0; Y2[4] := 0.0; N := 5; IDS7R(N,X,Y,Y1,Y2,Y3); for K:=1 to N do begin _2: Result := Result + Format(' %20.16f %20.16f %20.16f %20.16f ', [Y[K-1],Y1[K-1],Y2[K-1],Y3[K-1]]) + #$0D#$0A; end; UtRes('tids7r',Result); { вывод результатов в файл tids7r.res } exit; end; end. Результаты: Y2 = ( 0., -7074, -1.0004, -0.7074, 0. ) Y3 = ( -1.002, -0.7089, -0.00002, 0.7090, 1.003 )