了解odeint结果-与分析解决方案不同

时间:2018-09-12 01:38:29

标签: python scipy ode

几天前,我在与odeint玩耍,并认为有些结果很奇怪。因此,我想运行一些非常简单的工具来测试我的代码(如下所示)。

如果(dy / dt)= -x,对其进行积分应产生(-x ^ 2)/ 2 +C。我得到的图肯定没有显示出来。很明显,我做错了什么,但我无法弄清丢失了什么。有人可以给我指点吗?

代码如下-

import scipy.integrate as scint
import numpy as np
import matplotlib.pyplot as plt

def odefunc(y0, t):
    x = y0
    dxdt = -1*x
    return dxdt

plt.close('all')

t = np.arange(0, 5, 0.02)
y0 = 1

soln = scint.odeint(odefunc, y0, t)

fig1 = plt.figure(1, figsize = (9, 6))
plt.grid(color = 'grey', linestyle = ':', linewidth = 1)
plt.plot(t, soln, marker = 'd', linestyle = 'none', color = 'black')

plt.xlabel('Time')
plt.ylabel('Event')
plt.tight_layout()

这是情节-

Plot of the solution

我对使用python很陌生。这不是功课问题,也不是什么。我在学习python的乐趣比什么都重要。

1 个答案:

答案 0 :(得分:2)

您写了“ If(dy / dt)= -x,对其进行积分应产生(-x ^ 2)/ 2 + C”,但我认为您的意思是“ If(dy / dt)= -t,对其进行积分应该产生(-t ^ 2)/ 2 + C“。那不是您在Python代码中实现的方程式。

您对odefunc的实现,

def odefunc(y0, t):
    x = y0
    dxdt = -1*x
    return dxdt
p对应于微分方程dy / dt = -y。解决方案 该方程为y(t)= y(0)* exp(-t)。 是在图形中绘制的函数。

如果要使用odeint解决dy / dt = -t,则odefunc应该是

def odefunc(y, t):
    return -t