用julia演示蝴蝶效应:洛伦兹吸引子

本文介绍了使用Julia编程语言绘制Lorenz方程的吸引子图形,展示了蝴蝶效应的概念。通过比较开启和关闭抗锯齿的效果,以及利用ParameterizedFunctions.jl库的ode_def宏简化方程,展示了微分方程求解和图形呈现的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

蝴蝶效应的名字来源于蝴蝶扇动翅膀的动作,虽然这个动作微小,但可能会在数周后引起飓风等极端天气的发生。这种现象表明,微小的变化可能会被放大并产生非线性的结果。这个概念最早由美国气象学家爱德华·洛伦兹提出的。

Lorentz吸引子

Lorentz吸引子堪称是微分方程组的经典入门案例了,图像也具有极高的辨识度,特别像蝴蝶的一对翅膀,同时与蝴蝶效应的内涵极为相称,表现出微小扰动可能带来巨大的差异性后果。

其方程为

d x d t = σ ( y − x ) d y d t = x ( ρ − z ) − y d z d t = x y − β z \begin{aligned} \frac{\text dx}{\text dt}&=\sigma(y-x)\\ \frac{\text dy}{\text dt}&=x(\rho-z)-y\\ \frac{\text dz}{\text dt}&=xy-\beta z \end{aligned} dtdxdtdydtdz=σ(yx)=x(ρz)y=xyβz

julia绘图

将其改写为Julia函数

function lorenz!(du,u,p,t)
    σ,ρ,β = p
    du[1] = σ*(u[2]-u[1])
    du[2] = u[1]*(ρ-u[3]) - u[2]
    du[3] = u[1]*u[2] - β*u[3]
end

将初值 u 0 u_0 u0和参数 p p p设为

u0 = [1.0,0.0,0.0]
p = (10,28,8/3)

走你

using DifferentialEquations         #导入微分方程包
tspan = (0.0,100.0)
prob = ODEProblem(lorenz!,u0,tspan,p)
sol = solve(prob)

绘图

using Plots; gr()
plot(sol,vars=(1,2,3))
savefig("ode_4.png")

在这里插入图片描述

关闭抗锯齿

当然这个图其实是开了“抗锯齿”的,由于sol的结果本身就是一组分立的量,所以关闭denseplot之后,可以看到

plot(sol,vars=(1,2,3),denseplot=false)
savefig("ode_5.png")

在这里插入图片描述

ParameterizedFunctions.jl中提供了一个非常便捷的宏ode_def,可以更加直观地把Lorentz方程写为参数形式

L = @ode_def Lorentz begin
    dx = σ*(y-x)
    dy = x*(ρ -z)- y
    dz = x*y -β*z
end σ ρ β

prob = ODEProblem(L,u0,tspan,p)
sol = solve(prob)
plot(sol,vars=(1,2,3))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微小冷

请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值