【问题标题】:Solve complex matrix differential equation with Odeint用 Odeint 求解复矩阵微分方程
【发布时间】:2018-02-08 15:48:05
【问题描述】:

我要解一个矩阵微分方程,like this one

import numpy as np
from scipy.integrate import odeint


def deriv(A, t, Ab):
    return np.dot(Ab, A)


Ab = np.array([[-0.25,    0,    0],
               [ 0.25, -0.2,    0],
               [    0,  0.2, -0.1]])

time = np.linspace(0, 25, 101)
A0 = np.array([10, 20, 30])

MA = odeint(deriv, A0, time, args=(Ab,))

但是,这不适用于具有复杂矩阵元素的情况。我正在寻找类似于scipy.integrate.complex_ode 的东西,但寻找的是odeint。如果这是不可能的,我应该使用什么其他库来执行集成?感谢您的帮助!

【问题讨论】:

  • 几个相关问题:stackoverflow.com/questions/26742818/…stackoverflow.com/questions/26580854/…stackoverflow.com/questions/19910189/…(还有更多)。在这些问题中,我建议使用我编写的名为 odeintw 的包装器。
  • @WarrenWeckesser 这种方法需要将矩阵写成函数,对吧?我的问题是我有 150x150 矩阵并且将它们写成 python 函数太耗时了。计算雅可比也需要大量时间。有没有一种方法可以使用类似于我在我提到的那个问题中提出的包装器?即喜欢MA = odeint(deriv, A0, time, args=(Ab,))谢谢
  • “这种方法需要将矩阵写成一个函数,对吗?” 不,做你已经在做的事情,但是在数组Ab 中有复数系数。然后还要让A0 复杂,odeintw 应该可以正常工作。
  • “计算雅可比也需要很多时间。”您不必提供雅可比函数。
  • @WarrenWeckesser 谢谢,起初我没有让 A0 变得复杂。这解决了问题。

标签: python scipy ode


【解决方案1】:

odeintw odeint 的包装器必须以与问题相同的方式使用。但是初始值A0必须是复值向量。

【讨论】:

  • 其实Ab 不一定要复杂。我只是在我对这个问题的评论中建议,因为你说你的实际数组会很复杂。 必须是复杂的初始条件A0。这就是odeintw 知道您正在使用复杂变量的方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-28
  • 2021-04-22
  • 2020-05-14
  • 2012-02-28
  • 2021-04-23
  • 2019-09-17
  • 2015-12-13
相关资源
最近更新 更多