적어도 올바른 방향으로 안내 할 수 있다고 생각합니다. 광학 블로흐 방정식은 과학적으로는 커뮤니티에서 잘 이해되는 문제입니다. :-) 나름의 문제는 아니지만, 이미이 문제에 대한 인터넷 의 해결책이 있습니다.
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 개가 아닌 9 개를 가지고 놀랐지 만 나는 을 잘 이해하고 있습니다. 예, 정확합니다. 은 형태 여야하는데 def derv()
이라고 부르지 만, 당신은 입니다. 함수가 적어도 두 개의 매개 변수 (derv(t,y)
)을 필요로하는지 확인해야합니다. y
이 매트릭스에있는 경우 문제가 없습니다! 만큼
Y = numpy.reshape(y,(num_rows,num_cols));
을 num_rows*num_cols = 8
로, ODE의의 전화 번호 당신은 괜찮을 것 : 그냥과 같이 에 derv(t,y)
기능을 "바꿀". 그런 다음 행렬을 계산에 사용하십시오. 모두 마쳤 으면 바로 에게 같은 벡터가 아닌 매트릭스 반환해야합니다 : 코비안가 필요하지
out = numpy.reshape(Y,(8,1));
을하지만, 계산이 훨씬 빨리 을 진행할 수 전망이다.이것을 계산하는 방법을 모른다면 위키 백과 또는 미적분 텍스트 북을 참조하십시오. 꽤 간단하지만 시간이 많이 걸릴 수 있습니다.
초기 상태에서 복잡성 여부와 상관없이 의 대상이 무엇인지 이미 알고 있어야합니다. 이유 안에서 인 값을 선택하는 한 큰 문제가 아니어야합니다.
위대한 답변을 주셔서 대단히 감사합니다. 상당히 많은 시간을 들여야합니다. 링크는 내가 원하는 것을 절대적으로 완벽하게 제공합니다. 예, 당신은 어딘가에 문제가 있다면, 그래, 맞아, 9 시야 :) 그래, 오늘은 시간있어, 내가 다시 올 수도 있습니다? 다시 한번 감사드립니다. – user1233157