Runge-Kutta fourth order (rk4)

32 ビュー (過去 30 日間)
Rebecca
Rebecca 2011 年 4 月 15 日
回答済み: Meysam Mahooti 2021 年 5 月 5 日
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.

採用された回答

Jan
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 件のコメント
Rebecca
Rebecca 2011 年 4 月 15 日
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 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
Meysam Mahooti 2021 年 5 月 5 日
https://www.mathworks.com/matlabcentral/fileexchange/61130-runge-kutta-fehlberg-rkf78?s_tid=srchtitle

カテゴリ

Help Center および File ExchangeFunction Creation についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by