Python 计算Runge Kutta而非绘图的函数

Python 计算Runge Kutta而非绘图的函数,python,numpy,matplotlib,scipy,Python,Numpy,Matplotlib,Scipy,嗨,我正在编写一个脚本,该脚本将使用龙格库塔方法解决并绘制一个ODE。我想让脚本使用不同的函数,以便以后可以对其进行扩展。如果我在没有函数定义的情况下编写它,它可以正常工作,但是使用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 = []

嗨,我正在编写一个脚本,该脚本将使用龙格库塔方法解决并绘制一个ODE。我想让脚本使用不同的函数,以便以后可以对其进行扩展。如果我在没有函数定义的情况下编写它,它可以正常工作,但是使用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")
从numpy导入*
将matplotlib.pyplot作为plt导入
#H=p^2/2-cosq
#p=dp=-dH/dq
#q=dq=dH/dp
t=0
h=0.5
pfa=[]#创建将保存pf、qf值的数组
qfa=[]
当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数组
附加(qf)
t+=h#增加时间步长
打印(“测试”)
地块(pfa、qfa)
打印(“测试1”)
plt.show()
打印(“tes2t”)

如果您声明了一个函数,您需要在某个时候调用它,例如:

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

if __name__ == '__main__':
    rk(1,2,1)
将函数调用放在
if\uuuuu name\uuuu=='\uuuu main\uuuu'
块中,将确保仅在直接运行脚本时调用函数,而不是从其他脚本导入时调用函数。(如果您感兴趣,请在此介绍更多信息:)

还有一个更好的选择;为避免硬编码fn args(对于意外的命令行输入,您的实际代码应该有一些错误处理):


谢谢,@DSM的编辑。我只是在修理;我试着用你的方法让它绘图,但它是说这里没有定义pf和qf,这是我做的我试着用你的方法让它绘图,但它是说这里没有定义pf和qf,这是我做的@Surfcast23:为什么调用没有参数的
plt.plot
?另外:你觉得把这两行放在
rk
函数中怎么样?@Adam Bernier哦,对不起,输入错误应该是
plt.plot(pf,qf)plt.show()
你没有调用
rk
,但是即使你调用了,你的示例也只会计算一个点,并且图形会出现,但是要空。@Talonmes你能解释一下我怎样才能让它绘图吗?你要求
plot()
画一条线,但只提供一个点。如果你做了类似于
的绘图([p,pf],[q,qf])
它会尝试绘制两点。即使如此,它仍然不会绘制,因为如果
h@talonmies我编辑了代码,但仍然没有绘图Python是一种对空格敏感的语言。必须使用正确且一致的缩进,代码才能正常工作。如果您正在运行的代码与您发布的代码相同,则它包含一个空循环,并且仍然只计算了1分。我已在编辑中更正了空格。现在它会做一些事情,尽管你写的数值方法,我相信,仍然是不正确的。
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)