gpt4 book ai didi

math - 龙格-库塔。求解不易分离的初值问题

转载 作者:行者123 更新时间:2023-12-01 04:50:21 24 4
gpt4 key购买 nike

我们应该编写一个程序,使用四阶龙格库塔数值求解以下初值问题。该算法不是问题,我可以在完成后发布我的解决方案。

问题是,将它干净地分离成我可以放入 Runge-Kutta 的东西。

e^(-x') = x' −x + exp(−t^3)
x(t=0) = 1

知道这叫做什么类型的 ODE 吗?或解决这个问题的方法?与数学相比,我对 CS 技能和编程数值方法更有信心...因此对这个问题的任何见解都会有所帮助。

更新:如果有人对解决方案感兴趣,请在下面查看代码。我认为这是一个有趣的问题。

import numpy as np
import matplotlib.pyplot as plt

def Newton(fn, dfn, xp_guess, x, t, tolerance):
iterations = 0
value = 100.
max_iter = 100
xp = xp_guess
value = fn(t, x, xp)
while (abs(value) > tolerance and iterations < max_iter):
xp = xp - (value / dfn(t,x,xp))
value = fn(t,x,xp)
iterations += 1
root = xp
return root

tolerance = 0.00001
x_init = 1.
tmin = 0.0
tmax = 4.0
t = tmin
n = 1
y = 0.0
xp_init = 0.5

def fn(t,x,xp):
'''
0 = x' - x + e^(-t^3) - e^(-x')
'''
return (xp - x + np.e**(-t**3.) - np.e**(-xp))

def dfn(t,x,xp):
return 1 + np.e**(-xp)

i = 0
h = 0.0001
tarr = np.arange(tmin, tmax, h)
y = np.zeros((len(tarr)))
x = x_init
xp = xp_init
for t in tarr:
# RK4 with values coming from Newton's method
y[i] = x
f1 = Newton(fn, dfn, xp, x, t, tolerance)
K1 = h * f1
f2 = Newton(fn, dfn, f1, x+0.5*K1, t+0.5*h, tolerance)
K2 = h * f2
f3 = Newton(fn, dfn, f2, x+0.5*K2, t+0.5*h, tolerance)
K3 = h * f3
f4 = Newton(fn, dfn, f3, x+K3, t+h, tolerance)
K4 = h * f4
x = x + (K1+2.*K2+2.*K3+K4)/6.
xp = f4
i += 1

fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.plot(tarr, y)
plt.show()

最佳答案

对于 Runge-Kutta,您只需要一个数值解,而不是解析解。

也就是说,您需要能够编写一段接受 (x, t) 并返回 y 的代码,这样 exp(- y) == y - x + exp(-t**3) 到舍入误差范围内。该代码可以执行某种迭代近似算法,Runge-Kutta 会非常高兴。

这有帮助吗?

关于math - 龙格-库塔。求解不易分离的初值问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5520699/

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