给出不同初始值单摆运动角度和速度的函数图,用python写出具体代码
时间: 2024-10-08 18:04:43 浏览: 23
vpython单摆模拟运动
为了创建一个模拟单摆运动的函数,并绘制出不同初始角度和速度下的角度随时间变化的图像,我们可以使用Python的matplotlib库和scipy库。这里是一个基本的例子,我们将使用简单正弦模型来近似单摆运动,而不是精确物理方程,因为这需要数值积分:
```python
import numpy as np
import matplotlib.pyplot as plt
# 定义单摆的简单正弦模型
def simple_pendulum(angle, velocity, g=9.81, L=1, t_max=10, dt=0.01):
def angle_func(t):
return angle * np.cos(g * L * t / 2) + velocity * (g * L * np.sin(g * L * t / 2)) / (2 * np.pi)
time = np.arange(0, t_max, dt)
angles = angle_func(time)
return time, angles
# 创建几个示例初始条件
initial_angles = [0, np.pi/4, np.pi/2] # 不同初始角度
initial_velocities = [0, 0.5, 1] # 不同初始速度
# 计算并保存所有组合的运动结果
data = []
for angle in initial_angles:
for vel in initial_velocities:
t, a = simple_pendulum(angle, vel)
data.append((t, a))
# 可视化
fig, axs = plt.subplots(len(initial_angles), len(initial_velocities), figsize=(12, 6), sharex=True, sharey=True)
for i, row in enumerate(axs):
for j, ax in enumerate(row):
t, angles = data[i * len(initial_velocities) + j]
ax.plot(t, angles, label=f"Angle: {angle*180/np.pi:.1f}°, Velocity: {vel:.1f}")
ax.set_title(f"Initial Angle: {angle*180/np.pi:.1f}°, Initial Velocity: {vel:.1f}")
ax.legend()
ax.grid(True)
plt.xlabel("Time (s)")
plt.ylabel("Angle (radians)")
plt.tight_layout()
plt.show()
阅读全文