2016-04-20 5 views
1

Мне нужно смоделировать весну в Python для одного из моих занятий в университете, и на самом деле это не работает. У меня есть дифференциальное уравнение второго порядка, и я перевел его в 2-х порядках первого порядка, чтобы иметь систему. Может кто-нибудь посмотреть мой код и дать мне представление о том, что я могу сделать? Для меня эти уравнения хорошо, я просто не знаю, как сделать это ...Моделировать весну Python

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

если это всего лишь чертеж, который вы хотите ... http://stackoverflow.com/questions/35777581/drawing-a-zigzag-spring-in-java/35779131#35779131 –

ответ

0

Ваши уравнения хороши, насколько я помню из моих уроков физико- но переменная L варьируется от От -5 до +5, а не от 0 до +5.

Функция dot(radius) рисует круг. Радиус должен быть положительным.

Просто замените:

dot(L * 10)

по:

dot(51 + L * 10)

(я поставил "51" вместо "50", чтобы быть уверенным, чтобы избежать ошибок из-за дрянной приближении поплавка номера)

Немного подсказки: когда вы не понимаете, что происходит, попробуйте определить текущие значения ваши переменные. Вы могли бы предположить, что L варьируется от -5 до +5, добавив print("vo:", vo, "L:", L, "total_time:", total_time) в цикл основной функции.

Смежные вопросы