我認爲我們至少可以將您指向正確的方向。光學 bloch方程是一個在科學界很好理解的問題,雖然不是由我:-),所以已經有關於這個特定問題的因特網 的解決方案。
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
您也有一箇舊的更成熟,更好的 記錄功能的好處。我很驚訝你有8個,而不是9再加ODE的,但我敢肯定 你明白這一點比我更好的是,你是正確的,你的函數 的形式應該ydot = f(t,y)
,你叫def derv()
的,但你 需要確保你的功能至少需要兩個參數 ,比如derv(t,y)
。如果你的y
在矩陣中,沒問題!只是「重塑」它 的derv(t,y)
功能,像這樣:
Y = numpy.reshape(y,(num_rows,num_cols));
只要num_rows*num_cols = 8
,你ODE的數量,你應該罰款。然後 在你的計算中使用矩陣。當您完成所有操作,只是一定要返回 像一個載體,而不是一個矩陣:
out = numpy.reshape(Y,(8,1));
不是必需的雅可比,但它可能會允許計算來更快速地進行 。如果你不知道如何計算這一點,你可能想諮詢 維基百科或微積分課本。這非常簡單,但可能很耗時。
至於初始條件,你應該已經知道這些應該 是,無論是複雜或實值。只要你選擇的值是在合理範圍內 ,應該沒有多大關係。
非常感謝烏拉圭回合極大的答案,必須有成本ü相當多的時間。你給的鏈接絕對是完美的,我正在尋找。是的,對,應該是9 :)好吧,有時間到今天,如果我在某個地方遇到困難,我可以回到你身邊嗎?再次感謝。 – user1233157 2012-02-26 11:58:13