Python在同一块画布叠加画,
本文主要介绍利用Python绘制双摆,绘制双摆的过程主要包括以下步骤:双摆问题、运动过程、公式推导过程。下面有详细介绍,有需要的朋友可以参考一下。
00-1010 1.双摆问题2。运动过程3。公式推导流程
目录
所谓双摆,就是两个钟摆连在一起。
接下来,我要推出公式。考虑到大家可能都有公式恐惧症,喜欢同时看图,我就把公式挪到后面了。
因此,你可以写相应的代码,其方程如下:,只需知道角速度的微分方程。
从而转为代码得到:
#其中lam,mu,G_L1,M是全局变量
def derivs(州,t):
dydx=np.zeros_like(state)
th1,om1,th2,om2=状态
dydx[0]=状态[1]
delta=状态[2] -状态[0]
cDelta,sDelta=np.cos(delta),np.sin(delta)
sTh1,_,sTh2,_=np.sin(状态)
den1=M - mu*cDelta**2
dydx[1]=(mu * om1 * * 2 * s delta * c delta
mu * G_L1 * sTh2 * cDelta
mu * lam * om2**2 * sDelta
- M * G_L1 * sTh1)/den1
dydx[2]=状态[3]
den2=lam * den1
dydx[3]=(-mu * lam * om2 * * 2 * s delta * c delta
M * G_L1 * sTh1 * cDelta
- M * om1**2 * sDelta
- M * G_L1 * sTh2)/den2
返回dydx
接下来根据微分方程的解,就可以进行绘图了。
#这段代码用来设置初始值,调用integrate求解微分方程。
将numpy作为np导入
将scipy.integrate导入为integrate
G=9.8
L2 L1=1.0,1.0
L1=L1
Lam=L2/L1 #杆长比L2/L1
=1.0 #质量比M2/M1
M=1亩
#生成时间
dt=0.01
t=np.arange(0,20,dt)
Th1,th2=120.0,-10.0 #初始角度
1,om2=0.0,0.00 #初始角速度
state=np .弧度([th1,om1,th2,om2])
#微分方程的数值解
y=integrate.odeint(derivs,state,t)
#真实坐标
x1=L1*sin(y[:0])
y1=-L1*cos(y[:0])
x2=L2*sin(y[:2]) x1
y2=-L2*cos(y[:2]) y1
此时得到所有位置的坐标,这样就可以观察到如图所示的双摆的运动轨迹。
绘图代码为:
将matplotlib.pyplot作为plt导入
plt.scatter(x1,y1,marker= . )
plt.scatter(x2,y2,marker= . )
plt.show()
如果把时间设定的长一点,然后在画图的时候改变颜色,就会看到双摆的运动间隔,可见大自然是相当多愁善感的。
其绘图代码为:
plt.plot(x1,y1,marker= . =0.2,线宽=0.2)
plt.plot(x2,y2,marker= . ,alpha=0.2,线宽=2,c=r )
plt.axis(“关”)
plt.show()
当然也可以把它的轨迹用三维的形式画出来。
ax=plt.gca(投影=3d )
ax.plot3D(t,x1,y1,线宽=1)
plt.show()
嗯.嗯,好像我没有什么感觉。
但是,如果把这两个球分别看成两个星球,我们在一个星球上,那么观测到的另一个星球的运动大致如下。毫不奇怪,它是一个圆。毕竟两个圆之间的距离是恒定的。
绘图代码为:
ax=plt.gca(投影=3d )
ax.plot3D(t,x2-x1,y2-y1,线宽=0.5)
plt.show()
如果您更改初始值,图形将如下变化
初值设为:
Th1,th2=0,0 #初始角度
1,om2=120.0,108.00 #初始角速度
1.双摆问题
最后,还是传统技能,绘制一下双摆的运动过程如下:
代码为:
将matplotlib.animation作为动画导入
#以下是绘制过程。
fig=plt.figure(figsize=(12,12))
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)
time_template=time=%.1fs
time_text=ax.text(0.05,0.9,,transform=ax.transAxes)
#初始化图形
定义初始化():
line.set_data([],[])
时间文本设置文本()
返回行,时间_文本
定义动画(i):
thisx=[0,x1[i],x2[i]]
thisy=[0,y1[i],y2[i]]
line.set_data(thisx,thisy)
time _ text . set _ text(time _ template %(I * dt))
返回行,时间_文本
ani=动画。FuncAnimation(fig,animate,range(1,len(y)),
interval=dt*1000,blit=True,init_func=init)
ani.save(dua_1.gif ,writer=imagemagick )
plt.show()
2.运动过程
双摆的动能和势能分别为:
根据拉格朗日方程
则有:
其中,
展开可得则:
关于用Python画双摆的这篇文章到此为止。关于用Python绘制双摆的更多信息,请搜索热门IT软件开发工作室之前的文章或者继续浏览下面的相关文章。希望大家以后多多支持热门IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。