Программы на 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) для проверки: если графики совпадают - все верно. Я проверял - у меня совпадают.