使用RK4的二阶ODE

时间:2017-06-21 21:49:49

标签: python computer-science scientific-computing runge-kutta

我需要绘制一个显示2个变量的图形,带有RK4的二阶ODE,到目前为止我已经完成了这个

from numpy import arange
from pylab import plot,xlabel,ylabel,show
Qger = 400
K = 20
T1 = 150
T2 = 60
N = 1000
h = (T2-T1)/N
rpoints = arange(6.0,8.0,h)
xpoints = []
x = 423
def df(s,t):
    dTdt = -Qger*t/(2*K) + 172.8/t
    return dTdt

for r in rpoints:
    xpoints.append(x)
    k1 = h*df(x,r)
    k2 = h*df(x+0.5*k1,r+0.5*h)
    k3 = h*df(x+0.5*k2,r+0.5*h)
    k4 = h*df(x+k3,r+h)
    x += (k1+2*k2+2*k3+k4)/6
pylab.plot(rpoints,xpoints)
pylab.xlabel("Raio")
pylab.ylabel("Temperatura")
pylab.show

但对于一阶ODE而言,这是一个RK4,因为我不知道并整合了 手,但我不能这样做,既不使用scipy,所以任何人都可以向我解释如何集成这个功能或使用RK4与二阶ODE。功能如下。

这是函数,只有T和r是变量,其余的是0

1 个答案:

答案 0 :(得分:0)

你应该能够将上述内容置于“半离散”形式,也就是说dT / dt只是关于r的偏导数。如果您可以找到等于dT / dt的数字或其他近似值,即dT / dt = rf(r,...)的RHS,则可以使用显式RK4。

在这种方法中,您的时间步进法(RK4)仅适用于温度相对于时间的一阶导数。