gpt4 book ai didi

python - 求解二阶 ODES 的 Runge-Kutta 四阶方法

转载 作者:太空宇宙 更新时间:2023-11-03 21:48:01 24 4
gpt4 key购买 nike

我正在尝试做一个简单的谐振子示例,它将通过龙格-库塔四阶方法求解。待解的二阶常微分方程(ODE)及初始条件为:

y'' + y = 0

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

范围在 0 到 1 之间,有 100 级。我使用 u 作为辅助变量,将二阶 ODE 分成两个一阶 ODE:

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 的建议进行了更正。请参阅下面的评论。

代码正在运行,但我的数值解与解析解不匹配。我制作了一个图表,显示下面的两个解决方案。我将我的脚本与互联网上其他一些代码( https://math.stackexchange.com/questions/721076/help-with-using-the-runge-kutta-4th-order-method-on-a-system-of-2-first-order-od )进行了比较,但我看不到该错误。在链接中,有两个代码,一个Matlab代码和一个Fortran代码。即便如此,我也找不到自己的错误。谁能帮我吗?

enter image description here

最佳答案

我的代码是正确的。解析解错误。正确的解析答案是

sin(x)/pi

正如 LutzL 指出的那样。下面,我们可以看到解析解和数值解。限制范围是从 a=0 到 b=6.5。

enter image description here

关于python - 求解二阶 ODES 的 Runge-Kutta 四阶方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52334558/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com