python解常微分方程龙格库_求解二阶常微分方程的RungeKutta四阶方法

我试着做一个简谐振子的例子,它将用龙格-库塔四阶法求解。要求解的二阶常微分方程(ODE)和初始条件为:

y’’+y=0

y(0)=0和y'(0)=1/pi

范围在0到1之间,共有100步。我用u作为辅助变量,将我的二阶常微分方程分成两个一阶常微分方程:

y'=u

u'=-y

解析解为正弦y(x)=(1/pi)^2 sin(pi*x)。在

我的Python代码如下:from math import pi

from numpy import arange

from matplotlib.pyplot import plot, show

# y' = u

# u' = -y

def F(y, u, x):

return -y

a = 0

b = 1.0

N =100

h = (b-a)/N

xpoints = arange(a,b,h)

ypoints = []

upoints = []

y = 0.0

u = 1./pi

for x in xpoints:

ypoints.append(y)

upoints.append(u)

m1 = h*u

k1 = h*F(y, u, x) #(x, v, t)

m2 = h*(u + 0.5*k1)

k2 = h*F(y+0.5*m1, u+0.5*k1, x+0.5*h)

m3 = h*(u + 0.5*k2)

k3 = h*F(y+0.5*m2, u+0.5*k2, x+0.5*h)

m4 = h*(u + k3)

k4 = h*F(y+m3, u+k3, x+h)

y += (m1 + 2*m2 + 2*m3 + m4)/6

u += (k1 + 2*k2 + 2*k3 + k4)/6

plot(xpoints, ypoints)

show()

所有代码都按照LutzL的建议进行了更正。请参阅下面的注释。

你可能感兴趣的:(python解常微分方程龙格库)