20
Окт

Программы на Pascal (Паскаль): метод Адамса 4-го порядка и метод Эйлера

Категория: Просто Я

Всем привет!

Программы на Pascal (Паскаль): метод Адамса 4-го порядка и метод Эйлера

Я писал о себе, что учусь на системного администратора и, соответственно, в универе нам часто задают программировать различные задачи. В основном пишу программы на языке Паскаль (Pascal) при помощи PascalABC. На данный момент у меня скопилось куча различных программ, которые нам задавали на лабах. Думаю, не пропадать же добру зря, поэтому решил некоторыми из них с вами поделиться.

Программы для решения задачи Коши на Pascal:

Метод Адамса-Башфорта 4-го порядка, задача на Паскале (Pascal)

Вот мой пример: F(x)=(1/(x+16.7)) +x+3, интервал от 1.5 до 5, шаг h=0.05 и начальные условия x[0]=1.5 и y[0]=1.4.

USES CRT;
VAR a,b,h,k1,k2,k3,k4: real;
    i,k:integer;
    t:text;
    y: array [0..100] of real;
    x: array [0..100] of real;
function f(x1:real):real;
begin
f:=(1/(x1+16.7))+x1+3; //F(x)=1/(x+16.7) + x + 3
end;

BEGIN
clrscr;
assign(t,'1.txt'); //результат будет записываться в 1.txt
h:=0.05; //шаг
x[0]:=1.5; //начало интервала и нач. условие х
b:=5; //конец интервала
y[0]:=1.4; //нач. условие y
rewrite(t);
for k:=0 to 3 do begin
k1:=h*f(x[k]);
k2:=h*f(x[k]+h/2);
k3:=h*f(x[k]+h/2);
k4:=h*f(x[k]+h);
y[k+1]:=y[k]+(k1+2*k2+2*k3+k4)/6; // метод Рунге-Кутта
x[k+1]:=x[k]+h;
writeln(x[k]:4:2,' ',y[k]:4:4);
writeln(t,x[k]:4:1,' ',y[k]:4:4);
end;
for k:=4 to 100 do begin
if (x[k]>=(b+h/2)) then break;
y[k+1]:=y[k]+(h/24)*(55*f(x[k])-59*f(x[k-1])+37*f(x[k-2])-9*f(x[k-3]));
writeln(x[k]:4:2,' ',y[k]:4:4);
writeln(t,x[k]:4:1,' ',y[k]:4:4);
x[k+1]:=x[k]+h;
end;
close(t);
END.

Метод Эйлера, задача на Паскале (Pascal)

USES CRT;
VAR a,b,h: real;
    i,j:integer;
    t:text;
    y: array [0..100] of real;
    x: array [0..100] of real;
function f(x1:real):real;
begin
f:=(1/(x1+16.7))+x1+3;
end;

BEGIN
clrscr;
assign(t,'2.txt'); //результат будет записываться в 2.txt
h:=0.05;
x[0]:=1.5;
b:=5;
y[0]:=1.4;
i:=0;
rewrite(t);
while (x[i]<(b+h/2)) do begin
y[i+1]:=y[i]+h*f(x[i]);
writeln(y[i]:5:5,' pri x=',x[i]);
writeln(t,x[i]:4:1,' ',y[i]:4:4);
i:=i+1;
x[i]:=x[i-1]+h;
end;
close(t);
readkey;
END.

Количество точек зависит от того, какой вы укажете шаг h: чем он меньше, тем больше точек.

Полученный результат я сохранял в txt-файл, чтобы потом построить графики в Маткаде (MathCAD) для проверки: если графики совпадают - все верно. Я проверял - у меня совпадают.

Мой паблик в Вконтакте :)

Комментарии к записи Программы на Pascal (Паскаль): метод ...