【发布时间】:2020-04-17 03:02:25
【问题描述】:
以下代码给出错误:Cannot cast array data from dtype('complex128') to dtype('float64') based on the rule 'safe'
import numpy as np
from numpy.fft import fft
from scipy.integrate import odeint
t = np.linspace(0,9,10)
def func(y, t):
k = 0
dydt = fft(y)
return dydt
y0 = 0
y = odeint(func, y0, t)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-3-4885da912033> in <module>
10
11 y0 = 0
---> 12 y = odeint(func, y0, t)
~\AppData\Local\Continuum\anaconda3\envs\udacityDL\lib\site-packages\scipy\integrate\odepack.py in odeint(func, y0, t, args, Dfun, col_deriv, full_output, ml, mu, rtol, atol, tcrit, h0, hmax, hmin, ixpr, mxstep, mxhnil, mxordn, mxords, printmessg, tfirst)
243 full_output, rtol, atol, tcrit, h0, hmax, hmin,
244 ixpr, mxstep, mxhnil, mxordn, mxords,
--> 245 int(bool(tfirst)))
246 if output[-1] < 0:
247 warning_msg = _msgs[output[-1]] + " Run with full_output = 1 to get quantitative information."
TypeError: Cannot cast array data from dtype('complex128') to dtype('float64') according to the rule 'safe'
但是,如果我从 func 返回实值(而不是复数),例如:
def func(y, t):
k = 0
dydt = fft(y)
return np.abs(dydt)
然后odeint 工作没有任何错误。
谁能帮我确定/解决这个问题的根源吗?
提前致谢!
【问题讨论】:
-
最后,这个问题与*.com/questions/29803342/… 中的薛定谔偏微分方程大致相同,只是这里没有使用 RK4,而是使用了 scipy 求解器。两种变体中的导数函数保持不变,人们可能会考虑使运算符拆分变体 (
vhat) 更加局部,以避免在减少大量模2*pi时出现相位误差。
标签: python scipy differential-equations odeint ode45