用python绘制倒立摆动画的代码
时间: 2023-11-12 18:58:17 浏览: 105
以下是用Python绘制倒立摆动画的示例代码:
```python
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
# 定义常量
G = 9.8 # 重力加速度
L = 1.0 # 摆杆长度
M = 1.0 # 摆球质量
# 定义初始状态
theta0 = np.pi / 6 # 摆球的初始角度
omega0 = 0.0 # 摆球的初始角速度
# 定义模型函数
def derivs(state, t):
# 解析状态量
theta, omega = state
# 计算角加速度
alpha = -(G / L) * np.sin(theta)
# 返回状态变化率
return [omega, alpha]
# 定义时间范围和时间步长
t = np.arange(0.0, 10.0, 0.01)
# 使用odeint函数求解微分方程
from scipy.integrate import odeint
state0 = [theta0, omega0]
states = odeint(derivs, state0, t)
# 绘制动画
fig = plt.figure()
ax = fig.add_subplot(111, autoscale_on=False, xlim=(-2, 2), ylim=(-2, 2))
ax.set_aspect('equal')
ax.grid()
line, = ax.plot([], [], 'o-', lw=2)
def init():
line.set_data([], [])
return line,
def animate(i):
x = [0, L*np.sin(states[i,0])]
y = [0, -L*np.cos(states[i,0])]
line.set_data(x, y)
return line,
ani = animation.FuncAnimation(fig, animate, frames=len(t),
interval=25, blit=True, init_func=init)
plt.show()
```
这个程序使用了Scipy库的odeint函数求解倒立摆的微分方程,并使用Matplotlib库的animation模块绘制动画。程序首先定义了一些常量和初始状态,然后定义了一个derivs函数,用于计算状态变化率。程序接着使用odeint函数求解微分方程,得到了摆球的状态随时间的变化。最后,程序使用Matplotlib的animation模块绘制动画,将摆球的运动轨迹动态地展示出来。
阅读全文