请帮助我理解为什么此代码不起作用。我知道有一些非常愚蠢的错误。这应该是用于求解洛伦兹方程组的四阶Runge kutta算法的实现。我不能使用任何函数,因为它是一个赋值。错误是:
警告(来自警告模块):文件 “/Users/giuseppenegro/Desktop/loretnz.py”,第21行fy = x * ro-y-x * z 运行时警告:在double_scalars中遇到溢出
警告(来自警告模块):文件 “/Users/giuseppenegro/Desktop/loretnz.py”,第22行fz = x * y-beta * z 运行时警告:在double_scalars中遇到溢出
警告(来自警告模块):文件 “/Users/giuseppenegro/Desktop/loretnz.py”,第22行fz = x * y-beta * z RuntimeWarning:double_scalars中遇到无效值
警告(来自警告模块):文件 “/Users/giuseppenegro/Desktop/loretnz.py”,第32行 r + =(k1 + 2 * k2 + 2 * k3 + k4)/ 6运行时警告:遇到无效值 添加
from numpy import array,arange,zeros
from pylab import plot,xlim,show
ro=28
beta=8/3
sigma=10
a=0
b=50
r=array([0.0,1.0,0.0],float)
N=10
h=(b-a)/N
tpoints=arange(a,b,h)
xpoints=[]
ypoints=[]
zpoints=[]
def f(r,t):
x=r[0]
y=r[1]
z=r[2]
fx =sigma*(y-x)
fy =x*ro-y-x*z
fz =x*y-beta*z
return array([fx,fy,fz],float)
for t in tpoints:
xpoints.append(r[0])
ypoints.append(r[1])
zpoints.append(r[2])
k1=h*f(r,t)
k2=h*f(r+0.5*k1,0.5*h+t)
k3=h*f(r+0.5*k2+0.5,0.5*h+t)
k4=h*f(r+k3,t+h)
r+=(k1+2*k2+2*k3+k4)/6
答案 0 :(得分:2)
Runge-Kutta方法需要逐步推进,5
不是一小步。尝试将N设置为1000.0
(小数点是为了确保(b-a)/N != 0
)。