我试图绘制角度 θ 和角速度 ω 如何随时间 t 变化,使用梯形规则求解微分方程,但我无法生成实际图。
这是我尝试为没有摩擦阻尼或驱动力的线性摆实现的代码,其中 θ 初始化为 0.2,ω 初始化为 0.0
import matplotlib.pylab as plt
import math
theta = 0.2 #angle
omega = 0.0 #angular velocity
t = 0.0 #time
dt = 0.01
nsteps = 0
k = 0.0 #dampening coefficient
phi = 0.66667 #angular frequency of driving force
A = 0.0 #amplitude of driving force
#2nd order ODE for linear pendulum
def f(theta, omega, t):
return -theta - k*omega + A*math.cos(phi*t)
#trapezoid rule
for nsteps in range(0,1000):
k1a= dt*omega
k1b = dt*f(theta, omega, t)
k2a = dt*(omega + k1b)
k2b = dt*f(theta + k1a, omega + k1b, t + dt)
theta = theta + (k1a + k2a)/2
omega = omega + (k1b + k2b)/2
t = t + dt
nsteps = nsteps + 1
plt.plot(t, theta)
plt.plot(t, omega)
plt.axis([0, 500, -math.pi, math.pi])
plt.title('theta = 0.2, omega = 0.0')
plt.show()
我已经通过 for 循环手动计算了前几次迭代的值,它似乎表现得应该做,但情节只是没有给我任何东西:
我知道它应该得到一个正弦曲线,所以我认为这可能只是我尝试生成情节的一个问题。
任何帮助将非常感激。