选则 初始条件摆角在0度到1度之间(取10个点),重新绘制单摆角度与角速度的函数关系,。用python写出具体代码
时间: 2024-10-08 11:04:10 浏览: 27
在Python中,我们可以使用matplotlib库来绘制单摆的角度(theta)与角速度(omega)随时间的关系。这里我们将使用scipy库中的odeint函数求解单摆的动力学方程。首先,我们需要安装必要的库,如果还没有安装,可以运行`pip install numpy scipy matplotlib`。
以下是基于Lagrangian动力学的简单示例代码,假设初始条件是在0到1度之间的随机选择10个点:
```python
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
import random
# 单摆的基本常数
g = 9.81 # 重力加速度
m = 1.0 # 摆锤质量
l = 1.0 # 摆长
# 动力学模型,拉格朗日函数
def lagrangian(theta, omega):
return 0.5 * m * l**2 * omega**2 - m * g * l * (1 - np.cos(theta))
# 摆动方程的导数
def single_pendulum(t, y):
theta, omega = y
dtheta_dt = omega
domega_dt = -(g / l) * np.sin(theta)
return [dtheta_dt, domega_dt]
# 初始条件范围
initial_angles = [random.uniform(0, 1) for _ in range(10)]
initial_omegas = [0] * len(initial_angles)
# 时间间隔
t = np.linspace(0, 2*np.pi, 1000) # 这里的时间足够长,让摆来回摆动多次
# 求解并存储数据
results = []
for i, (theta_i, omega_i) in enumerate(zip(initial_angles, initial_omegas)):
sol = odeint(single_pendulum, [theta_i, omega_i], t)
results.append(sol.T)
# 绘制每个摆的状态
fig, axs = plt.subplots(len(results), 2, figsize=(10, 4*len(results)), sharex=True)
axs[0][0].set_title('Angle vs Time')
axs[0][1].set_title('Angular Velocity vs Time')
for ax_angle, ax_vel, (theta_data, vel_data) in zip(axs[:, 0], axs[:, 1], results):
ax_angle.plot(t, theta_data, label=f"Initial Angle {initial_angles[i]:.2f}")
ax_angle.legend()
ax_vel.plot(t, vel_data, label=f"Initial Omega {initial_omegas[i]:.2f}")
ax_vel.legend()
plt.xlabel("Time")
plt.show()
```
这段代码会生成多个子图,每张图代表一个初始摆角,分别展示角度随时间的变化和角速度随时间的变化。
阅读全文