python - 洛伦兹方程的运行时警告

标签 python python-3.x runtime-error ode lorenz-system

我正在尝试用 python 计算洛伦兹方程(我正在遵循 Mark Newman 的练习 8.3 - 计算物理(2012 年,CreateSpace 独立出版平台)) 我已经得到了图形,一切看起来“正确”。这可能是一个数学问题,而不是一个真正的编程问题,但我在这里发帖是为了确保这一点。 首先,这是我的代码:

from numpy import arange,array
import pylab

def f(v,t):
    s=10 
    r=28
    b=8/3
    x= v[0] 
    y= v[1]
    z= v[2]
    fx= s*(y - x)
    fy= r*x - y - x*z
    fz= x*y - b*z
    return array([fx,fy,fz],float)



def d(N):
    a=0.0
    b=50.0
    h=(b-a)/N
    r=array([0.0,1.0,0.0],float)
    tpoints=arange(a,b,h)
    xpoints= []
    ypoints= []
    zpoints= []
    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,t+0.5*h)    
        k3 = h*f(r+0.5*k2,t+0.5*h)
        k4 = h*f(r+k3,t+h)
        r += (k1+2*k2+2*k3+k4)*(1/6)
    return tpoints,xpoints,ypoints,zpoints



for i in range (1,6):
    N=10**i
    pylab.plot(d(N)[0],d(N)[1], label=N)
    pylab.xlabel("t")
    pylab.ylabel("x(t)")
    pylab.title("Gráficos x em função de t")
    pylab.legend()
    pylab.show()
    pylab.plot(d(N)[0],d(N)[2], label=N)
    pylab.xlabel("t")
    pylab.ylabel("y(t)")
    pylab.title("Gráficos y em função de t")
    pylab.legend()
    pylab.show()
    pylab.plot(d(N)[0],d(N)[3], label=N)
    pylab.xlabel("t")
    pylab.ylabel("z(t)")
    pylab.title("Gráficos z em função de t")
    pylab.legend()
    pylab.show()
    pylab.plot(d(N)[1],d(N)[3], label=N)
    pylab.xlabel("x")
    pylab.ylabel("z(x)")
    pylab.title("Gráficos z em função de x")
    pylab.legend()
    pylab.show()

这给了我解决问题的图表,我认为这是正确的。

当我从 i=1i=3 时,它给了我这个错误:

enter image description here

我认为这与数学问题有关,但是当我搜索错误时,它给了我一些带有数组的东西。所以我正在检查它。

对于 i 等于或大于 4 的情况,它没有给我带来任何问题。

最佳答案

采用 RK4 的洛伦兹系统需要大约 0.05 或更小的步长,即 N=10**4 或更大的步长来构建。查看几乎重复的 Lorenz attractor with Runge-Kutta python .

对于较大的步长,即出现错误的情况,该方法将返回混沌结果,这些结果大多与系统的精确解以及与之相关的任何边界无关。因此,由于二次超线性项,浮点溢出可能会出现分歧。

关于python - 洛伦兹方程的运行时警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65223436/

相关文章:

python - 如何在Python中通过名称更改变量?

python - Python中过滤json并保存到另一个文件,如果它包含某个单词

python - 如何让输入识别其他类型的变量?

python - Azure SDK for Python批量读取blob数据

C++:关于运行时警告错误和消息的最佳实践是什么?

java - 如何修复 "StringIndexOutOfBoundsException"错误?

c++ - 调试断言失败 : Invalid Null Pointer

python - 修复我的函数的返回格式

python - 在 Python 中查找所有可能的大小写排列

python - 如何设置 if 语句以使用条件数组作为 python 中的输入