scipy.integrate.odeint
无法处理复杂值。 Warren Weckesser创建了一个包装器odeintw,它将复杂系统转换为真实系统。
在_odeintw.py的第176行,它通过检查初始条件是否复杂来检查是否确实存在复数。但是还有其他方法可能会使方程最终变得复杂。
这给我带来了一些错误,因此我将第176行更改为if False:
,以便它使用复杂版本。
那么 - 这是一个错误还是一个功能?换句话说,我是否可能通过这样做来打破某些事情?
以下是一些示例代码:
from odeintw import odeintw
import numpy
import matplotlib.pyplot as plt
#Solve \dot{y} = cy$ with $y(0)=1$ and c=\sqrt(-1)
def dy_dt(Y, t, c):
y_val = Y[0]
return [y_val*c]
y0 = [1]
c=1j
times = numpy.linspace(0,10,21)
y = odeintw(dy_dt, y0, times, args = (c,))
plt.plot(numpy.real(y), numpy.imag(y))
plt.savefig('odeintw_error.pdf')
这对odeintw
失败,但适用于我建议的更改。