Descargar

Programando en MATLAB (Presentación PowerPoint)

Enviado por Pablo Turmero


    edu.red PROGRAMANDO CON MATLAB GENERALIDADES Programar en MatLab es usar una serie de comandos que permitan realizar una tarea o función específica. Estos pueden ser escritos uno por uno a través de la línea de comandos:

    edu.red A=[1 2 3;4 5 6;7 8 9] A = 1 2 3 4 5 6 7 8 9 Ejemplo

    edu.red Los archivos de disco que contienen instrucciones de MATLAB se llaman archivos-M. Esto es así porque siempre tienen una extención de ".m" como la última parte de su nombre de archivo. Un archivo-M consiste de una secuencia de instrucciones normales de MATLAB, que probablemente incluyen referencias a otros archivos-M. Un archivo-M se puede llamar a sí mismo recursivamente. Puedes crear archivos-M utilizando un editor de texto ó procesador de palabras. Hay dos tipos de archivos-M: los de comandos y las funciones. Los archivos de comandos, automatizan secuencias largas de comandos. Los archivos de funciones, permiten añadir a MATLAB funciones adicionales expandiendo asi la capacidad de este programa. Ambos, comandos y funciones, son archivosordinarios de texto ASCII. ARCHIVOS-M: COMANDOS Y FUNCIONES

    edu.red Cuando un archivo de comandos es invocado, MATLAB simplemente ejecuta los comandos encontrados en dicho archivo. Las instrucciones en un archivo de comando operan globalmente en los datos en el espacio de trabajo. Los comandos son utilizados para hacer análisis, resolver problemas, ó diseñar secuencias largas de comandos que se conviertan en interactivas. Por ejemplo, suponga que el archivo fibo.m contiene los siguientes comandos de MATLAB: % Un archivo-M para calcular los elementos de la serie de Fibonacci f = [1 1]; i = 1; while f(i) + f(i+1) < 1000 f(i+2) = f(i) + f(i+1); i = i + 1; end plot(f) ARCHIVOS DE COMANDOS

    edu.red Si escribimos fibo en una ventana de MATLAB seguido de "enter“ vemos que MATLAB calcula los primeros 16 números de Fibonacci, y luego grafica estos. Luego que la ejecución del archivo es completada, las variables f y i permanecen en el espacio de trabajo. Los programas de demostraciones incluidos en MATLAB son ejemplos de como usar comandos para hacer tareas más complicadas. Para utilizar estos escriba demos en el "prompt" de MATLAB.

    edu.red Un archivo-M que contiene la palabra function al principio de la primera línea, es un archivo de función. En una función, a diferencia de un comando, se deben de pasar los argumentos. Las variables definidas y manipuladas dentro de la función son locales a esta y no operan globalmente en el espacio de trabajo. Los archivos de funciones se utilizan para extender a MATLAB, i.e., crear nuevas funciones para MATLAB utilizando el lenguaje propio de MATLAB. El archivo mean.m contiene las instrucciones: function y = mean(x) % Valor medio. % Para vectores, mean(x) retorna el valor medio de los % elementos del vector x. % Para matrices, mean(x) es un vector fila conteniendo el % valor medio de cada columna. [m, n] = size(x); if m == 1 m = n; end y = sum(x)/m; ARCHIVOS DE FUNCIONES

    edu.red (Las lineas que comienzan con "%" son interpretadas como comentarios por MATLAB). La existencia de este archivo en el disco duro define una nueva función en MATLAB llamada mean. Si z es un vector de los enteros desde 1 a 99, por ejemplo, z = 1:99; entonces, el valor promedio es encontrado escribiendo mean(z) que resultaría ans = 50

    edu.red Ejemplo % Ejemplo de un archivo-m % Creación del vector x usando el comando for n=5; for i=1:n x(i)=i^2; end x % Fin del archivo-m Este ejemplo es un archivo-m tipo comando. Para ejecutarlo, en la línea de comandos se debe escribir el nombre del archivo: >> ejemplo x = 1 4 9 16 25

    edu.red Ejemplo % Calcula el promedio de los elementos de un vector y % dibuja dicho vector % Sintaxis: promedio(x) donde x es el vector a promediar function p = promedio(x) n=length(x); p=0; for i=1:n p=p+x(i); end p=p/n; plot(x);

    edu.red Algunas funciones elementales son: real(a) Parte real imag(a) Parte imaginaria conj(a) Conjugado de a fft(x) Transformada discreta de Fourier del vector x fft(x,n) FFT de n puntos muestrales ifft(x) Transformada inversa rápida de Fourier del vector x ifft(x,n) FFT inversa de n puntos muestrados zeros Inicializa a ceros zeros(n) Matriz de nxn de ceros zeros(m,n) Matriz de mxn de ceros y=zeros(size(A) Matriz del tamaño de A, todos ceros OTRAS FUNCIONES FUNCIONES MATEMÁTICAS

    edu.red Ejemplo size Regresa el número de filas y columnas A = 0 7 -6 1 0 0 0 1 0 >> [m n]=size(A) m = 3 n = 3

    edu.red tril(A) Matriz triangular inferior triu(A) Matriz triangular superior pascal Triangulo de Pascal tocplitz Tocplitz FUNCIONES MATRICIALES La descomposición de Valores Singulares es importante para el análisis de problemas que envuelvan matrices. La asignación triple [U, S, V] = svd(A) produce los tres factores en la descomposición de valores singulares A = U*S*V'. Las matrices U y V son ortogonales y la matriz S es diagonal. La función svd(A) devuelve solamente los elementos de la diagonal de S, que son los valores singulares de A. DESCOMPOSICIÓN DE VALORES SINGULARES

    edu.red La Descomposición de Valores Propios se utiliza para obtener los valores y vectores propios de una matriz cuadrada A. La función eig(A) devuelve los valores propios de A en un vector columna. La asignación [X,D]=eig(A) produce una matriz diagonal D cuyos elementos diagonales son los valores propios de A y las columnas de X son los vectores propios correspondientes. Las Funciones de norma, rango y acondicionamiento asociadas son: cond – número de condición en la norma 2 norm – norma 1, norma 2, norma F, norma rank – rango rcond – estimado del número de condición DESCOMPOSICIÓN DE VALORES PROPIOS

    edu.red Ejemplo: El archivo-M llamado humps.m contiene las siguientes instrucciones: function y = humps(x) y = 1./((x-.3).^2 +.01) + 1./((x-.9).^2 +.04) – 6; y para la gráfica de la función escribimos x = -1:.01:2; plot(x, humps(x)) Las funciones de funciones para ecuaciones no-lineales y optimización incluyen: fmin mínimo de una función de una variable fmins mínimo de una función multi-variable (minimización no-lineal sin restricciones) fzero cero de una función de una variable constr minimización con restricciones fsolve solución de ecuación no-lineal leastsq cuadrados mínimos no-lineales ECUACIONES NO-LINEALES Y FUNCIONES DE OPTIMIZACIÓN

    edu.red Las funciones de MATLAB para resolver problemas de valor inicial para ecuaciones diferenciales ordinarias son: ode23 método Runge-Kutta de largo de paso variable que combina un método de orden dos con uno de orden tres. ode45 método Runge-Kutta-Fehlberg de largo de paso variable que combina un método de orden cuatro con uno de orden cinco. Ejemplo to=0; tf=10; [t,x]=ode23(`edif',to,tf,xo); [t,x]=ode23(`deriv',to,tf,xo); ode45 [t,x]=ode23(`deriv',to,tf,xo,to1,trace); ode45 trace => 0 – no resuntados intermedios 1 – resultados intermedios default tol: ode23 -> 1.0e-03 ode45 -> 1.oe-06 FUNCIONES PARA ECUACIONES DIFERENCIALES

    edu.red function nombre_1=nombre_2(parametro_1, …, parametro_n) Ejemplos: function y=promedio(x) function i=inodal(t,v) function xpunto=vdpol(t,x) xpunto=zeros(2,1); xpunto(1)=x(1).*(1-x(2).^2)-x(2); xpunto(2)=x(1); DECLARACIÓN DE function SINTAXIS

    edu.red OPERADORES RELACIONALES Los operadores relacionales de MatLab son: < menor que <= menor o igual a > mayor que >= mayor o igual a == igual a =~ no igual a Ejemplo: if n< maxn … if n>=0, break, end

    edu.red Los operadores &, | y ~ son los operadores de lógica "y", "ó" y "no" respectivamente. El resultado de C = A & B es una matriz cuyos elementos son unos donde A y B sean ambos distintos de cero, y ceros donde A ó B sean cero. A y B deben de ser matrices con las mismas dimensiones, a menos que una de ellas sea un escalar. El resultado de C = A | B es una matriz cuyos elementos son unos donde A ó B tienen un elemento diferente de cero, y ceros donde ambas tienen elementos cero. A y B deben de ser matrices con las mismas dimensiones, a menos que una sea un escalar. El resultado de B = ~A es una matriz cuyos elementos son uno donde A tiene un elemento cero, y ceros donde A tiene elementos diferentes de cero. OPERADORES LÓGICOS

    edu.red La función any(x) devuelve 1 si cualquiera de los elementos de x es diferente de cero, de lo contrario devuelve 0. La función all(x) devuelve 1 solamente si todos los elementos de x son diferentes de cero. Estas funciones se usan en cláusulas if. Por ejemplo: if all(A <.5) . . . end FUNCIONES any Y all

    edu.red Para argumentos matriciales, any y all trabajan por columnas para devolver un vector fila con el resultado para cada columna. Aplicando la función dos veces, any(any(A)), siempre reduce la matriz a una condición escalar. Las funciones relacionales y lógicas en MATLAB son: any condiciones lógicas all condiciones lógicas find halla índices de arreglos de valores lógicos exist verifica si existen variables isinf detecta infinitos finite verifica para los valores finitos

    edu.red Los caracteres especiales de MatLab son: [ ] Se utilizan para formar vectores y matrices ( ) Define precedencia en expresiones aritméticas. Encierra argumentos de funciones en forma usual , Separador de elementos de una matriz, argumentos de funciones y declaraciones en líneas con declaraciones múltiples ; Termina filas de una matriz, separador de declaraciones % Comentario Ejemplos: [6.0 9.0 3.4 ] sqrt(2) for i=1:n, a(i)=0, end for i=1:n; a(i)=0; end % inicia vector a en 0 CARACTERES ESPECIALES

    edu.red for variable=incio:paso:final declaración 1; … declaración n; end for variable=inicio:final declaración 1; … declaración n; end CONTROL DE FLUJO DECLARACIÓN DE for SIMPLE SINTAXIS

    edu.red Ejemplo: for i=1:n c(i)=a(i)*b(i); end o for i=1:n; c(i)=a(i)*b(i); end El ciclo FOR permite que una instrucción, ó grupo de instrucciones, pueda repetirse un número determinado de veces. Por ejemplo, for i = 1:n, x(i) = 0, end asigna 0 a los primeros n elementos de x. Si n es menor de 1, el ciclo sigue siendo válido pero MATLAB no ejecuta la instrucción intermedia. Si x no esta definido, ó si tiene menos de n elementos, entonces un espacio adicional es localizado automáticamente a x cada vez que sea necesario.

    edu.red while expresion proposición 1; … proposición 2; end DECLARACIÓN while SINTAXIS e=1.0; while (1.0+e)>1.0001 e=e/2.0; end it=1; t=0; wo=2.0*pi*60.0; while it<=npts, ut=sin(wo*t);t=t+dt;end Ejemplos

    edu.red El ciclo WHILE permite a una instrucción, ó grupo de instrucciones, repetirse un número indefinido de veces, bajo el control de una condición lógica. El siguiente ciclo while halla el primer entero n para el cual n! es un número de 100 digitos: n = 1; while prod(1:n) < 1.0e100, n = n+1; end n Un cálculo más práctico ilustrando el ciclo while es en el cómputo del exponencial de una matriz, llamado expm(A) en MATLAB. Una posible definición de la función exponencial es mediante la serie: expm(A) = I + A + A^2/2! + A^3/3! + …

    edu.red La idea es sumar todos los términos necesarios hasta producir un resultado que, en la precisión finita la de computadora, no cambie aunque más términos sean añadidos. Para esto procedemos de la forma siguiente: E = zeros(size(A)); F = eye(size(A)); k = 1; while norm(E+F-E, 1) > 0 E = E + F; F = A*F/k k = k+1; end Aqui A es la matriz dada, E representa la suma parcial de la serie, F es un término individual en la serie, y k es el índice de este término.

    edu.red a) if expresión proposición 1; … proposición n; end b) if expresión proposición 1; … proposición n; else proposición 1; … proposición m; end DECLARACIONES if, else, elself Y break SINTAXIS c) if expresión proposición 1; … proposición n; elseif proposición 1; … proposición m; else proposición 1; … proposición r; end d) if expresión, break, end

    edu.red Ejemplo >> A=[1 2 3; 4 5 6; 7 8 9] A = 1 2 3 4 5 6 7 8 9 ALGEBRA MATRICIAL CREACIÓN DE UNA MATRIZ

    edu.red matriz_modificada = reshape(matriz_original, filas, columnas) Ejemplo >> A=[1 4 7 10; 2 5 8 11; 3 6 9 12] A = 1 4 7 10 2 5 8 11 3 6 9 12 >> B=reshape(A,2,6) B = 1 3 5 7 9 11 2 4 6 8 10 12 CAMBIO DEL ORDEN DE UNA MATRIZ: reshape SINTAXIS

    edu.red >> A=[1 2; 3 4] A = 1 2 3 4 >> A(1,1)=A(1,2)+A(2,1) A = 5 2 3 4 MODIFICACIÓN INDIVIDUAL DE ELEMENTOS >> A(1,2)=A(2,1) A = 5 3 3 4 >> A(2,2)=10 A = 5 3 3 10 EJEMPLOS

    edu.red >> A=[1 2; 3 4; 5 6 ] A = 1 2 3 4 5 6 >> b=A(:) b = 1 3 5 2 4 6 CONVERSIÓN DE UNA MATRIZ EN UN VECTOR

    edu.red >> x=1:5 x = 1 2 3 4 5 >> x=5:-1:1 x = 5 4 3 2 1 >> x=0:0.25:1 x = 0 0.2500 0.5000 0.7500 1.0000 GENERACIÓN DE VECTORES: Ejemplos

    edu.red Si la matriz original A es de 10*10, entonces: A(1:3,5) matriz de 3×1 que tiene los tres primeros elementos de la columna 5 de A A(1:3, 5:9) matriz de 3×4 que tiene los tres primeros filas y las columnas de 5 a 9 de A A(:,5) quinta columna de A A(1:5,:) primeras cinco filas de A A(:,[4 6])=B(:,1:2) remplaza la cuarta y sexta columnas de A con las dos primeras de A ACCESO A SUBMATRICES CONTIGUAS Y NO CONTIGUAS Ejemplos

    edu.red A=[1 2; 3 4] + i*[5 6 ; 7 8] o A=[1 2; 3 4] + i*[5 6 ; 7 8] o A=[1+5i 2+6i; 3+7i 4+8i] A = 1.0000 + 5.0000i 2.0000 + 6.0000i 3.0000 + 7.0000i 4.0000 + 8.0000i DECLARACIÓN DE MATRICES COMPLEJAS

    edu.red >> x=(0.0:0.2:3.0); >> y=exp(-x).*sin(x); >> [x;y] ans = Columns 1 through 7 0 0.2000 0.4000 0.6000 0.8000 1.0000 1.2000 0 0.1627 0.2610 0.3099 0.3223 0.3096 0.2807 Columns 8 through 14 1.4000 1.6000 1.8000 2.0000 2.2000 2.4000 2.6000 0.2430 0.2018 0.1610 0.1231 0.0896 0.0613 0.0383 Columns 15 through 16 2.8000 3.0000 0.0204 0.0070 GENERACIÓN DE TABLAS

    edu.red >> A=[1 2 3;4 5 6; 7 8 9] A = 1 2 3 4 5 6 7 8 9 >> det(A) ans =0 DETERMINANTE DE A: det(A) >> A=[0 7 -6; 1 0 0;0 1 0] A = 0 7 -6 1 0 0 0 1 0 VALORES Y VECTORES CARACTERÍSTICOS: eig(A) >> eig(A) ans = -3.0000 2.0000 1.0000

    edu.red >> [v d]=eig(A) v = 0.9435 -0.8729 0.5774 -0.3145 -0.4364 0.5774 0.1048 -0.2182 0.5774 d = -3.0000 0 0 0 2.0000 0 0 0 1.0000 v – Vectores característicos d – valores característicos >> A=[0 7 -6; 1 0 0;0 1 0] A = 0 7 -6 1 0 0 0 1 0 >> expm(A) ans = 5.2541 11.0757 -13.6115 2.2686 5.2541 -4.8044 0.8007 2.2686 -0.3510 Exponencial de una matriz: expm(A) >> inv(A) ans = 0 1.0000 0 0 0 1.0000 -0.1667 0 1.1667 Inversa de A: inv(A) Ecuación característica de la matriz A: poly(A) >> p=poly(A) p = 1.0000 0.0000 -7.0000 6.0000

    edu.red id = fopen(`nombre.dat', `permiso') donde permiso puede ser: `r' Abre archivo para lectura `r+ Abre archivo para lectura y escritura `w' Borra el contenido del archivo existente o crea un nuevo archivo y lo abre para escritura `w+' Idem que `w' únicamente que el archivo se abre para lectura y escritura `a' Crea y abre un nuevo archivo o abre un archivo `a+' Idem que `a' únicamente que el archivo es abierto para lectura y escritura ARCHIVOS DE E/S DECLARACIÓN fopen SINTAXIS Ejemplo fid = fopen(`archivo.dat','r') fid = -1, error 0, lectura/escritura normal [fid, mensaje = fopen(`archivo.dat','r')

    edu.red DECLARACIÓN fclose SINTAXIS status = fclose(fid) o status = fclose (`all') – cierra todos los archivos abiertos DECLARACIÓN fread SINTAXIS Lee un archivo abierto con una precisión ndicada fread(fid,registros,'precision') registros `char' o `uchar' `short' o `long' `float' o `double' Ejemplo: A = fread(fid,10,'float') fwrite(fid,A,'short') DECLARACIÓN fwrite SINTAXIS Salida con formato Ejemplos: fprintf(fid,'titulon'); fprintf(fid,'%f %12.7fn', y); Formato %s – cadena decimal %d – número decimal %f – punto flotante % g – formato g DECLARACIÓN fprintf

    edu.red ESTA PRESENTACIÓN CONTIENE MAS DIAPOSITIVAS DISPONIBLES EN LA VERSIÓN DE DESCARGA