Вторая пачка часть 243
.., 2N +1; N (тип in¬teger) - число, за¬дающее ко¬личество рав¬но¬от¬сто¬я¬щих узлов хi; М (тип in¬te¬ger) - ко¬ли¬чес¬тво вы¬чис¬ля¬е¬мых пар кэф¬фи¬циентов Фурье. Выходные: А (тип real) - массив из М + 1 чисел, со¬дер¬¬жа¬щий зна¬чения ко¬эф¬фи¬-циентов Фурь¬е а0 , а1 , ..., аm; В (тип real) - мас¬сив из М +1 ч謬¬сел, со¬держащий знବче¬ния ко¬-эф¬фи¬циентов Фурье b0 , b1 , ..., bm; IЕR (тип in¬te¬ger) - при¬знак ошиб¬ки во вход¬ных па¬ра-мет¬рах: IЕR = 0 нет ошиᬬки; IЕR = 1, если М > N; IЕR = 2, если М< 0.
{ПОДПРОГРАММА ВЫЧИСЛЕНИЯ КОЭФФИЦИЕНТОВ ТРИГО¬НОМЕТРИЧЕСКОГО ИНТЕРПОЛЯЦИОННОГО МНОГОЧЛЕНА }
PROCEDURE FORINT (FNT:MAS21;N,M:INTEGER;
VAR A,B:MAS; VAR IER : INTEGER);
LABEL 70,100;
VAR I, AN, J : INTEGER; DN : BOOLEAN;
Q,CONS,COEF,S1,S,C1,C,FNTZ,
U0,U1,U2: REAL;
BEGIN
IER := 0;
IF M<0 THEN
BEGIN
IER := 2;
EXIT;
END;
IF M-N>0 THEN
BEGIN
IER := 1;
EXIT;
END;
AN := N;
COEF := 2.0 / (2.0*AN+1.0);
DN := FALSE;
CONS := 3.14159265*COEF;
S1 := SIN (CONS);
C1 := COS (CONS);
C := 1.0;
S := 0.0; J := 1;
FNTZ := FNT[1];
REPEAT
U2 := 0.0;
U1 := 0.0;
I := 2*N + 1;
REPEAT
U0 := FNT [I] + 2.0 *C*U1-U2;
U2:= U1;
U1 := U0;
DEC (I);
UNTIL I<=1;
A[J] := COEF*(FNTZ+C*U1-U2);
B[J] := COEF*S*U1;
IF J>=(M+1) THEN DN := TRUE
ELSE
BEGIN
Q := C1*C-S1*S;
S := C1*S + S1*C;
C := Q; INC (J);
END;
UNTIL DN;
A[1] := A[1]/2.0;
END.
Интересно заметить, что с возрастанием m мнго¬член Рm(х) аппроксимирует функцию f(х) с воз¬рас¬та¬ю¬щей сте¬пенью точности, т.е. ошибка ин¬тер¬по¬ли¬рвания
| f(х) - Рm (х) | 0 при m .
Именно этим свойством тригонометрическая ин¬тер¬по¬ля¬ция отличается от полиноминальной, где при воз¬рас¬та¬нии степени полинома cам мно¬гчлен мо¬жет при¬ни-мать ка¬кие угодно большие знବче¬ния для всех точек x, кроме са¬мих узлов ин¬тер¬¬по¬ляции.
Тригонометрическая интерполяция полностью св¬бод¬на от этого недостатка
Индекс
Элементарные функции
Линейные уравнения
Нелинейные уравнения
Случайные числа