y'=f(x,y), x0 ≦ x ≦ xN
y(x0)=y0
の数値解法を考える. 分点 x0 < x1 < x2
< ... <xN-1< xN をとり,分点 xkで
の値を yk とし,簡単のため分点は等間隔 h
であるとする.ここでは,オイラー法とルンゲ・クッタ法を取り上げる.
k2=h f(xk+ h/2,yk+ k1/2)
yk+1=yk+ k2+ O(h3)
(例題P5-1)
下のプログラムは2次のルンゲークッタ法で y'=y の初期値問題を解くプログラムです。作成して実行してみましょう。
このプログラムでは、結果は画面に出力されます。出力結果を(リダイレクト >
などを使って)ファイルに保存して,gnuplot で確認しましょう.
inp5 の中身 (前回のと同じ)
xの初期値、yの初期値、刻み幅、繰り返し
1 1 0.1 20 |
% gcc pex5-1.c -o pex5-1 -lm
%./pex5-1 <inp5 >out5
% less out5 <-- 中身の確認
% gnuplot <-- gnuplot で描画
gnuplot> plot "out.d" <-- 前回の計算結果(オイラー法)をプロット
gnuplot> replot "out5" <-- 今回の計算結果
(ルンゲ-クッタ法)をプロット
gnuplot> replot "out5" us 1:3 w l <--
解析解をプロット
出力結果をファイルに保存して,gnuplot で確認しましょう.
(課題P5-1)
上のプログラムについて、相対誤差=|(計算値ー解析解)/解析解|を計算して、結果と同時に出力するようプログラムを変更しなさい。
きざみ幅を変えて,収束性を調べなさい。 オイラー法の結果と比較分析しなさい。
(課題P5-2)
空気中での物体に働く抵抗は速度の2乗に比例するという. 質量を m とすると、鉛直方向速度 v についての運動方程式は
(課題P5-3)
抵抗 R(Ω),コイル L(H),電源E が直列につながったRC回路を考える.ある時刻 t での電流 I(t)は
で表される.t=0 で電源のスイッチをいれて電圧を E(t)=Vsin(t) (t≧0) とした時の電流を計算する2次の
Runge-Kutta のプログラ厶を作成しなさい.きざみ幅を変えて,収束性をしらべよ.
(余裕のある人へ)
(課題P5-4)
上のルンゲ−クッタ法の公式の局所誤差が3次であることを示せ.