Python scipy中的复杂ODE系统

Python scipy中的复杂ODE系统,python,scipy,ode,Python,Scipy,Ode,我在求解光学布洛赫方程时遇到了困难,这是一个具有复数值的一阶常微分方程系统。我发现scipy可以解决这样的系统,但他们的网页提供的信息太少,我几乎无法理解 我有8个耦合的一阶常微分方程,我应该生成如下函数: def derv(y): compute the time dervative of elements in y return answers as an array 然后执行复杂代码(derv) 我的问题是: 我的y不是一个列表,而是一个矩阵,我怎样才能给出正确的输出 适

我在求解光学布洛赫方程时遇到了困难,这是一个具有复数值的一阶常微分方程系统。我发现scipy可以解决这样的系统,但他们的网页提供的信息太少,我几乎无法理解

我有8个耦合的一阶常微分方程,我应该生成如下函数:

def derv(y):
    compute the time dervative of elements in y
    return answers as an array
然后执行复杂代码(derv)

我的问题是:

  • 我的y不是一个列表,而是一个矩阵,我怎样才能给出正确的输出 适合复杂的_ode()
  • complex_ode()
    需要一个雅可比矩阵,我不知道如何开始构造雅可比矩阵 它应该是什么类型的
  • 我应该把初始条件放在哪里,像在普通的ode和 时间和空间
  • 这是scipy的复杂代码链接:


    谁能给我提供更多的信息,让我能学到更多。

    我想我们至少可以为你指出正确的方向。光学 布洛赫方程是科学界很好理解的一个问题 社区,虽然不是由我:-),所以在互联网上已经有了解决方案 这是一个特殊的问题

    然而,为了满足您的需求,您提到了使用复杂的代码,我想 很好,但我认为简单的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
    
    只要
    num_rows*num_cols=8
    ,您的ODE数量就应该可以了。然后 在计算中使用矩阵。当你做完了,一定要回来 向量而非矩阵,如:

    out = numpy.reshape(Y,(8,1));
    
    不需要雅可比矩阵,但它可能允许继续计算 更快。如果您不知道如何计算,您可能需要咨询 维基百科或微积分课本。这很简单,但可能很耗时

    至于初始条件,您可能已经知道它们应该是什么 无论是复杂的还是真实的价值。只要您选择的值是
    在合理范围内,这应该没什么关系。

    非常感谢你的回答,肯定花了你很多时间。你给的链接是绝对完美的正是我所寻找的。是的,你是对的,应该是9:)好的,今天还有时间,如果我在什么地方遇到麻烦,我可以回到你身边吗?再次感谢。
    out = numpy.reshape(Y,(8,1));