時系列 a(t) と g(t) 及び定数 C が与えられたとき、以下の常微分方程式を r(t) について解きたいと思っています。


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) はそれぞれ数万点の離散サンプルで、そのまま解くと結構時間がかかるのでこれを出来るだけ高速に解きたいと思っています。

回答の条件
  • 1人2回まで
  • 登録:2008/07/23 16:48:37
  • 終了:2008/07/30 16:50:02

ベストアンサー

id:LaLaLa No.1

LaLaLa回答回数4ベストアンサー獲得回数32008/07/24 01:59:30

ポイント60pt

定数変化法で解けるようです。

まず、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)] のように、積の形にばらして行った方が速いと思います。

id:satehasateha

早速のご回答ありがとうございました。助かります。

> 定数変化法で解けるようです。

言われてみると確かにそんな解法を習った気がします。使わないと忘れるものですね・・・。

> r(t) = r(0) exp[-G(t)] + int_0^t (a(u)/C) exp[G(u)-G(t)] du

なるほど今度は数値積分をする必要が出てくるわけですね。でも微分の形よりはこちらの方が最適化しやすそうです。

2008/07/24 15:53:39
  • id:ita
    あ、計算間違いしました。1は開けないで下さい。

    方程式をフーリエ変換したんですけど、交差項が出るんで簡単には解けなかった。
    出ないと勘違いしました。
  • id:ita
    形式的にd/dtをDとおくと、D r=(a-g r)/C
    つまり(C*D+g(t))r(t)=a(t)
    C*D+g(t)は関数r(t)を別の関数に変換する線形変換とみなせるので、
    その逆変換が分かれば r = (C*D+g)^{-1} a と解けます。
    でもこの変換がフーリエ変換でも対角化できない^^;

    あと、g(t)を不定積分したものをG(t)とおくと、
    (C*D+g) exp(-G(t)/C)=0となるんで(a=0の時はこれが解)、線形変換に0固有値があることになり
    逆変換の存在が怪しいです。
  • id:LaLaLa
    すみません。積の形にばらして行った方が速いのは積分(**)じゃなくて、最後の式の積分のことでした。
  • id:satehasateha
    itaさん:
    > あ、計算間違いしました。1は開けないで下さい。

    せっかく答えていただいたのに残念な気もしますが、それではitaさんのご回答は開けないでおきます。

    でもどういう筋道で考えることが出来るのかを書いていただいて、とても参考になります。
    また次回がありましたらよろしくお願いします。
  • id:satehasateha
    LaLaLaさん:
    > すみません。積の形にばらして行った方が速いのは積分(**)じゃなくて、最後の式の積分のことでした。

    了解です。最適化のことまで考えていただいて本当に助かります。

この質問への反応(ブックマークコメント)

トラックバック

  • JGeek Log - 線形演算子 2008-07-23 22:58:01
    線形演算子 http://q.hatena.ne.jp/1216799315 とかって解析的に書けましたっけ?
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません