Вторая пачка часть 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
Индекс
Элементарные функции    Линейные уравнения    Нелинейные уравнения    Случайные числа


Hosted by uCoz