双球摆背景
双摆是将一根单摆连接在另一个单摆的尾部所构成的系统。双摆同时拥有着简单的构造和复杂的行为。高能量双摆的摆动轨迹表现出对于初始状态的极端敏感。两个初始状态差异极小的双摆在一段时间的运行后表现非常不同,是一种具有混沌性质的简单动力系统。
程序演示
代码
g = 9.8; size = 0.03; L = 0.25; k = 100000; m = 0.1; theta = 30 * pi/180
Fg = m*vector(0,-g,0)
def SpringForce(r,L):
return -k*(mag(r)-L)*r/mag(r)
scene = canvas(width=300, height=300, center=vector(0, -L*0.8, 0), range=1,background=vector(0.5,0.6,0.4))
ceiling = box(length=0.1, height=0.005, width=0.1, opacity = 0.6)
ball1 = sphere(radius = size, color=color.red, make_trail = True)
ball2 = sphere(radius = size, color=color.green, make_trail = True)
rod1 = cylinder(radius=size/10)
rod2 = cylinder(radius=size/10)
ball1.pos = vector(L, 0, 0)
ball2.pos = vector(2*L, 0, 0)
rod1.pos = vector(0, 0, 0)
rod2.pos = vector(L, 0, 0)
ball2.v=vector(0,0,0)
ball1.v=vector(0,0,0)
dt = 0.0001
t = 0.0
while t<2:
rate(1000)
t=t+dt
rod2.pos = ball1.pos
rod1.axis = ball1.pos
rod2.axis = ball2.pos - ball1.pos
F1 = vector(0, -m*g, 0) + SpringForce(rod1.axis,L) - SpringForce(rod2.axis,L)
F2 = vector(0, -m*g, 0) + SpringForce(rod2.axis,L)
ball1.v += F1/m*dt
ball1.pos += ball1.v*dt
ball2.v += F2/m*dt
ball2.pos += ball2.v*dt
评论 (0)