Runge-Kutta fourth order (rk4)
14 次查看(过去 30 天)
显示 更早的评论
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.
0 个评论
采纳的回答
Jan
2011-4-15
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 个评论
Matt Tearle
2011-4-15
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... :)
更多回答(1 个)
Meysam Mahooti
2021-5-5
https://www.mathworks.com/matlabcentral/fileexchange/61130-runge-kutta-fehlberg-rkf78?s_tid=srchtitle
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Function Creation 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!