如何在Python的odeint中传递一个list asks参数?

2024-09-30 18:32:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python新手,我正在绘制能量与时间的关系图。我想用不同的epsilon值绘制几个图,例如epsl=[0,0.3,0.02,0.05]。有没有一种方法可以将不同的epsilon值列表传递给odeint并绘制它们的图形?下面的代码显示epsl的一个值为0.05。你知道吗

def position(x,t, epsl): dx = np.zeros(2) # E(t) = 1/2mv^2 + 1/2kx^2 # E(t)_bar = x_bar^2 + v_bar^2 ko = 1 omega = 2 k = ko*(1-epsl*np.cos(omega*t)) dx[0] = x[1] dx[1] = -k*x[0] return dx # initial conditions ic=[1,1] # make a list for epsl values epsl = 0.05 #time points t = np.linspace(0, 200, 100000) #solve ODE ksoln = odeint(position, ic, t, args=(epsl,)) # Energy Kenergy=ksoln[:,0]**2+ksoln[:,1]**2 plt.plot(t, Kenergy) plt.xlabel('t') plt.title('Energy') plt.show()

Tags: np绘制barpositionpltkoenergyic
1条回答
网友
1楼 · 发布于 2024-09-30 18:32:50

可以在一个绘图上绘制多条线。尝试以下操作:

def position(x,t, epsl):
    dx = np.zeros(2)
    # E(t) = 1/2mv^2 + 1/2kx^2
    # E(t)_bar = x_bar^2 + v_bar^2
    ko = 1                         
    omega = 2         
    k = ko*(1-epsl*np.cos(omega*t))
    dx[0] = x[1]
    dx[1] = -k*x[0]
    return dx

# initial conditions
ic=[1,1]

# make a list for epsl values
epsls = [0, 0.3, 0.02, 0.05]

#time points
t = np.linspace(0, 200, 100000)

#solve ODE
ksolns = [odeint(position, ic, t, args=(epsl,)) for epsl in epsls]

# Energy
Kenergys = [ksoln[:,0]**2+ksoln[:,1]**2 for kslon in kslons]

[plt.plot(t, Kenergy) for Kenergy in Kenergys]
plt.xlabel('t')
plt.title('Energy')
plt.show()

相关问题 更多 >