Вторая пачка часть 117
000000 0.000000 0.000000
Сумма: -0.199704 -0.0049866 0.00001570
у14 - у1: -0.199704 -0.004987 0.0000157
{**** ПРОЦЕДУРА “МЕТОД ЭЙЛЕРА С УТОЧНЕНИЕМ” ***}
FUNCTION EYLER ( X,Y,H,EPS : REAL) : REAL;
VAR YK, Y0 : REAL; DN : BOOLEAN;
BEGIN
DN := FALSE;
Y0 := Y + FUNC (X,Y) * H;
REPEAT
YK := Y + FUNC (X,Y0) * H * 0.5;
IF ABS ( YK - Y0) < EPS THEN DN := TRUE;
Y0 := YK;
UNTIL DN;
EYLER := Y0;
END;
{ ** ПРОЦЕДУРА "МЕТОД АДАМСА " ** }
BEGIN
FOR I := 1 TO 20 DO XI[I] := 0.0;
DYI := XI;
Y0 := YN;
YI:=XI;
QI:= XI;
DQI := XI;
D2QI:= XI;
D3QI:=XI;
YSH:=XI;
X0 := A;
XI[1] := X0;
YI[1] := Y0;
I := 1;
YSH [1] := FUNC (X0,Y0);
QI[1] := H*YSH[1];
REPEAT
Y := EYLER (X0,Y0,H,EPS);
INC (I);
X0 := X0 + H;
Y0 := Y;
XI[I] := X0;
YI[I] := Y;
YSH [I] := FUNC (X0,Y0);
QI[I] := H*YSH[I];
DQI[I-1] := QI[I] - QI[I-1];
IF I>2 THEN
D2QI[I-2] := DQI[I-1]-DQI[I-2];
IF I>3 THEN
D3QI[I-3] := D2QI[I-2]-D2QI[I-3];
UNTIL I >= 4;
REPEAT
DYI[I]:= QI[I]+0.5*DQI[I-1]+5*D2QI[I-2]/12+
3*D3QI[I-3]/8; INC(I); X0 := X0 + H;
XI[I] := X0;
YI[I] := YI[I-1] + DYI[I-1];
YSH [I] := FUNC (XI[I],YI[I]);
QI[I] := H*YSH[I];
DQI[I-1] := QI[I] - QI[I-1];
D2QI[I-2] := DQI[I-1]-DQI[I-2];
D3QI[I-3] := D2QI[I-2]-D2QI[I-3];
UNTIL I=10;
END;
Формальные параметры процедуры. Входные: а, b (тип real) - начало и конец от¬резка, на котором ищут ре¬ше¬ние; h (тип real) - шаг раз-би¬е¬ния отрезка [а, b]; ЕРS (тип re¬al) - заранее заданное ма¬лое число (используется для оп¬ре¬-деления первых че¬ты¬рех значений уi методом Эйлера с уточ¬¬не¬ни¬ем); уN - начальное у0. Перед началом работы сле¬ду¬ет определить процедуру-функ¬цию, по ко¬то¬рой вы¬чис¬ля¬ют правую часть диф¬фе¬рен¬ци¬аль¬ного урав¬не¬ния f (х, у). Вы-ходные: массив уi (тип real) зна¬че¬ний уi, най-денных ме¬тдом Адамса.
Для тестирования и проверки процедуры пре¬д¬¬ла¬га¬ет¬ся вычислить при х = 0
Индекс
Элементарные функции
Линейные уравнения
Нелинейные уравнения
Случайные числа