Вторая пачка часть 240
В области пе¬р嬬крытия ре¬ко¬мен¬дуется вы-чис¬лять зна¬ч嬬ние фунꬬции как среднее из одного и дру¬го¬го сплай¬на.
Формальные параметры процедур. Процедура SPLI¬NE. Входные: n (тип integer) - ко¬ли¬чес¬тво точек, по ко¬то¬рым строится сплайн (oно должно быть не меньше 2, но не боль¬ше 4); x, y (тип real) - два массива раз¬ме¬ром 1?n, в ко¬то-рые предварительно за¬писаны данные для построения оче¬редного сплайна. Вы¬ходные: b, c, d (тип real) - массивы ко¬эффициентов ку-бического сплай¬на, если были пред¬ло¬ж嬬ны 4 точки.
Процедура SEVAL. Входные: n (тип integer) - коли¬чес¬т¬во тчек, по ко¬то¬рым строится сплайн; u (тип real) - точ¬ка, в которой надо опре-делить значение функ¬ции; x, y (тип re¬al) - два массива раз¬мером 1?n, в ко¬то¬рые пред¬вବри¬тель-но зବпи¬са¬ны данные для по¬стро¬е¬ния оче¬ред¬но¬го сплай¬на; b, c, d (тип real) - массивы коэффициентов ку¬¬би¬ческого сплай¬на, если были пред¬ло¬же¬ны 4 точки. Вы¬¬ход¬ные: процедура-функ¬ция SEVAL возвращает ве¬ще¬ст¬вен¬ное значение функ¬ции в указанной точ¬ке u.
{ ***ПРОЦЕДУРА ВЫЧИСЛЕНИЯ КУБИЧЕСКОГО
СПЛАЙНА ПО ЗАРАНЕЕ ЗАДАННЫМ 4 ТОЧКАМ ***}
PROCEDURE SPLINE (N:INTEGER; X,Y: MAS; VAR B,C,D : MAS);
VAR NM1, I : INTEGER; T : REAL;
BEGIN NM1 := N-1;
IF N<2 THEN EXIT;
IF N>=3 THEN
{ *** ВЫЧИСЛЯЕМ КОЭФФИЦИЕНТЫ ДЛЯ СПЛАЙНА;
*** СТРОИМ 3-Х ДИАГОНАЛЬНУЮ СИСТЕМУ: ***
*** В - ДИАГОНАЛЬ, D - НАДДИОГОНАЛЬ, ***
*** С - ПРАВЫЕ ЧАСТИ ***}
BEGIN D[1] := X[2]-X[1];
C[2] := (Y[2]-Y[1]) / D[1];
FOR I := 2 TO NM1 DO
BEGIN D[I] := X[I+1]-X[I];
B[I] := 2.0*(D[I-1]+D[I]);
C[I+1]:= (Y[I+1]-Y[I])/D[I];
C[I] := C[I+1] - C[I];
END;
{ *** ГРАНИЧНЫЕ УСЛОВИЯ *** }
B[1] := -D[1]; B[N] := -D[N-1];
C[1] := 0.0; С[N] := 0.0;
IF N<>3 THEN
BEGIN
C[1] := C[3] / (X[4]-X[2])-C[2]/(X[3]-X[1]);
C[N] := C[N-1]/(X[N]+X[N-2])-
C[N-2]/(X[N-1]-X[N-3]);
C[1] := C[1]*D[1]*D[1]/(X[4]-X[1]);
C[N] := -C[N]*D[N-1]*D[N-1]/(X[N]-X[N-3]);
END;
{ *** ПРЯМОЙ ХОД *** }
FOR I := 2 TO N DO
BEGIN T:= D[I-1]/B[I-1];
B[I] := B[I] - T*D[I-1]; C[I] := C[I] - T*C[I-1];
END;
{ *** ОБРАТНАЯ ПОДСТАНОВКА ***}
C[N] := C[N] / B[N];
FOR I:=NM1 DOWNTO 1 DO C[I] := (C[I]-D[I]*C[I+1])/B[I];
{ *** В С(I) ХРАНИТСЯ SIGМА(I) *** }
B[N] := (Y[N]-Y[NM1]) / D[NM1] +
D[NM1]*(C[NM1+2
Индекс
Элементарные функции
Линейные уравнения
Нелинейные уравнения
Случайные числа