Download Fractales y MATLAB. Introducción

Document related concepts
no text concepts found
Transcript
Algorítmica y Lenguajes de Programación
MATLAB (iv)
Fractales y MATLAB. Introducción
n
n
n
A lo largo de las lecciones anteriores hemos visto los
fundamentos de MATLAB.
Esta herramienta resulta extraordinariamente útil en
múltiples campos de la matemática, pero también
para:
n
representar de sistemas físicos,
n
procesar señales digitales como sonido o imagen,
n
realizar análisis estadísticos,
n
procesar datos médicos y biológicos,
n
...
En esta lección iniciaremos al alumno en el estudio de los
fractales mediante MATLAB.
2
1
Fractales y MATLAB. ¿Qué son los fractales?
n
n
n
n
Un fractal es una forma geométrica que presenta
“simetría de escala”. Es decir, si se aumenta
cualquier zona de la misma un número
cualquiera de veces seguirá pareciendo la misma
figura.
Los fractales son generados de forma
matemática utilizando ordenadores y permiten
crear imágenes de montañas, plantas, olas, etc.
En la imagen se muestra el conjunto de
Mandelbrot. Este conjunto es creado a partir de
una función de la forma zn+1=f(zn) utilizada para
generar una serie de una variable compleja.
En el caso del conjunto de Mandelbrot la función
es f(zn) = zn2 + z0.
3
Fractales y MATLAB. Creación de fractales
n
n
n
Los fractales pueden generarse
empleando números reales o
complejos.
El conjunto de Mandelbrot es un
fractal creado mediante la
utilización de números
complejos.
Un ejemplo sencillo de un fractal
creado mediante números reales
es el triángulo de Sierpinski.
4
2
Fractales y MATLAB. Triángulo de Sierpinski (i)
n
n
n
Dibújese un triángulo equilátero
ABC.
Hállense los puntos medios de
cada lado y conéctense para
formar tres nuevas líneas dentro
del triángulo original.
Repetir para cada uno de los
triángulos resultantes que estén
“cabeza arriba”.
5
Fractales y MATLAB. Triángulo de Sierpinski (ii)
n
A continuación se muestra un script MATLAB para
generar un triángulo de Sierpinski.
function sierpinski (a,b,c,nivel)
hold on;
plot(a(1),a(2),'.');
plot(b(1),b(2),'.');
plot(c(1),c(2),'.');
if nivel>0
p1=[(a(1)+c(1))/2 (a(2)+c(2))/2];
p2=[(a(1)+b(1))/2 (a(2)+b(2))/2];
p3=[(c(1)+b(1))/2 (c(2)+b(2))/2];
sierpinski(a,p2,p1,nivel-1);
sierpinski(p1,p3,c,nivel-1);
sierpinski(p2,b,p3,nivel-1);
end
6
3
Fractales y MATLAB. Conjunto de Mandelbrot (i)
n
n
n
n
El conjunto de Mandelbrot fue descubierto por Benoit
Mandelbrot en 1980 mientras estudiaba el conjunto
de Julia.
El conjunto de Julia fue descubierto en los años 20
del siglo pasado por el matemático francés Gaston
Julia.
Julia se dedicó a analizar la función fc(z)=z2+c para
distintos números complejos c y, para un número c
fijo, con distintos valores de z.
Sólo con la llegada de los ordenadores se pudieron
visualizar estos conjuntos y apreciar sus especiales
características.
7
Fractales y MATLAB. Conjunto de Mandelbrot (ii)
n
¿Cómo se crea el conjunto de Mandelbrot? Veamos la forma inicial con el
siguiente script MATLAB:
hold
z0 =
plot
z1 =
plot
z2 =
plot
z3 =
plot
n
n
on;
0.5 + 0.75i
(z0,'.');
z0^2 + z0;
(z1,'o');
z0^1 + z0;
(z2,'x');
z2^2 + z0;
(z3,'+');
El punto z3 está muy alejado de los otros; por ello, z0 no es una buena
“elección” para pertenecer al conjunto de Mandelbrot puesto que se “aleja”
después de sólo 3 iteraciones.
El conjunto de Mandelbrot está formado por aquellos puntos que se mantienen
“próximos” después de N iteraciones. El conjunto así definido encaja dentro del
rectángulo: -2,1<x<0,9 y -1,5<y<1,5.
8
4
Fractales y MATLAB. Conjunto de Mandelbrot (iii)
n
Script MATLAB para representar el conjunto de Mandelbrot:
puntos=200;
puntosx=linspace(-2.1,0.9,puntos);
puntosy=linspace(-1.5,1.5,puntos);
[X,Y]=meshgrid(puntosx,puntosy);
C=X+Y*i;
Z=zeros(puntos);
iteraciones=20;
for k=1:iteraciones
Z=Z.^2+C;
W=exp(-abs(Z));
end
pcolor(W);
9
Fractales y MATLAB. Conjunto de Mandelbrot (iv)
n
Algunos comentarios sobre el script anterior:
n
n
n
n
n
El comando linspace permite generar vectores con un
número determinado de elementos equiespaciados. Así,
linspace(0,1,5) genera el vector
[0.00 0.25 0.50 0.75 1.00].
El comando meshgrid recibe dos vectores y retorna el
producto cartesiano de los mismos.
El comando zeros retorna un vector que sólo contiene
ceros.
El comando abs retorna el módulo de un número complejo.
El comando pcolor representa los valores almacenados en
una matriz como un código de color.
10
5
Fractales y MATLAB. Conjunto de Julia (i)
n
n
n
El conjunto de Julia es fc(z)=z2+c. Para
construir este conjunto se fija un valor
para c y se estudia lo que sucede con
cada punto tras n iteraciones.
En la figura se muestra el conjunto de
Julia para un valor de c = 0,27334 0.00742i
Recordemos que Mandelbrot descubrió
el conjunto que lleva su nombre
estudiando el conjunto de Julia; así,
resulta muy sencillo modificar el código
MATLAB anterior para visualizar este
otro conjunto fractal.
11
Fractales y MATLAB. Conjunto de Julia (ii)
n
Script MATLAB para visualizar el conjunto de Julia anterior:
puntos=200;
puntosx=linspace(-2.1,0.9,puntos);
puntosy=linspace(-1.5,1.5,puntos);
[X,Y]=meshgrid(puntosx,puntosy);
c=0.27334-0.00742*i;
Z=X+Y*i;
iteraciones=20;
for k=1:iteraciones
Z=Z.^2+c;
W=exp(-abs(Z));
end
pcolor(W);
shading flat;
12
6
Fractales y MATLAB. Newton Raphson
n
n
n
n
Esta técnica se basa en el método de Newton
Raphson para encontrar las raíces de una
ecuación polinomial de la forma:
f(z)=a0+a1z+a2z2+...+amzm=0.
El método genera una serie cuya
aproximación a la solución n+1 viene dada
por zn+1=zn-f(zn)/f’(zn).
Para crear una imagen mediante esta técnica
se utiliza cada punto del plano como
aproximación inicial, z0, y se colorea en
función de si hay o no solución y la velocidad
con que esta se encuentra.
Se propone como ejercicio para el alumno la
implementación de un script MATLAB que
visualice este fractal.
13
Fractales y MATLAB. Resumen
n
n
n
n
n
Un fractal es una forma geométrica que presenta “simetría
de escala”. Es decir, si se aumenta cualquier zona de la
misma un número cualquiera de veces seguirá pareciendo la
misma figura.
Los fractales son generados de forma matemática utilizando
ordenadores y permiten crear imágenes de montañas,
plantas, olas, etc.
Los fractales pueden generarse empleando números reales o
complejos.
Algunos ejemplos clásicos de fractales son el triángulo de
Sierpinski, el conjunto de Julia o el conjunto de Mandelbrot.
MATLAB permite implementar de forma muy sencilla
algoritmos para la visualización de fractales.
14
7