Introduccion Matlab

download Introduccion Matlab

of 29

Transcript of Introduccion Matlab

Introduccin a matlab o

Notas y programas de matlab tomados de D. J. Higham and N. J. Higham, matlab Guide, SIAM, Philadelphia, PA, 2005. matlab, creado por Cleve Moler, es un sistema interactivo para hacer computacin numrica. o e Tradicionalmente la computacin numrica se hacia o e programando en Fortran o C y llamando librer as. Un sitio donde se consiguen dichas librer es en el netlib, as http://www.netlib.org/liblist.html

Introduccin a matlab o

Por qu no programarlo todo desde el principio? Algunas de e estas librer podr requerir conocimiento que va ms as an a all del PhD en Matemticas! a a

Introduccin a matlab oLas ventajas de matlab sobre otras maneras tradicionales de hacer computacin numrica. o ePermite codicacin rpida y fcil en un lenguaje de muy alto o a a nivel. No hay que preocuparse por las estructuras de datos, en particular, los arreglos no tienen que ser declarados antes de usarse. La interfaz interactiva permite rpida experimentacin y a o debugging. Grcas de alta calidad e instalaciones de visualizacin. a o Los archivos de matlab son completamente porttiles en a diferentes plataformas (Linux, Apple, Windows). Se pueden aadir Toolboxespara extender la diversidad de n computacin del sistema. o Se pueden encontrar muchos archivos gratis escritos en matlab en la red de internet.

Introduccin a matlab o

Las desventajas de matlab sobre otras maneras tradicionales de hacer computacin numrica. o eNo es gratis.

Hay dos distribuciones gratis que intentan hacer el trabajo de matlab:SCILAB: no es totalmente compatible con matlab. Octave: las grcas y herramientas de visualizacin no son a o muy buenas.

Introduccin a matlab o

Algunas cosas sobre matlab que debemos saber:Hace diferencia entre letras maysculas y minsculas. u u Escribir el valor de una variable en la l nea de comando causar que se exhiba el valor de la variable. a El punto y la coma al nal de la linea suprime el que salga en la pantalla los valores. Tener mucho cuidado con intercambiar parntesis ( ) con e corchetes cuadrados [ ]. En la l nea de comando podemos buscar comandos antes usados con las echas hacia arriba y hacia abajo. Se puede entrar help temapara la documentacin del tema o ya sea una funcin, un comando o un s o mbolo. Para salir de matlab escribir quit o exit.

Introduccin a matlab o

Veamos un v deo introductorio de matlab. http://www.mathworks.com/products/matlab/demos.html

Introduccin a matlab o

Una matriz m n es un arreglo bi-dimensional de nmeros u que consiste de m las y n columnas. Casos especiales son vector columna (n = 1) y vector la (m = 1). Las matrices son fundamentales en matlab. Las funciones zeros(m,n), ones(m,n) y eye(m,n) generan las matrices: de ceros, de unos y la identidad de tamao m n. n Si la matriz es cuadrada, m = n, entonces solamente hace falta un argumento en las funciones anteriores.

Introduccin a matlab o

Las matrices rand(m,n) y randn(m,n) generan las matrices m n con nmeros aleatorios distribuidos uniformemente en u [0,1] y distribuidos normalmente con media cero y desviacin o estndar 1, respectivamente. a

Introduccin a matlab o

Creamos matrices como sigue: >> a = [1 2 3] >> b = [4;5;6] >> c = b Operaciones >> >> >> >> a*b dot(a,b) A = b*a a*a % Qu sucede? e

% es la traspuesta de una matriz.

Introduccin a matlab o

Existen las operaciones ., . , que aplican la opracin o elemento por elemento de las matrices >> a.*b >> a.^2

Introduccin a matlab o

Para resolver el sistema lineal Ax = b usar el operador backslash. >> x = A\b Podemos calcular norma, determinantes y valores propios de matrices: norm(A), det(A) y eig(A). Podemos gracar funciones en dos y tres dimensiones usando plot, plot3, surf, mesh, etc.

Introduccin a matlab o

Una sucesin aleatoria de Fibonacci se genera tomando x1 y o x2 y entonces xn+1 = xn xn1 , n 2.

Viswanath (D. Viswanath. Random Fibonacci sequences and the number 1.13198824. . . . Math. Comp., 69(231):1131 1155, 2000.) demostr que con probabilidad 1, para valores o grandes de n, |xn | aumenta como un mltiplo de c n , donde u c = 1.13198824.

Introduccin a matlab o

%RFIB rand(state,100) m = 1000;

Random Fibonacci sequence. % Set random number state. % Number of iterations.

