【发布时间】:2018-04-13 19:09:46
【问题描述】:
我正在尝试绘制角度 θ 和角速度 ω 如何随时间 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 循环手动计算了前几次迭代的值,它似乎表现得应该做,但情节什么也没给我:
我知道它应该得到一个正弦曲线,所以我认为这可能只是我如何尝试生成绘图的问题。
任何帮助将不胜感激。
【问题讨论】:
-
将所有绘图命令移出循环。您正在每次迭代中创建一个新图表。
-
感谢您提供带有可重复示例的完整问题。很少能从新用户那里看到这一点,而且真的很高兴。我马上给你写一个完整的答案。
-
干杯感谢您的帮助,也许它没有在策划任何事情哈哈
标签: python differential-equations pendulum