几天前,我在与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()
这是情节-
我对使用python很陌生。这不是功课问题,也不是什么。我在学习python的乐趣比什么都重要。
答案 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