2012-02-25 7 views
3

複雑な値を持つ1次ODEシステムである光学式ブロッキン式を騒がしています。私はscipyがそのようなシステムを解決するかもしれないが、彼らのウェブページはあまりにも少ない情報を提供し、私はそれをほとんど理解できないことを発見した。scipyの複雑なODEシステム

私は8つの連結された一次のODEを持っている、と私は同じよう関数を生成する必要があります

def derv(y): 
    compute the time dervative of elements in y 
    return answers as an array 

その後、complex_ode(derv)

私の質問があります:

  1. 私のyがリストではありませんしかし、マトリックス、私はどのように私は複雑な出力に が合う出力を与えることができますか?
  2. complex_ode()はヤコビアンを必要としますが、私はどのようにして を構築するのか考えていません。
  3. 通常のodeや 時間のような初期条件はどこに置くべきですか?

これはscipyのダウンロードのcomplex_odeのリンクです:私はもう少し学ぶことができるように http://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.complex_ode.html

誰もがより多くのINFOMATIONを私に提供することができます。

答えて

5

私は、少なくとも正しい方向を指すことができると思います。光学式 ブロッホ式は、科学者の コミュニティでよく理解されている問題ですが、私自身ではありませんが、この特定の問題についてはすでにインターネット上の解決策があります。

http://massey.dur.ac.uk/jdp/code.html

しかし、あなたのニーズに対応するために、あなたは私が は大丈夫だとしcomplex_odeを、使用しての話を聞いたが、私はただのscipy.integrate.odeがそのマニュアルに従って としてもうまく動作すると思います:

from scipy import eye 
from scipy.integrate import ode 

y0, t0 = [1.0j, 2.0], 0 

def f(t, y, arg1): 
    return [1j*arg1*y[0] + y[1], -arg1*y[1]**2] 
def jac(t, y, arg1): 
    return [[1j*arg1, 1], [0, -arg1*2*y[1]]] 
r = ode(f, jac).set_integrator('zvode', method='bdf', with_jacobian=True) 
r.set_initial_value(y0, t0).set_f_params(2.0).set_jac_params(2.0) 
t1 = 10 
dt = 1 
while r.successful() and r.t < t1: 
    r.integrate(r.t+dt) 
    print r.t, r.y 

また、より確立古く、より良い 文書化機能の付加的な利点を有します。私はあなたがODEを8つ結合していないことに驚いていますが、私は よりもよく理解しています。 はの形式でなければなりません。これはdef derv()ですが、 ですあなたの関数が少なくとものような2つのパラメータ を取ることを確認する必要があります。 yが行列の場合は問題ありません。 num_rows*num_cols = 8として

Y = numpy.reshape(y,(num_rows,num_cols)); 

限り、ODEのあなたの数は、あなたが問題ないはずです。ただ、そのような derv(t,y)機能でそれを「再構築」。その後、 あなたの計算に行列を使用します。あなたがすべて完了したら、ちょうど ベクトルとないような行列を返すようにしてください:

out = numpy.reshape(Y,(8,1)); 

ヤコビアンは必須ではありませんが、それはおそらく計算がはるかに迅速 を続行することができます。これを計算する方法がわからない場合は、 wikipediaまたはcalculusテキストブックを参照してください。かなり単純ですが、時間がかかることがあります。

これまで複雑なものであれ、実数であれ、 のものは何かを知っているはずです。理由の中で の値を選択する限り、それはあまり重要ではありません。

+0

本当にありがとうございました。素晴らしい答えですが、かなりの時間がかかります。あなたが提供するリンクは、私が探しているものだけで完璧です。はい、それは9時です。:)今日は時間がありました。もしどこかに苦しんでいたら、私は戻ってもらえますか?再度、感謝します。 – user1233157

関連する問題