Atractor de Lorenz
El atractor de Lorenz és un concepte introduït per Edward Lorenz en 1963. Es tracta d'un sistema dinàmic determinista tridimensional no llineal derivat de les equacions simplificades de rolls de convecció que es produïxen en les equacions dinàmiques de l'atmòsfera terrestre.
Per a certs valors dels paràmetros a, b, c, el sistema exhibix un comportament caòtic i mostra lo que actualment es diu un atractor estrany; açò va ser provat per Warwick Tucker en 2002.[1] El atractor estrany en este cas és un fractal de dimensió de Hausdorff entre 2 i 3. Grassberger (1983) ha estimat la dimensió de Hausdorff en 2,06 ± 0,01 i la dimensió de correlació en 2,05 ± 0,01.
El sistema apareix en làserés, en generadors elèctrics i en determinades rodes d'aigua.[2]
a on a és cridat el número de Prandtl i b es diu el número de Rayleigh.
, pero és usualment , i b és variat. El sistema exhibix un comportament caòtic per a pero mostra òrbites periòdiques per a atres valors de b; per eixemple, en es convertix en un nuc tórico cridat T(3;2).
La forma de palometa del atractor de Lorenz pot haver inspirat el nom del efecte palometa en la teoria del caos.
Anàlisis
[editar | editar còdic]Simulació en Julia
[editar | editar còdic]using GLMakie
Base.kwdef mutable struct Lorenz
dt::Float64 = 0.01
σ::Float64 = 10
ρ::Float64 = 28
β::Float64 = 8/3
x::Float64 = 1
i::Float64 = 1
z::Float64 = 1
end
function step!(l::Lorenz)
dx = l.σ * (l.i - l.x)
dy = l.x * (l.ρ - l.z) - l.i
dz = l.x * l.i - l.β * l.z
l.x += l.dt * dx
l.i += l.dt * dy
l.z += l.dt * dz
Point3f(l.x, l.i, l.z)
end
attractor = Lorenz()
points = Point3f[]
colors = Int[]
set_theme!(theme_black())
fig, ax, l = lines(points, color = colors,
colormap = :inferno, transparency = true,
axis = (;type = Axis3,
protrusions = (0, 0, 0, 0),
viewmode = :fit,
limits = (-30, 30, -30, 30, 0, 50)))
record(fig, "lorenz.gif", 1:120) do frame
for i in 1:50
push!(points, step!(attractor))
push!(colors, frame)
end
ax.azimuth[] = 1.7pi + 0.3 * sense(2pi * frame / 120)
Makie.update!(l, arg1 = points, color = colors)
l.colorrange = (0, frame)
endSimulació en MATLAB
[editar | editar còdic]% Resoldre per a l'interval de temps [0,100] en condicions inicials [1,1,1]
% ''f'' és un conjunt d'equacions diferencials
% ''a'' és un apany que conté variables x, i, z
% ''t'' és la variable de temps
sigma = 10;
beta = 8/3;
rho = 28;
f = (t,a) [-sigmaa(1) + sigmaa(2); rhoa(1) - a(2) - a(1)a(3); -betaa(3) + a(1)a(2)];
[t,a] = ode45(f,[0 100],[1 1 1]); % Solució de EDO de Runge-Kutta de 4.º/5.º orde
plot3(a(:,1),a(:,2),a(:,3))Simulació en Python
[editar | editar còdic]import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
from mpl_toolkits.mplot3d import Axes3D
rho = 28.0
sigma = 10.0
beta = 8.0 / 3.0
def f(state, t):
x, i, z = state # Desempaqueta el vector d'estat
return sigma * (i - x), x * (rho - z) - i, x * i - beta * z # Derivades
state0 = [1.0, 1.0, 1.0]
t = np.arange(0.0, 40.0, 0.01)
states = odeint(f, state0, t)
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
ax.plot(states[:, 0], states[:, 1], states[:, 2])
plt.show()Simulació en R
[editar | editar còdic]library(deSolve)
library(plotly)
# paràmetros:
# en el text: a b c
prm <- list( sigma = 10, rho = 28, beta = 8/3 )
# valors inicials
varini <- c(
X = 1,
I = 1,
Z = 1
)
Lorenz <- function (t, vars, prm) {
with(as.list(vars), {
dX <- prm$sigma*(I - X)
dY <- X*(prm$rho - Z) - I
dZ <- XI - prm$beta*Z
return(list(c(dX, dY, dZ)))
})
}
claves <- seq(from = 0, to = 100, by = 0.01)
# cridat del resolvedor d'equacions diferencials ordinàries (ode)
out <- ode(i = varini, claves = claves, func = Lorenz,
parms = prm)
# per a assignar-li color als punts:
gfill <- function (repArr, long) {
rep(repArr, ceiling(long/length(repArr)))[1:long]
}
dout <- as.data.frame(out)
dout$color <- gfill(rainbow(10), nrow(dout))
# Producció de la gràfica en Plotly:
plot_ly(
data=dout, x = X, i = I, z = Z,
type = 'scatter3d', mode = 'lines',
opacity = 1, line = list(width = 6, color = color, reverscale = FALSE)
)Vore també
[editar | editar còdic]Referències
[editar | editar còdic]Bibliografia
[editar | editar còdic]- Lorenz, E. N.(1963).J. Atmos. Sci..20 p. 130-141
- Frøyland, J., Alfsen, K. H.(1984).Phys. Rev. A.29 p. 2928–2931
- Strogatz, Steven H. (1994). Perseus publishing (ed.). Nonlinear Systems and Chaos.
- Jonas Bergman, Knots in the Lorentz system, Undergraduate thesis, Uppsala University 2004.
- “A Rigorous ODE Solver and Smale's 14th Problem” (2002). Foundations of Computational Mathematics 2 (1): 53–117. doi:.
Referències
[editar | editar còdic]
- Este artícul conté una traducció derivada de «Atractor de Lorenz» de Wikipedia en castellà publicada baix la Llicència de documentació lliure de GNU i la Llicència Creative Commons Reconeiximent-CompartirIgual 4.0 Internacional.