常微分方程式,初期値が与えられたとき,ルンゲクッタ法で計算することができる.
はxの刻み幅で計算したい値までを繰り返して計算する.n階の微分方程式もn個の1階微分方程式に分けることでルンゲクッタ法で計算できる.
単振動を考えるとき,という式が与えられたとする.この式は
という2式で表せ,初期値が与えら得たとき,
という形で求める.したがって
から計算することができる.
次のようなカオスを表す3つの微分方程式の場合でも同じ.
matlabの場合,ソルバーがあるのでそれを利用する.上のカオスの例を解くには,まず,1階の微分方程式を入力したmファイルを作る.
function dy = chaos(t,y); dy=zeros(3,1); dy(1) = y(2); dy(2) = -y(1)+ y(2)*y(3); dy(3) = 1- y(2)^2;
次に,ソルバーを利用したコードを書く.
options = odeset('RelTol',1e-4,'AbsTol',[1e-4 1e-4 1e-5]); [t,y] = ode45('chaos',[0 100], [-1 -0.01 0.2], options);
参考
- http://www.nuce.nagoya-u.ac.jp/e8/Matsuoka/07OctaveNum/LectureDocPub/07CompAlgo_05_pub.pd
- http://www.mathworks.co.uk/access/helpdesk_ja_JP/help/techdoc/ref/ode113.html
- http://www.mathworks.de/access/helpdesk_archive_ja_JP/r13/help/toolbox/matlab/math_anal/index.html?/access/helpdesk_archive_ja_JP/r13/help/toolbox/matlab/math_anal/diffeq5.html&http://www.google.co.jp/search?hl=ja&lr=&q=%E5%BE%AE%E5%88%86%E6%96%B9%E7%A8%8B%E5%BC%8F%E3%80%8045%E3%80%80ode&aq=f&aqi=&aql=&oq=&gs_rfai=
- http://www.math.meiji.ac.jp/~mk/labo/text/ode/node13.html