ValueError:diff 需要至少一维的输入



我研究如何使用odeint求解Python中的微分方程并进行测试,我尝试解决以下常微分方程(以下示例来自 https://apmonitor.com/pdc/index.php/Main/SolveDifferentialEquations(:

# first import the necessary libraries
import numpy as np 
from scipy.integrate import odeint
# function that returns dy/dt
def model(y,t):
k = 0.3
dydt = -k*y
return dydt
#Initial condition
y0 = 5.0
# Time points
t = np.linspace(0,20)
# Solve ODE
def y(t):
return odeint(model,y0,t)

因此,如果我使用 matplotlib 绘制结果,或者更简单地说,print(y(t))给出命令,那么这就可以完美地工作了!但是,如果我尝试计算固定时间值的函数值,例如t1 = t[2]( = 0.8163 (,所以我得到错误

t1 = t[2]
print(y(t1))
ValueError("diff requires input that is at least one dimensional")

为什么我只能计算一个区间t = np.linspace(0,20)y(t)值,而不能计算这个区间内的数字的值?有某种方法可以解决这个问题吗? 谢谢。

odeint函数以数值方式求解微分方程。为此,您需要指定要评估解决方案的点。这些点也会影响解决方案的准确性。通常,您给odeint的分数越多,结果就越好(当求解相同的时间间隔时(。

这意味着,如果您只提供要计算函数的单个时间,odeint就无法知道您想要的精度。相反,您始终需要提供一系列时间(就像您对np.linspace所做的那样(。 然后,odeint在所有这些时间返回解决方案的值。

y(t)是解决方案的值数组,数组中的第三个值对应于t中第三次的解:

t[0]评估的解决方案是y(t)[0] = y0
t[1]评估的解决方案是y(t)[1]
t[2]评估的解决方案是y(t)[2]
...


所以而不是

print(y(t[2]))

你需要使用

print(y(t)[2])

最新更新