用python求解复系数ODE

用python求解复系数ODE,python,Python,我有一个复系数的耦合常微分方程组。我已经知道了如何用数值方法求解一个具有实值系数的系统,例如 u0' = u1 u1' = u0 为此,我使用scipy.integrate.odeint类,如下所示 def vectorfield(w,t): u0,u1 = w #create f = [x1',y1',...] f = [u1, u0] return f wsol = odeint(vectorfield, w0, t) 其中,w0是w的初始值,例如

我有一个复系数的耦合常微分方程组。我已经知道了如何用数值方法求解一个具有实值系数的系统,例如

u0' = u1

u1' = u0
为此,我使用scipy.integrate.odeint类,如下所示

def vectorfield(w,t):
    u0,u1 = w

    #create f = [x1',y1',...]

    f = [u1, u0]
    return f

wsol = odeint(vectorfield, w0, t)
其中,
w0
是w的初始值,例如:
w0=[1,1]

然而现在我需要解一个具有复杂系数的系统,比如

u0' = i*u1
u1' = i*u0
然而,当我尝试使用与实值系数相同的方法时,结果中没有任何复数,只有每个时间步的实值答案如何更改上述代码以考虑复系数?

提前谢谢

编辑,以下是我的全部代码作为示例:

#coupled differential equations
from scipy.integrate import odeint
from scipy.integrate import ode
import numpy as np
import matplotlib.pyplot as plt
import math
from scipy import eye



# Setting initital conditions


u_initial = [1,1]


def vectorfield(w,t):

    u0,u1 = w


    #create f = [x1',y1',...]

    f = [1j*u1*u1.conjugate()+u0,1j*u0*u0.conjugate()+u1]
    return f

abserr = 1.0e-8
relerr = 1.0e-6

stoptime = 10
numpoints = 300

t = [stoptime * float(i) / (numpoints - 1) for i in range(numpoints)]


w0 = u_initial #set initial conditions

wsol = odeint(vectorfield, w0, t,
          atol=abserr, rtol=relerr)

请制作一个完整的MWE…并且您必须指定您想要使用或想要避免的python模块。您使用的是scipy,但三是用于解决ODE/PDE的fypi。@user69453,什么是MWE?而且fypi似乎是用于PDE的。目前我只对ODE感兴趣。复杂的系数不一定意味着复杂的解决方案。我可以复制并粘贴一个示例,只需查看您的问题,而不必猜测代码的一半;)请制作一个完整的MWE…并且您必须指定您想要使用或想要避免的python模块。您使用的是scipy,但三是用于解决ODE/PDE的fypi。@user69453,什么是MWE?而且fypi似乎是用于PDE的。目前我只对ODE感兴趣。复杂的系数不一定意味着复杂的解决方案。我可以复制并粘贴一个示例,只需查看您的问题,而不必猜测代码的一半;)