You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Julia求解Lorenz方程遇UndefVarError报错,求解决方案

Lorenz方程求解代码错误排查与修正

核心错误点说明

  • 微分方程函数签名错误:DifferentialEquations.jl要求ODE函数的参数顺序为(du, u, p, t),原代码写为(t,p,u,du),导致变量映射混乱。
  • 初始条件变量命名错误:u[0] = [x₀, 1, 0]是语法错误,正确写法是u0 = [x₀, 1, 0](混淆了数组索引和变量名)。
  • 未定义变量滥用:lorenz_solver中引用了未定义的params,lorenz_plot中直接使用未定义的prob和t,完全没有调用solver生成解。
  • 绘图逻辑错误:没有从解对象中提取时间序列t,也没有正确传递初始条件和ρ参数。

修正后的完整代码

using DifferentialEquations
using Plots
using LaTeXStrings

# 修正微分方程函数签名顺序
function lorenz!(du, u, p, t)
    x, y, z = u
    sigma, ρ, beta = p
    du[1] = sigma * (y - x)
    du[2] = x * (ρ - z) - y
    du[3] = x * y - beta * z
end

# 修正求解器逻辑,移除未定义变量
function lorenz_solver(x₀, ρ)
    u0 = [x₀, 1.0, 0.0]  # 初始条件变量名修正,统一浮点类型
    tspan = (0.0, 100.0)
    p = [10.0, ρ, 8/3]   # 参数统一浮点类型
    prob = ODEProblem(lorenz!, u0, tspan, p)
    sol = solve(prob)
    return sol
end

# 重写绘图函数,正确调用求解器并提取数据
function lorenz_plot()
    # ρ=14的两组解
    sol1 = lorenz_solver(0.0, 14)
    sol2 = lorenz_solver(1e-5, 14)
    t = sol1.t  # 从解对象提取时间序列

    p1 = plot(t, [sol1[1,:] sol2[1,:]], ylabel=L"x_1, x_2", title="ρ = 14", legend=:right)
    p2 = plot(t, abs.(sol1[1,:] .- sol2[1,:]), xlabel=L"t", ylabel=L"|x_1 - x_2|")
    p3 = plot(sol1, vars=(1,2,3), xlabel=L"x", ylabel=L"y", zlabel=L"z", title="相空间(ρ=14)")

    # ρ=28的两组解
    sol3 = lorenz_solver(0.0, 28)
    sol4 = lorenz_solver(1e-5, 28)

    p4 = plot(t, [sol3[1,:] sol4[1,:]], title="ρ = 28", legend=:right)
    p5 = plot(t, abs.(sol3[1,:] .- sol4[1,:]), xlabel=L"t", ylabel=L"|x_1 - x_2|")
    p6 = plot(sol3, vars=(1,2,3), xlabel=L"x", ylabel=L"y", zlabel=L"z", title="相空间(ρ=28)")

    # 排版绘图
    plot(p1, p2, p3, p4, p5, p6, layout=(3,2), link=:all, size=(1000, 800))
end

# 导出函数
export lorenz_solver, lorenz_plot

额外说明

  • 统一使用浮点类型避免类型不稳定问题;
  • 绘图时明确提取解的第一个分量(x变量)进行对比;
  • 相空间图补充了坐标轴标签,增强可读性;
  • 修正后的代码可直接在Julia环境或Jupyter Notebook中运行,不会出现未定义变量错误。

内容的提问来源于stack exchange,提问作者Hana Bachi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 14:44:58