模拟弹簧Python

时间:2016-04-20 13:04:54

标签: python physics

我需要在Python中为我的一个课程建模一个弹簧,它并没有真正起作用。我是二阶微分方程,我把它翻译成2个一阶微分方程,得到一个系统。 有人可以查看我的代码,并让我知道我该怎么办?对我来说,方程式很好,我只是不知道如何绘制它......

from math import pi
from time import sleep
from turtle import *

k=1
m=1

def main():
    L = 5
    total_time = 0
    vo = 0             #Vitesse angulaire initial (rad/s)
    time_step = 0.05        
    while total_time < 100:
        total_time += time_step
        vo += (-k/m) * L * time_step
        L += vo * time_step
        if draw(L): break
        sleep(time_step)

def init():
    setup()
    mode('logo')
    radians()
    speed(0)
    tracer(False)
    hideturtle()

def draw(L):
    if speed() != 0: return True
    clear()
    pendown()
    setheading(L)
    penup()
    pensize(5)
    pencolor('red')
    dot(L * 10)
    home
    update()

if __name__ == '__main__':
    init()
    main()

1 个答案:

答案 0 :(得分:0)

就我记忆中的物理课程而言,你的方程是好的,但L变量在-5到+5之间变化,而不是在0到+5之间。

dot(radius)功能绘制一个圆圈。半径需要是正的。

只需替换:

dot(L * 10)

by:

dot(51 + L * 10)

(我把&#34; 51&#34;而不是&#34; 50&#34;以确保避免由于浮点数的粗略近似而导致的错误)

一些小提示:当您不了解会发生什么时,请尝试确定变量的当前值。 您可以通过在主函数的循环中添加print("vo:", vo, "L:", L, "total_time:", total_time)来猜测L在-5到+5之间变化。