Runge-Kutta fourth order (rk4)

21 visualizaciones (últimos 30 días)
Rebecca
Rebecca el 15 de Abr. de 2011
Respondida: Meysam Mahooti el 5 de Mayo de 2021
When implementing the Runge-Kutta order 4 scheme(rk4) u1,...,un are computed using the algorithm:
for i = 0,1,...,n-1
k1 = f (ti, ui),
k2 = f (ti + h/2, ui + h/2*k1),
k3 = f (ti + h/2, ui + h/2*k2),
k4 = f (ti + h, ui + h*k3),
ui+1 = ui + h/6 (k1 + 2k2 + 2k3 + k4).
Would part of this code be written in matlab as the following:
for i = 1:n
k1 = h * feval ( f, u(:,i) );
k2 = h * feval ( f, u(:,i) + k1/2 );
k3 = h * feval ( f, u(:,i) + k2/2 );
k4 = h * feval ( f, u(:,i) + k3 );
u(:,i+1) = u(:,i) + h*( k1 + 2*k2 + 2*k3 + k4 ) / 6;
end;
I'm not too sure if the "h" in the last line (u(:,i+1)) should be there are not.
Any help would be very much appreciated.

Respuesta aceptada

Jan
Jan el 15 de Abr. de 2011
Simply compare the pseudo code:
k4 = f (ti + h, ui + h*k3)
with your Matlab code:
k4 = h * feval(f, u(:,i) + k3)
to see, that the h is already inlcuded in your k1, k2, k3, k4.
A good idea is a test: Integrate a COS curve and look if the results are as expected.
  4 comentarios
Rebecca
Rebecca el 15 de Abr. de 2011
I am an absolute novice with matlab, since I have only been using it for a few weeks, so not too sure how to integrate a COS function in matlab. :S
Matt Tearle
Matt Tearle el 15 de Abr. de 2011
What was your function f? (That produced the "egg-shaped graph")
But your code looks about right, from inspection. That said, function handles are nicer than feval... :)

Iniciar sesión para comentar.

Más respuestas (1)

Meysam Mahooti
Meysam Mahooti el 5 de Mayo de 2021
https://www.mathworks.com/matlabcentral/fileexchange/61130-runge-kutta-fehlberg-rkf78?s_tid=srchtitle

Categorías

Más información sobre Function Creation en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by