dr(t)/dt = 1/C*{ a(t)-g(t)*r(t) }
(つまりコンダクタンスと入力が可変の RC 回路です。)
質問:
(1) これを解析的に解くことはできるでしょうか? 出来るとしたらどういう式になるでしょうか?
つまり r(t) = f( a(t), g(t), C) という形の式が欲しいのです。無理ならなぜ無理かということも合わせて教えていただくとありがたいです。工学系の一般教養として基礎的な解析学は履修したはずですが、ほとんど忘れています。
(2) もし無理なら、 Runge-Kutta 法で数値解を求めるより効率の良い解法はあるでしょうか?
a(t), g(t) はそれぞれ数万点の離散サンプルで、そのまま解くと結構時間がかかるのでこれを出来るだけ高速に解きたいと思っています。
定数変化法で解けるようです。
まず、a(t) = 0 の場合の解が r(t) = r(0) exp[-G(t)] となることに注意します。ここで G(t) は g(t)/C の時刻0からtまでの定積分です。
G(t) = int_0^t g(u)/C du (*)
次に、a(t)がゼロでない一般の場合の解を r(t) = X(t) exp[-G(t)] と仮定します。ここで、X(t) は未知関数でこれから決めます。(定数 r(0) を未知関数で置き換えたので「定数変化法」。)この r(t) の式を常微分方程式に代入すると、 X(t) が満たすべき条件
dX(t)/dt = (a(t)/C) exp[G(t)]
が得られます。初期条件より X(0) = r(0) なので
X(t) = r(0) + int_0^t (a(u)/C) exp[G(u)] du (**)
よって、求める解は次のようになります。
r(t) = r(0) exp[-G(t)] + int_0^t (a(u)/C) exp[G(u)-G(t)] du
時刻0から時刻tまでの効果の足し合わせ(積分)でr(t)が決まる、というイメージの解です。
数値解を得るには、定積分(*)と(**)を台形則などで実行すれば良さそうです。G(u)がおとなしい関数なら、(**)の積分は exp[G(u)] exp[-G(t)] のように、積の形にばらして行った方が速いと思います。
早速のご回答ありがとうございました。助かります。
> 定数変化法で解けるようです。
言われてみると確かにそんな解法を習った気がします。使わないと忘れるものですね・・・。
> r(t) = r(0) exp[-G(t)] + int_0^t (a(u)/C) exp[G(u)-G(t)] du
なるほど今度は数値積分をする必要が出てくるわけですね。でも微分の形よりはこちらの方が最適化しやすそうです。