Математическое моделирование и численные методы в решении технических задач

курсовая работа

5.2 Метод Рунге-Кутта

Теоретические сведения

1. Эти методы являются одноступенчатыми: чтобы найти уm+1, нужна информация о предыдущей точке xm, ym.

2. Они согласуются с рядом Тейлора вплоть до членов порядка hp, где степень р различна для различных методов и называется порядковым номером или порядком метода.

3. Они не требуют вычисления производных от f (x, y), а требуют вычисления самой функции.

Текст программы

const

x0=0;

y0=1;

n=5;

Xn=1;

deltax=(Xn-x0)/n;

var x,y:array[1..100] of real;

i,j:integer;

k:integer;

t:text;

k1,k2,k3,k4,deltay:real;

function f(x,y:real):real;

begin

f:=2*y-2*x+1;

{f:=exp(2*x)+x;}

end;

begin

assign(t,H:Phoenix unge-kut.txt);

rewrite(t);

x[1]:=x0; y[1]:=y0;

writeln(x[1]:2:5, ,y[1]:2:5);

for i:=2 to n+1 do begin

x[i]:=x[i-1]+deltax;

k1:=deltax*f(x[i-1],y[i-1]);

k2:=deltax*f(x[i-1]+deltax/2,y[i-1]+k1/2);

k3:=deltax*f(x[i-1]+deltax/2,y[i-1]+k2/2);

k4:=deltax*f(x[i-1]+deltax,y[i-1]+k3);

deltay:=(k1+2*k2+2*k3+k4)/6;

y[i]:=y[i-1]+deltay;

writeln(x[i]:2:5, ,y[i]:2:5);

end;

for i:=1 to n+1 do

writeln(t,x[i]:2:5, ,y[i]:2:5);

close(t);

end.

Результаты

1

0.00000

1.00000

2

0.20000

1.69173

3

0.40000

2.62527

4

0.60000

3.91951

5

0.80000

5.75182

6

1.00000

8.38679

Вывод

Метод Рунге-Кутта достаточно точный и за малое количество итераций приходит к ответу, недостатки в том, что требуются большие и неудобные выражения для вычислений.

Общий вывод

Если при решении дифференциальных уравнений требуется точность вычислений, то лучше использовать метод Рунге-Кутта, если же достаточно приблизительной точности, то можно воспользоваться методом Эйлера. По уровню сложности написания текста задачи одинаковы.

Делись добром ;)