首页 > 解决方案 > 特定点python上的微分方程的解

问题描述

我有一个微分方程:

from scipy.integrate import odeint
import matplotlib.pyplot as plt

# function that returns dy/dt
def model(y,t):
   k = 0.3
   dydt = -k * y
   return dydt

# initial condition
y0 = 5

# time points
t = np.linspace(0,10)
t1=2
# solve ODE
y = odeint(model,y0,t)

我想评估这个微分方程在两个不同点上的解。例如,我想要 y(t=2) 和 y(t=3)。

我可以通过以下方式解决问题:

假设您需要 y(2)。然后你,定义

t = np.linspace(0,2)

然后打印

print y[-1]

为了得到y(2)的值。但是我认为这个过程很慢,因为我需要再次做同样的事情来计算 y(3),如果我想要另一个点,我需要再次做同样的事情。那么有一些更快的方法可以做到这一点吗?

标签: pythonpython-2.7scipyodedifferential-equations

解决方案


这不只是:

y = odeint(model, y0, [0, 2, 3])[1:]

第三个参数只指定t你想要返回的值。

作为打印结果的示例,我们只需遵循上述内容:

print(f'y(2) = {y[0,0]}')
print(f'y(3) = {y[1,0]}')

这给了我:

y(2) = 2.7440582441900494
y(3) = 2.032848408317066

这似乎与任何解决方案相同:

5 * np.exp(-0.3 * np.array([2,3]))

推荐阅读