Функция, которая вычисляет Рунге Кутта не строит - PullRequest
0 голосов
/ 19 февраля 2012

Привет, я работаю над сценарием, который решит и построит ODE, используя метод Runge Kutta.Я хочу, чтобы скрипт использовал разные функции, чтобы я мог расширить его позже.Если я напишу его без определения функции, он будет работать нормально, но с def () он не откроет окно графика и не напечатает результаты.Чем ты!

from numpy import *
import matplotlib.pyplot as plt

#H=p^2/2-cosq
#p=dp=-dH/dq
#q=dq=dH/dp

t = 0
h = 0.5
pfa = []                        #Create arrays that will hold pf,qf values
qfa = []

while t < 10:
    q = 1*t
    p = -sin(q*t)

    p1 = p
    q1 = q
    p2 = p + h/2*q1
    q2 = q + h/2*p1
    p3 = p+ h/2*q2
    q3 = q+ h/2*p2
    p4 = p+ h/2*q3
    q4 = q+ h/2*p4
    pf = (p +(h/6.0)*(p1+2*p2+3*p3+p4))
    qf = (q +(h/6.0)*(q1+2*q2+3*q3+q4))

    pfa.append(pf)                   #append arrays
    qfa.append(qf)
    t += h                           #increase time step                        

print("test")
plt.plot(pfa,qfa)
print("test1")
plt.show()
print("tes2t")

1 Ответ

1 голос
/ 19 февраля 2012

Если у вас объявлена ​​функция, вам нужно будет вызвать ее в какой-то момент, например ::100100

def rk(p,q,h):
    pass # your code here

if __name__ == '__main__':
    rk(1,2,1)

Размещение вызова функции в блоке if __name__ == '__main__' гарантирует, что функция вызывается только при непосредственном запуске сценария, а не при его импорте из другого сценария. (Подробнее об этом здесь, если вам интересно: Что делать, если __name__ == "__main__": do? )

А вот еще лучший вариант; чтобы избежать жесткого кодирования аргументов fn (ваш реальный код должен иметь некоторую обработку ошибок для неожиданного ввода в командной строке):

def rk(p,q,h):
    pass # your code here

if __name__ == '__main__':
    import argparse
    the_parser = argparse.ArgumentParser()
    the_parser.add_argument('integers', type=int, nargs=3)
    args = the_parser.parse_args()
    p,q,h = args.integers
    rk(p,q,h)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...