python双摆轨迹图
时间: 2023-10-11 15:09:55 浏览: 84
以下是使用Python绘制双摆轨迹图的示例代码:
```python
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
# 定义常数
g = 9.8 # 重力加速度
l1 = 1 # 第一根杆的长度
l2 = 1 # 第二根杆的长度
m1 = 1 # 第一根杆的质量
m2 = 1 # 第二根杆的质量
# 定义微分方程
def double_pendulum(y, t):
theta1, omega1, theta2, omega2 = y
dtheta1 = omega1
domega1 = (-g*(2*m1+m2)*np.sin(theta1)-m2*g*np.sin(theta1-2*theta2)-2*np.sin(theta1-theta2)*m2*(omega2**2*l2+omega1**2*l1*np.cos(theta1-theta2)))/(l1*(2*m1+m2-m2*np.cos(2*theta1-2*theta2)))
dtheta2 = omega2
domega2 = (2*np.sin(theta1-theta2)*(omega1**2*l1*(m1+m2)+g*(m1+m2)*np.cos(theta1)+omega2**2*l2*m2*np.cos(theta1-theta2)))/(l2*(2*m1+m2-m2*np.cos(2*theta1-2*theta2)))
return [dtheta1, domega1, dtheta2, domega2]
# 初始条件
theta1 = np.pi/4
omega1 = 0
theta2 = np.pi/2
omega2 = 0
y0 = [theta1, omega1, theta2, omega2]
# 时间范围和时间步长
t = np.linspace(0, 10, 1000)
# 解微分方程
sol = odeint(double_pendulum, y0, t)
# 计算坐标
x1 = l1*np.sin(sol[:, 0])
y1 = -l1*np.cos(sol[:, 0])
x2 = x1 + l2*np.sin(sol[:, 2])
y2 = y1 - l2*np.cos(sol[:, 2])
# 绘制轨迹图
plt.plot(x1, y1, 'b-', label='pendulum 1')
plt.plot(x2, y2, 'r-', label='pendulum 2')
plt.legend(loc='upper right')
plt.title('Double Pendulum Trajectory')
plt.xlabel('x')
plt.ylabel('y')
plt.show()
```
这段代码使用了Scipy库的odeint函数来解双摆的微分方程,然后绘制了两根杆的轨迹图。你可以根据需要修改初始条件和时间范围来生成不同的轨迹图。
阅读全文