gpt4 book ai didi

python - 洛伦兹系统的龙格库塔常数发散?

转载 作者:行者123 更新时间:2023-12-01 07:57:32 25 4
gpt4 key购买 nike

我正在尝试解决 Lorenz system使用四阶龙格库塔方法,其中

dx/dt=a*(y-x)
dy/dt=x(b-z)-y
dx/dt=x*y-c*z

由于这个系统不明确依赖于时间,因此可能会在迭代中忽略该部分,所以我只是dX=F(x,y,z)

def func(x0):
a=10
b=38.63
c=8/3
fx=a*(x0[1]-x0[0])
fy=x0[0]*(b-x0[2])-x0[1]
fz=x0[0]*x0[1]-c*x0[2]
return np.array([fx,fy,fz])

def kcontants(f,h,x0):
k0=h*f(x0)
k1=h*f(f(x0)+k0/2)
k2=h*f(f(x0)+k1/2)
k3=h*f(f(x0)+k2)
#note returned K is a matrix
return np.array([k0,k1,k2,k3])

x0=np.array([-8,8,27])
h=0.001

t=np.arange(0,50,h)
result=np.zeros([len(t),3])

for time in range(len(t)):
if time==0:
k=kcontants(func,h,x0)
result[time]=func(x0)+(1/6)*(k[0]+2*k[1]+2*k[2]+k[3])
else:
k=kcontants(func,h,result[time-1])
result[time]=result[time-1]+(1/6)*(k[0]+2*k[1]+2*k[2]+k[3])

结果应该是洛伦兹吸引子,但是我的代码在第五次迭代时出现了分歧,这是因为我在 kconstants 中创建的常量确实如此,但是我检查了并且我很确定 runge kutta实现没有错......(至少我认为)

编辑:

找到类似的post ,但无法弄清楚我做错了什么

最佳答案

在计算 k1k2k3 时,您额外调用了 f(x0) 。将函数 kcontants 更改为

def kcontants(f,h,x0):
k0=h*f(x0)
k1=h*f(x0 + k0/2)
k2=h*f(x0 + k1/2)
k3=h*f(x0 + k2)
#note returned K is a matrix
return np.array([k0,k1,k2,k3])

关于python - 洛伦兹系统的龙格库塔常数发散?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55884705/

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