jueves, 19 de abril de 2012

Extra - Atractor de Lorenz

Atractor de Lorenz


El sistema de Lorenz es un sistema de ecuacones diferenciales ordinarias (Ecuaciones de Lorenz) estudiadas por Edward Lorenz. Es notable para obtener soluciones caóticas para ciertos valores de parámetros y condiciones iniciales. En particular, el atractor de Lorenz es un conjunto de soluciones del sistema de Lorenz en el cual, cuando se grafica, asemeja a una mariposa, o un número 8 dependiendo el ángulo de vista.


Descripción


Edward Lorenz desarrolló un modelo matemático simplificado para convección atmosférica. EL modelo es un sistema de tres ecuaciones diferenciales ordinarias, que se conocen como ecuaciones de Lorenz:
\frac{dx}{dt} = \sigma (y - x)
\frac{dy}{dt} = x (\rho - z) - y
\frac{dz}{dt} = xy - \beta z
Aquí, "x", "y", y "z" hacen el estado del sistema, "t" es el tiempo, y  \sigma\rho\beta, son los parámetros del sistema. 


Python (http://mensch.org/vplot/lorenz/lorenz.py):


#!/usr/bin/python
#Valores usados por las formulas
tstop=100
dt=.02
a=5.
b=15.
c=1.
#Abrimos un archivo para escribir los valores
pfile=open('lorenz.dat','w')
pfile.write("#Lorenz attractor written by lorenz.py \n")
pfile.write("#a=%6.2f  b=%6.2f   c=%6.2f \n" % (a,b,c))
t=0
x=1
y=0
z=0
while t<tstop:
 t=t+dt
 #Ecuaciones de Lorenz
 dxdt=a*y-a*x
 dydt=b*x-y-z*x
 dzdt=x*y-c*z
 x=x+dxdt*dt
 y=y+dydt*dt
 z=z+dzdt*dt
 pfile.write("%f %f %f %f\n" % (t,x,y,z))
pfile.close()
print "file lorenz.dat was written"

Octave - (http://en.wikipedia.org/wiki/Lorenz_system)



# Prevent Octave from thinking that this is a function file:
1;
% Lorenz equations solved by ODE Solve
%% x' = sigma*(y-x)
%% y' = x*(rho - z) - y
%% z' = x*y - beta*z
function dx = lorenzatt(X)
    rho = 28; sigma = 10; beta = 8/3;
    dx = zeros(3,1);
    dx(1) = sigma*(X(2) - X(1));
    dx(2) = X(1)*(rho - X(3)) - X(2);
    dx(3) = X(1)*X(2) - beta*X(3);
    return
end
 
% Using LSODE to solve the ODE system.
lsode_options("absolute tolerance",1e-3)
lsode_options("relative tolerance",1e-4)
t = linspace(0,25,1e3); X0 = [0,1,1.05];
[X,T,MSG]=lsode(@lorenzatt,X0,t);
T
MSG
plot3(X(:,1),X(:,2),X(:,3))
view(45,45)
Gráficas

Utilizando el código de python: \sigma = 5 \rho = 15 \beta = 1
Utlizando el código de Octave \sigma = 10, \rho = 28, \beta = 8/3
Referencias: 

1 comentario:

  1. De aquí van +1 en ambos reporte y programa de la tarea 3 de extras.

    ResponderEliminar