Вторая пачка часть 241
0*C[N]);
FOR I := 1 TO NM1 DO
BEGIN
B[I] := (Y[I+1]-Y[I]) / D[I]-D[I]*(C[I+1]+2*C[I]);
D[I] := (C[I+1]-C[I])/D[I];
C[I] := 3.0*C[I];
END;
C[N] := 3*C[N]; D[N] := D[N-1];
END
ELSE
BEGIN B[1] := (Y[2]-Y[1])/(X[2]-X[1]);
C[1] := 0; D[1] := 0;
B[2] := B[1]; C[2] := 0; D[2] := 0;
END;
END.
{ *** ПОДПРОГРАММА ВЫЧИСЛЯЕТ ЗНАЧЕНИЕ ***
***КУБИЧЕСКОГО СПЛАЙНА ПО СХЕМЕ ГОРНЕРА*** }
FUNCTION SEVAL (N:INTEGER; U:REAL;
X,Y,B,C,D:MAS): REAL;
LABEL 10,30;
VAR I,J,K: INTEGER; DX: REAL;
BEGIN
I:= 1;
IF I>= N THEN I:=1;
IF U< X[I] THEN GOTO 10;
IF U<= X[I+1] THEN GOTO 30;
10: I := 1; J := N+1;
REPEAT K:=(I+J) DIV 2;
IF U<X[K] THEN J:=K;
IF U>=X[K] THEN I:=K;
UNTIL J<=I+1;
30: DX := U-X[I];
SEVAL := Y[I] + DX*(B[I] + DX*(C[I] + DX*D[I]));
END.
Погрешность сплайн-интерполяции можно оце¬нить, поль¬зуясь методом, описанным в § 1.
Для проверки программы использовались дан¬¬ные § 1 (табл. 2.1), варианты А и Б. Здесь опре¬де¬ля¬лось зна¬че¬ние функции в средней точке о¬трез¬ка [a, b] - Хs = (х3 + х4)*0,5. При этом пред-ва¬ри¬тель¬но вы¬¬пол¬ня¬¬лась сплайн-ин¬¬тер¬по¬ля¬ция по¬ли¬но¬мом треть¬ей ст嬬¬пени. Результат сра⬬ни-ва묬ся с пр謬бли¬жением фунꬬции по¬ли¬но¬мом Ла-гран¬¬¬жа (ал¬го¬ритм из § 1) для обо¬их ва¬ри¬ан¬тов.
Заметим, что расчетных точек в примере (табл. 2.1) да¬но 6, а для построения сплайна необходимо только 4, по¬э¬то¬му для каждого варианта строились два сплайна - пер¬вый по точкам 1 - 4 и второй по точкам 2 - 6. Таким об-ра¬зом обеспечивалось перекрытие в две точки по цент¬ру от¬рез¬ка именно там, где за¬да¬ва¬лась точка Хs. Ис¬¬тин¬ное зна¬че¬ние Y определялось как сред¬нее между значениями функ¬ции, по¬-лученными по пер¬вому и вто¬рму сплайну.
Точность вычислений задавалась 10-5.
Интересно заметить, что сплайны (табл. 2.4) проходят блее глад¬ко по сравнению с полиномами пятой сте¬пе¬ни (табл. 2.1), что подтверждает тезис о не¬у¬стой¬чивости прцес¬са интерполирования по¬ли¬но¬ма¬ми высоких сте¬пе¬-ней
Индекс
Элементарные функции
Линейные уравнения
Нелинейные уравнения
Случайные числа