x = [1 2]; % Initial conditions. for n = 2:m-1 % Main loop. x(n+1) = x(n) + sign(rand-0.5)*x(n-1); end semilogy(1:m,abs(x)) c = 1.13198824; hold on semilogy(1:m,c.^(1:m)) hold off

% Viswanaths constant.

Introduccin a matlab oLa iteracin de Collatz. Dado un entero positivo x1 , o xk+1 = f (xk ), donde f (x) = 3x + 1, x/2, si x es impar, si x es par.

Se conjetura que esta iteracin siempre nos lleva al valor de 1 o (entonces circula entre 4, 2 y 1) para cualquier valor inicial x1 . No hay una prueba rigurosa para esta conjetura. Pero todas las computaciones parcen sugerir que es cierta. Para ms informacin ver J.C. Lagarias. The 3x + 1 problem a o and its generalizations. Amer. Math. Monthly, 92(1):323, 1985. O haga una busqueda en el web bajo Collatz problem.

Introduccin a matlab o%COLLATZ Collatz iteration. n = input(Enter an integer bigger than 2: narray = n;

);

count = 1; while n ~= 1 if rem(n,2) == 1 % Remainder modulo 2. n = 3*n+1; else n = n/2; end count = count + 1; narray(count) = n; % Store the current iterate. end plot(narray,*-) % Plot with * marker and solid line style. title([Collatz iteration starting at int2str(narray(1))], ... FontSize,16)

Introduccin a matlab o

Haremos una grca de barras para indicar el nmero de a u iteraciones que se requieren para llegar al nmero uno para los u valores iniciales: 1, 2, . . . , 29.

Introduccin a matlab o%COLLBAR Collatz iteration bar graph.

N = 29; % Use starting values 1,2,...,N. niter = zeros(N,1); % Preallocate array. for i = 1:N count = 0; n = i; while n ~= 1 if rem(n,2) == 1 n = 3*n+1; else n = n/2; end count = count + 1; end niter(i) = count; end bar(niter) % Bar graph. grid % Add horizontal and vertical grid lines. title(Collatz iteration counts,FontSize,16) xlabel(Starting value,FontSize,16) % Label x-axis. ylabel(Number of iterations,FontSize,16) % Label y-axis.

Introduccin a matlab o

El conjunto de Mandelbrot se dene como el conjunto de puntos c en el plano complejo para el cual la sucesin o generada por el mapa z z 2 + c, comenzando con z = c, est acotada. a

Introduccin a matlab o%MANDEL Mandelbrot set.

h = waitbar(0,Computing...); x = linspace(-2.1,0.6,301); y = linspace(-1.1,1.1,301); [X,Y] = meshgrid(x,y); C = complex(X,Y); Z_max = 1e6; it_max = 50; Z = C; for k = 1:it_max Z = Z.^2 + C; waitbar(k/it_max) end close(h) contourf(x,y,double(abs(Z)> >> >> >> >> >> >> level = 5; Pa = [0;0]; Pb = [1;0]; Pc = [0.5;sqrt(3)/2]; gasket(Pa,Pb,Pc,level) hold off title([Gasket level = num2str(level)], Fontsize, 16) axis(equal,off)

Introduccin a matlab o

La junta de Sierpinski se puede tambin generar jugando el e juego de caos de Barnsley. Se selecciona uno de los vrtices del tringulo como punto de e a comienzo. Se selecciona aleatoriamente uno de los tres vrtices del e tringulo. a Se toma el punto medio de la l nea que une estos dos vrtices e y se graca este punto. Se selecciona un nuevo punto tomando el punto medio entre este punto y un vrtice escogido aleatoriamente y se graca e este punto. El proceso se contina. u

Introduccin a matlab o

%BARNSLEY

Barnsleys game to compute Sierpinski gasket.

rand(state,1) % Set random number state. V = [0, 1, 0.5; 0, 0, sqrt(3)/2]; % Columns give triangle vertices. point = V(:,1); % Start at a vertex. n = input(Enter number of points (try 1000) ); for k = 1:n node = ceil(3*rand); % node is 1, 2, or 3 with equal prob. point = (V(:,node) + point)/2; plot(point(1),point(2),.,MarkerSize,15) hold on end axis(equal,off) hold off

Introduccin a matlab o

Generaremos una gura en tres dimensiones usando el comando surf. Note que en lugar de usar ciclos anidados se vectoriza.

Introduccin a matlab o

%SWEEP N = 10;

Generates a volume-swept 3D object. % Number of increments - try increasing.

z = linspace(-5,5,N); radius = sqrt(1+z.^2); % Try changing SQRT to some other function. theta = 2*pi*linspace(0,1,N); X = radius*cos(theta); Y = radius*sin(theta); Z = z(:,ones(1,N)); surf(X,Y,Z) axis equal