C言語でルンゲクッタ法(Runge Kutta Method)により常微分方程式の解を求めるプログラムについてソースコード付きで解説します。
[latexpage]
ルンゲクッタ法とは
ルンゲクッタ法は、常微分方程式を近似的に解くアルゴリズムの1つです。アルゴリズムの詳細については以下ページで解説しています。
【ルンゲクッタ法】アルゴリズム・プログラム
ルンゲクッタ法のアルゴリズムとプログラムの実装方法について解説します。
今回は、ルンゲクッタ法をC言語で実装します。
【例1】RC直列回路の過渡応答を計算
今回のサンプルコードでは、RC直列回路の出力電圧v(t)を計算します。
時間tが0~1の区間を100分割し、以下の微分方程式(RC回路の出力電圧v)を順に計算していきます。
\begin{eqnarray}
\frac{dv(t)}{dt}=\frac{e-v(t)}{rc}
\end{eqnarray}
e:入力電圧[V]、v:出力電圧[V]、r:抵抗[Ω]、c:コンデンサ容量[F]
■runge(double x0, double t0, double tn, int n)
x0:初期条件
t0、tn:区間[t0, tn]
n:分割数
■double dxdt( double x)
実行結果
サンプルプログラムの実行結果です。
過渡応答により、時間経過につれて入力電圧10[V]に近づいています。
x(0.010000)=0.951625
x(0.020000)=1.812691
x(0.030000)=2.591816
︙
x(0.980000)=9.999445
x(0.990000)=9.999498
x(1.000000)=9.999546
関連ページ
【C言語入門】数値計算処理
このページでは、C言語で数値計算処理する方法やサンプルプログラム(ソースコード)を入門者向けに解説しています。
404 NOT FOUND | C言語入門速報
404 NOT FOUND | C言語入門速報
コメント