【发布时间】:2020-04-27 09:21:21
【问题描述】:
考虑这个简单的一阶微分方程:
其中 k 是一个值为 0.5 的常数, 是一个随时间变化的变量。
我使用以下代码在不同时间输入 y_bar 的值,效果很好。
import numpy as np
from scipy.integrate import odeint
from matplotlib import pyplot as plt
def get_y_bar(t):
if t>=0 and t<=1:
return 0.0
elif t<=2:
return 1.0
elif t<=3:
return 2.0
elif t<=4:
return 3.0
elif t<=5:
return 4.0
else:
return 5.0
def ode(y,t):
k=0.5
y_bar=get_y_bar(t)
dy=k*(y_bar-y)
return dy
y0=0.0
t0=np.linspace(0,10,100)
sol=odeint(ode,y0,t0)
plt.plot(t0,sol)
plt.show()
但是,这种方法只有在我有少量数据并且可以手动使用 if..elif..else 循环输入时才可行。如果在较小的时间步长(例如 t= 0.01、0.025、0.03、...、5.0)中有较大的 y_bar 值,我该怎么办?
我有 CSV 格式的数据并尝试遍历数据但卡住了!有什么简单的方法可以做到这一点吗?
def get_y_bar(t):
data=np.genfromtxt('data.csv',delimiter=',')
time=data[:,0]
y_bar=data[:,1]
for i in range(len(time)):
if t>=time[i] and t<=time[i=1]:
return y_bar[i]
else:
【问题讨论】:
标签: python pandas numpy scipy numerical-methods