Universidad Autónoma del Estado de México Facultad de Ingeniería CURSO DE MATLAB Análisis Númerico P f Profesor: D H Dr. Humberto b S Salinas li T Tapia i Enero 2013 Contenido 1. 1 2. 3. 4. 5. 6 6. 7. 8 8. 9. Introducción Fundamentos La interfaz de Usuario de MATLAB Trabajando con variables de MATLAB Operaciones con matrices P li Polinomios i Estadística Básica y Análisis de Datos Graficación y Visualización Introducción a la Programación en Matlab CURSO BÁSICO DE MATLAB En este curso se ofrece una introducción al ambiente de trabajo de MATLAB y es dirigido a usuarios principiantes e intermedios y se cubrirán temas como análisis y visualización de datos, principios de programación. ió Los L participantes ti i t notarán t á ell poder d de d MATLAB como herramienta científica y a la vez notarán la facilidad de su uso y flexibilidad Este curso ofrece un panorama al ambiente de Cómputo Técnico de MATLAB. Introducción Más de un millón de personas en todo el mundo utilizan MATLAB para la p técnica. computación Confían en MATLAB para ayudarles a desarrollar: • • • • • Terapias contra el cáncer Búsqueda de nuevas fuentes de energía Hacen vehículos de combustible más seguro y más eficientes, eficientes Explorar el espacio exterior. Cualquier área de ingeniería Mediante la combinación de un motor de gran alcance numérico y el entorno de programación técnica con la exploración interactiva y herramientas de visualización, MATLAB se ha convertido en el lenguaje de computación técnica, mas empleado en ingeniería y ciencias. Aplicaciones Diseño de sistemas de Control Diseñar, probar y poner en práctica sistemas de control. Existen Herramientas en MathWorks de apoyo para el diseño de control de cada etapa del proceso de desarrollo. desarrollo Procesamiento Digital de Señales Analizar señales, señales desarrollar algoritmos y diseño de sistemas de DSP Sistemas de comunicación Diseño y simulación de sistemas complejos de comunicaciones. Para los sistemas de comunicaciones , MATLAB ® y/o Simulink ®, ofrecen productos de diseño abierto y extensible y el medio ambiente de simulación. Procesamiento de imágenes y video Adquiere, procesa y analiza imágenes g y vídeo para el desarrollo de algoritmos g y diseño de sistemas Prueba y Medición Adquirir, analizar y explorar datos y automatizar pruebas Aplicaciones Biología Computacional Analizar, visualizar, y modelación de datos biológicos y de sistemas Finanzas Computacionales Desarrollar e implementar aplicaciones financiero de forma eficiente y robusta Computo Técnico Cálculo matemático,, análisis,, visualización y desarrollo de algoritmos g Introducción MATLAB es el nombre abreviado de “MATrix “MATrix LABoratory LABoratory”. ”. MATLAB es un programa para realizar cálculos numéricos – vectores t – matrices – números escalares reales como complejos Cadenas de caracteres y con otras estructuras de información más complejas Una de las capacidades más atractivas es la de realizar una amplia variedad de gráficos – 2D – 3D MATLAB tiene también un lenguaje de programación propio. MATLAB dispone de un código básico y de varias librerías especializadas, llamadas toolboxes. toolboxes. – Para la utilización de los toolboxes se requiere una aplicación específica. El Sistema MATLAB El sistema MATLAB consiste de 5 partes.: 1. Escritorio de Herramientas y ambiente de trabajo. 1 1. 2. 3. 4. 5. 5 6. 7. 8. 2. Desktop Tools and Development Environment Environment.. Desktop Command Window, Window, Command history, history, debugger,, Editor and debugger Analizador de codigos, codigos, Browsers para ver la ayuda, Workspace Librería de funciones Matemáticas de MATLAB. Se cuenta con una colección de una gran cantidad de funciones y algoritmos que van desde funciones elementales tales como la suma suma, el seno seno, coseno y aritmética compleja, hasta funciones mas sofisticadas como inversa de una matriz, valores característicos de una matriz, Funciones Bessel y transformada rápida de Fourier 3 3. El Lenguaje L j MATLAB – Este es un lenguaje de alto nivel de matrices/arreglos, con sentencias de control de flujo, j , funciones,, estructuras de datos,, input/output p p y p programación g orientada a objetos. 4. Gráficos (Graphics (Graphics). ). – MATLAB es un entorno extenso y fácil para mostrar graficas de vectores y matrices. – Incluye funciones de alto nivel para desarrollar gráficos de 2 y 3 dimensiones. – Permite el procesamiento de imágenes – Animación y presentación de gráficos 5 5. Interfaces API externas de MATLAB MATLAB. • Esta es una librería que permite escribir programas en C y FORTRAN e interactuar con MATLAB. Inicio de MATLAB MATLAB se puede arrancar como cualquier otra aplicación de Windows, clicando dos veces en el icono correspondiente di t en ell escritorio it i o por medio di del d l menú ú Inicio). Al arrancar MATLAB se abre una ventana similar a la mostrada en la Figura Editor de Array Array’s s Se edita el contenido de un array, el cual se puede modificar. Command History Se muestra los comandos utilizados en la sesión más reciente, ademas se pueden recuperar en sesiones i ffuturas t Command Window Es la ventana principal de MATLAB, se utiliza para introducir los datos datos, Funciones, archivos-m, y también para mostrar los resultados Para apreciar p desde el p principio p la potencia de MATLAB, se puede comenzar por escribir en la Command Window, a continuación del prompt (>>). Al final hay que pulsar intro. Es posible recuperar comandos anteriores de MATLAB y moverse por dichos comandos con el ratón p y con las teclas-flechas ↑ y ↓. Current Directory Browser Para buscar, ver, abrir y realizar cambios de los archivos y directorios de MATLAB, utilizados en el directorio actual. El comando pwd (de print working directory) permite saber cuál es el directorio actual. Para cambiar de directorio actual se puede utilizar el comando cd (de change directory) (por ejemplo cd C:\Matlab\Ejemplos) o relativo (cd Ejemplos). j p ) Para subir un nivel en la jerarquía de directorios se utiliza el comando cd .., y cd ../.. para subir dos niveles. Éste es el mismo sistema que se sigue para cambiar de directorio en las ventanas de MS-DOS. MATLAB permite utilizar la barra normal (/) y la barra invertida (\), indistintamente. MAT AB Workspace MATLAB W k El espacio i d de t b j trabajo d de MATLAB (Workspace) es el conjunto de variables y de funciones de usuario que en un determinado momento están definidas en la memoria del programa o de la función que se está ejecutando. Para obtener P bt i f información ió sobre b el Workspace desde la línea de comandos se pueden utilizar los comandos who ho y whos hos EDITOR/DEBUGGER Aunque los ficheros *.m se pueden crear con cualquier editor de ficheros ASCII tal como Notepad, MATLAB dispone de un editor que permite tanto crear y modificar estos t ficheros, fi h como ejecutarlos j t l paso a paso para ver si contienen errores (proceso de Debug o depuración). depuración) DEBUGGER El Debugger es un programa que hay que conocer muy bien, pues es muy útil para detectar y corregir errores. Es también enormemente útil para aprender métodos numéricos y técnicas de programación. Botones que corresponden al Debugger Set/Clear Breakpoint. Coloca o borra un breakpoint en la línea en que está el cursor.. Clear All Breakpoints. Elimina todos los breakpoints que haya en el fichero. Step. Avanzar un paso sin entrar en las funciones de usuario llamadas en esa línea.. Step In. Avanzar un paso, y si en ese paso hay una llamada a una función cuyo fichero *.m está accesible, entra en dicha función. Step Out. Salir de la función que se está ejecutando en ese momento. Continue. Continuar la ejecución hasta el siguiente breakpoint Quit Debugging. Terminar la ejecución del Debugger. Stack En la parte derecha de la barra de herramientas aparece esta lista desplegable Stack. mediante la cual se puede elegir el contexto, es decir el espacio de trabajo o el ámbito de las variables que se quieren examinar. EL PROFILER El profiler es un programa de utilidad que permite saber cómo se ha empleado el tiempo de la CPU en la ejecución de un determinado programa. El profiler es una y útil p para determinar los cuellos de botella de un p programa, g , es herramienta muy decir las funciones y las líneas de código que más veces se llaman y que se llevan la mayor parte del tiempo de ejecución. Por ejemplo, es obvio que si se trata de mejorar la eficiencia de un programa, sería más importante mejorar una función que se llevase el 60% del tiempo total que otra que sólo se llevase el 2%. Dentro de la función más llamada, el profiler proporcina información sobre el tiempo que se lleva cada sentencia, y da también algunas orientaciones sobre las posibilidades de mejorarla. Preferencias: Formatos de salida y de otras opciones de MATLAB MATLAB 7.0 dispone p de un cuadro de diálogo g desde el q que se establecen casi todas las opciones que el usuario puede determinar por su cuenta. Este cuadro de diálogo se abre con el comando Preferences del menú File PATH DE MATLAB ESTABLECER EL CAMINO DE BÚSQUEDA (SEARCH PATH) El search path de MATLAB es una lista de directorios que se puede ver y modificar a partir de la línea de comandos, o utilizando el cuadro de diálogo Set Path, del menú File. El comando path que se escriba el search path de MATLAB (el resultado depende de en qué di t i esté directorio té instalado i t l d MATLAB; MATLAB se muestran t sólo ól unas pocas líneas lí d la de l respuesta t reall del programa) Uso del Help MATLAB 7.0 dispone de un excelente Help con el que se puede encontrar la información que se desee. >> help >> help lang >> help ‘function’ OPERACIONES CON MATRICES Y VECTORES • MATLAB es fundamentalmente un programa para cálculo matricial. matricial • Inicialmente se utilizará MATLAB como programa interactivo, donde se definirán: • • • • matrices vectores y expresiones que los combinan y obteniendo los resultados sobre la marcha. asignación i ió de d variables i bl • MATLAB sería como una potente calculadora matricial (en realidad es esto y mucho más ) más...) • Como en casi todos los lenguajes de programación, en MATLAB las matrices y vectores son variables que tienen nombres. nombres • Se sugiere que se utilicen letras mayúsculas para matrices y letras minúsculas para vectores y escalares (MATLAB no exige esto, pero puede resultar útil). • Para definir una matriz no hace falta declararlas o establecer de antemano su tamaño (de hecho, se puede definir un tamaño y cambiarlo posteriormente). •MATLAB determina el número de filas y de columnas en función del número de elementos que se proporcionan (o se utilizan). •Se pueden introducir las matrices en MATLAB de diferentes formas • • • Como una lista C li t explicita li it d de elementos l t Abrir matrices desde archivos de datos externos Generar matrices usando funciones (funciones predeterminadas) • Crear matrices con funciones creadas en archivos-M Las matrices se definen o introducen por filas Los elementos de una misma fila deben separarse por espacios o comas (,) Las filas se separan con intro o por caracteres punto y coma (;) Para indicar que es una matriz matriz, se debe introducir el arreglo entre corchetes cuadrados ([ ]) Por ejemplo, j p , el siguiente g comando define una matriz A de dimensión ((3×3): ) >> A=[1 2 3; 4 5 6; 7 8 9] Ejemplos A= 16 5 9 4 3 10 6 15 2 11 7 14 13 8 12 1 B= 16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1 A =[16 ,3,2 ,13; 5,10,11,8; 9,6,7,12;4,15,14,1] B = [16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1] C= [16 5 9 4] [ ; ; ; ] D=[16;3;2;13] C= 16 D= 16 3 2 13 5 9 4 Vectores y Matrices Matlab considera que todas las variables son matrices (vectores y escalares son casos particulares). Ejemplos de inicialización de vectores fila >> x=[1,2,3,5,7,11,13]; [1 2 3 5 7 11 13] [ 1 2 3 5 7 11 13 ] >> x=[1 2 3 5 7 11 13]; [ 1 2 3 5 7 11 13 ] >> y y=1:5; >> pares=2:2:10; >> imp_regr=9:-2:1; >> (5) 7 >>a(5)=7; [12345] [ 2 4 6 8 10 ] [97531] [00007] Vectores y Matrices Ejemplos de inicialización de vectores columna Vectores y Matrices Acceso a elementos de una matriz De forma similar a la notación utilizada en algebra matricial, en MATLAB, los elementos del renglón i y la columna j de la matriz A es denotada por A(i,j) >> A Modificación de datos en la matriz >>A(2,2) =4 A= 16 5 9 4 A= Matlab utiliza los paréntesis para acceder a elementos de la matriz • Los subíndices empiezan en 1 1, por lo tanto el primer elemento es A(1,1) >>A(2,2) ans = 10 3 4 6 15 2 11 7 14 13 8 12 1 Se pueden extraer renglones completos p y columnas completas p >>b=[A(1,1) A(1,2) A(1,3) A(1,4)] b= 16 3 2 13 Utilización del punto y coma (;) y de los dos puntos(:) Punto y coma (;) En las matrices p permite separar p las filas Al final de cada sentencias (de cada instrucción), se realiza la operación y/o la asignación pero no se muestra el resultado >> d=[6;3;2;1] ; >> Dos puntos(:) Este operador es muy importante en MATLAB y puede usarse de varias formas. Es importante practicar mucho, introduciendo todas las modificaciones que se le ocurran y haciendo pruebas abundantes (¡Probar es la mejor forma de aprender!). En cierta forma se podría decir que el operador (:) representa un rango: Sintaxis valor inicial : incremento valor inicial : valor final : valor final (por defecto el incremento es 1) Ejemplos Ejemplos >>x=1:2:10 >>x1=1:2:10 >>x2=1:-2:10 >>x=1:1.5:10 >>x1=1:2:10 >>x2=1:-2:10 Acceso a elementos de una matriz Recuérdese que MATLAB accede a los elementos de una matriz por medio de los índices de fila y de columna encerrados entre paréntesis y separados por una coma. Por ejemplo: >> A(2,3) ans = 11 El siguiente comando extrae los 3 primeros elementos de la 4ª fila: >> A(4, 1:3) Entonces en una matriz cuando se utiliza como índice, extrae un rango. >> A(1:4, 3) En una matriz, los dos puntos aislados representan "todos los elementos". >> A(2 A(2, :)) >> A(:, 4) Acceso a elementos de una matriz Se pueden extraer conjuntos disjuntos de filas utilizando corchetes [ ] >> A(:,[1 3 2 4]) >> A(: A(:,[1 [1 2 4]) >> A([1 2 4],:) El operador dos puntos (:) puede utilizarse en ambos lados del operador (=) Por ejemplo, P j l a continuación ti ió se va a definir d fi i una matriz t i id identidad tid d B d de ttamaño ñ 6 6×6 6 y se van a reemplazar filas de B por filas de A. Obsérvese que la siguiente secuencia de comandos sustituye las filas 2, 4 y 5 de B por las filas 1, 2 y 3 de A, >> B=eye(size(A)); >> B([2 4 5],:)=A(1:3,:) Se pueden realizar operaciones aún más complicadas, tales como la siguiente: >> B B=eye(size(A)); eye(size(A)); >> B(1:2,:)=[0 1; 1 0]*B(1:2,:) Acceso a elementos de una matriz Como nuevo ejemplo, ejemplo se va a ver la forma de invertir el orden de los elementos de un vector: x rand(1,5) >> x=rand(1,5) >> x=x(5:-1:1) Obsérvese que por haber utilizado paréntesis –en vez de corchetes– los valores generados por el operador (:) afectan a los índices del vector y no al valor de sus elementos. Para invertir el orden de las columnas de una matriz se puede hacer lo siguiente >>A(:,4:-1:1) Para invertir el orden de las filas de una matriz se puede hacer lo siguiente >>A(4:-1:1,:) >>A(4 1 1 4 1 1) >>A(4:-1:1,4:-1:1) A(:) representa un vector columna con las columnas de A una detrás de otra Expresiones Como la mayoría de lenguajes de programación, el lenguaje de MATLAB, proporciona expresiones matemáticas, pero a diferencia de la mayoría de lenguajes, estas expresiones implican el uso de matrices totalmente. MATLAB no requiere que se realice la declaración ó ni la dimensión ó de ningún tipo de variables. Cuando MATLAB encuentra un nombre de variable nueva nueva, crea automáticamente la variable y se asigna la cantidad adecuada de almacenamiento, por ejemplo: >> num_students = 25 Si la variable ya existe, existe MATLAB realiza los cambios de su contenido yy, si es necesario, realiza el almacenamiento. Por ejemplo: >> num_students = 80 Los nombres de las variables consisten de una letra, seguida de cualquier número de letras, dígitos o subrayados. MATLAB es sensible a mayúsculas y distingue entre mayúsculas y minúsculas. A y a no son la misma variable. >>N23a=12; >>a2_13_54_ere=3; USO DE VARIABLES Aunque los nombres de variables pueden ser de cualquier longitud, MATLAB utiliza sólo los primeros N caracteres del nombre (donde N es el número devuelto por la función namelengthmax), e ignora el resto. >>N = namelengthmax >>N = 63 Por lo tanto, es importante para que cada nombre de variable MATLAB, únicamente considera los primeros N caracteres para distinguir variables. La función de genvarname puede ser útil en la creación de nombres de variables válidas y únicas VARNAME = GENVARNAME (candidato) devuelve un nombre de variable válido VARNAME, construido a partir de la cadena CANDIDATO. Candidato puede ser una cadena o un matriz de una celda de cadenas >> genvarname('ok name' name','ok 'ok Name') >> genvarname({'ok name','ok Name'}) USO DE VARIABLES También se puede checar si el nombre de una variable es permitida (se permite)usando el comando isvarname. Como es común en los lenguajes de computación el 1 indica verdadero, y el 0 falso, entonces al emplear el puede ser 1 ó 0. Por ejemplo: j p comando isvarname el resultado p >> isvarname time ans = 1 >> isvarname mas mas--menos ans = 0 >> N23a=12; >> isvarname N23a Indica que time time, es una variable legitima Indica que mas-menos, es una variable no legitima Recordar que el guión no es un carácter permitido USO DE VARIABLES MATLAB reserva una lista de palabras clave para su uso. Estas palabras se recomienda no asignar como nombre de las variables. El comando iskeyword genera en MATLAB una lista con los nombres reservados para el programa. >> iskeyword ans = 'break' 'case' 'catch' 'classdef' 'continue' 'else' 'elseif' end 'end' 'for' 'function’ 'global' 'if' 'otherwise' 'parfor' persistent 'persistent' 'return' 'switch' try 'try' 'while' USO DE VARIABLES MATLAB también permite reasignar los nombres de funciones que tiene incorporadas, como nombres de variables. Por ejemplo, podría crear una nueva variable llamada sin con el comando: >> sin=5 i 5 sin = 5 Esto es claramente una práctica peligrosa, ya que la función sin ya no está disponible. Si se intenta utilizar la función sobre-escrita , se presentara un mensaje de error: >> sin(2) ??? Index exceeds matrix dimensions. Se puede comprobar si una variable es una función integrada de MATLAB MATLAB, utilizando el comando which >> >> which sin sin is a variable. >> clear sin >> which sin built-in (C:\Program Files\MATLAB\R2008a\toolbox\matlab\elfun\@double\sin) % double method Ejercicio Cuál de los siguientes nombres están permitidos en MATLAB?. Hacer sus predicciones, aplicando los comandos isvarname, iskeyword y which. 1. 1 2. 3. 4 4. 5. 6. 7. 8. 9. 10. 11. 12. Test test if my book my-book my_book cursomonograficodehidrologia enlamaestriaencienciasdelag l ti i i d l uadelauaem 1stgroup group_one zzaAbc y z34wAwy?12# sin log >> isvarname cursomonograficodehidrologiaenlam aestriaencienciasdelaguadelauaem ans = 0 >> isvarname cursomonograficodehidrologiaenlam aestriaencienciasdelagua ans = 1 Números • MATLAB de forma convencional utiliza notación decimal, sin embargo se puede utilizar notación científica (denotada por e). • También se pueden utilizar números imaginarios, considerando a i e j como el sufijo del número. Ejemplos de números validos 3 9.6397238 1i -99 1.60210e-20 -3.14159j 0.0001 6.02252e23 3e5i >> ima=5i >> ima=5j Todos T d llos números ú son almacenados l d iinternamente utilizando ili d ell fformato largo especificado por el IEEE, estándar de punto flotante. Números de punto flotante tienen una precisión finita de aproximadamente 16 dígitos decimales y un intervalo finito de aproximadamente 10-308 a 10 +308. Expresiones Operadores p MATLAB puede operar con matrices por medio de operadores y por medio de funciones. Los operadores aritméticos de uso común, que se utilizan en MATLAB son los siguientes: + – * ^ / ' \ .* ./ y .\ .^ adición o suma Operaciones sustracción o resta básicas (escalares) multiplicación y con matrices potenciación división-derecha d s ó de ec a ((normal) o a) traspuesta división-izquierda Operaciones especiales con producto elemento a elemento matrices división elemento a elemento elevar a una potencia elemento a elemento Matlab trabaja con matrices, a diferencia de otros lenguajes que sólo trabajan con escalares Operaciones básicas con escalares MATLAB maneja j las l operaciones i aritméticas it éti entre t dos d escalares l de d forma f más á sencilla que otros programas de computo e incluso que la calculadora >> a=1+2 También se pueden realizar operaciones básicas con valores de dos escalares asignados a variables y el resultado asignarse a otra variable, por ejemplo: >> a=1+2; >> b=5; >> x=a+b x= 8 El signo g = es considerado en MATLAB,, como el operador p de asignación. g Este operador es diferente cuando se considera como igualdad. >>x=x+1 x= 9 >>x==x+1 ans =< 0 >> x==9 ans = 1 Orden de las operaciones MATLAB emplea l ell mismo i orden d d de operaciones i utilizado tili d en algebra l b •Primero realiza los cálculos de los paréntesis, iniciando de adentro hacia afuera afuera. •Después realiza las operaciones de los exponentes •Se continua con las operaciones de multiplicaciones y/o división, realizándose de izquierda a derecha •Finalmente se realiza la adición y sustracción , también de izquierda a derecha. r Para entender P t d mejor j la l iimportancia t i d dell orden de operaciones. Realice los cálculos necesarios para obtener el área superficial del cilindro circular recto recto, utilice asignación de variables. Considere un radio de 5 cm y altura de 10 cm cm. Obtenga la superficie desarrollando diferentes combinaciones del orden de las operaciones. r2 + h 2rh r2 S=2r2+2rh S=2r(r+h) Ejercicio Resolver la siguiente ecuación, considerando x=9, a=1, b=3 y c=5 log( ax bx c) sin( ax bx c) f 4x 2 cos( x 2) * (ax 2 bx c) 2 2 Tomar en cuenta que log log, sin y cos son funciones elementales de MATLAB y se utilizan de la siguiente manera: sin (X) es el seno del argumento X. cos (X) es ell coseno del d l argumento t X log (X) es el logaritmo de base 10 del argumento X pi devuelve el valor de pi. SOLUCIÓN Se define PRIMERO LAS VARIABLES el polinomio y el denominador >> x=9; >> a=1; >> b=3; >> c=5; >> pol=a*x^2+b* pol=a*x^2+b*x+c x+c;; >> denom=4*pi*x^2+cos(x denom=4*pi*x^2+cos(x--2)* 2)*pol pol;; ))/denom denom >> f=(log(pol f=(log(pol))-sin(pol sin(pol))/ f= 0.004373777690856 Operaciones Básicas con arreglos (matrices) MATLAB es una excelente calculadora, pero su verdadera fuerza está en la manipulación de matrices. matrices. Como se ha visto, la declaración de matrices en MATLAB es sencillo.. Entonces, los operadores se aplican también a las matrices y su manipulación sencillo se realiza con variables o valores escalares, aunque con algunas diferencias. diferencias. Todos estos operadores son coherentes con las correspondientes operaciones matriciales.. matriciales No se puede por ejemplo sumar matrices que no sean del mismo tamaño (dimensión) (dimensión).. Si los operadores no se usan de modo correcto se obtiene un mensaje de error. error. Los operadores anteriores se pueden aplicar también de modo mixto mixto,, es decir con un operando escalar y otro matricial. matricial. La operación con el escalar se aplica a cada uno de los elementos de la matriz. matriz. Ej Ejemplo: Ejemplo l : >> A=[1 2; 3 4] A= 1 2 3 4 >> A*2 ans = 2 4 6 8 >> A-4 ans = -3 -2 -1 0 >> A=[1 2 12 25 ; 1 3 65 32; 32 32 2 5 ] A= 1 2 12 25 1 3 65 32 32 32 2 5 >> A*2 ans = 2 4 24 50 2 6 130 64 64 64 4 10 >> A-4 ans = -3 -2 8 21 -3 -1 61 28 28 28 -2 1 >> A^2 ??? Error using ==> mpower Matrix must be square. >> A.^2 ans = 1 1 1024 4 144 9 4225 1024 4 625 1024 25 >> B=A(1:3,1:3) B= 1 2 12 1 3 65 32 32 2 >> B^2 ans = 387 2084 128 >> B.^2 B ^2 ans = 1 1 1024 392 2091 224 166 337 2468 4 144 9 4225 1024 4 OPERADORES ELEMENTO A ELEMENTO En MATLAB existe también la posibilidad de aplicar elemento a elemento los operadores matriciales (*, ^, \ y /). Para ello basta precederlos por un punto (.). Por ejemplo: >> [1 2 3 4]^2 ??? Error using g ==> ^ Matrix must be square. >> [1 2 3 4].^2 ans = 1 4 9 16 >> [1 2 3 4]*[1 -1 1 -1] ??? Error using ==> * I Inner matrix t i dimensions di i mustt agree. >> [1 2 3 4].*[1 -1 1 -1] ans = 1 -2 3 -4 Tipos de datos MATLAB trabaja siempre en doble precisión, es decir guardando cada dato en 8 bytes, con unas 15 cifras decimales exactas. exactas También puede trabajar con cadenas de caracteres (strings) Desde la versión 5.0, también con otros tipos de datos: Matrices de más dos dimensiones Matrices dispersas p Vectores y matrices de celdas Estructuras Clases y objetos. Maneja correctamente los valores Inf (infinito) y NaN (not-a-number) Complejos automáticos Tipos de datos Matrices reales – double realmin2.2251e-308, realmax 1.7977e+308, eps 2.2204e-016 – single realmin 1.1755e-038, realmax 3.4028e+038, eps 1.1921e-007 • Matrices enteras – int8, uint8 – int16, uint16 – int32, uint32 – int64, uint64 • Otros –char h – logical–cell – struct Quizás las variables más interesantes –aparte de las variables por defecto, las double– sean las variables logical, que sólo pueden tomar los valores true (1) y false (0). (0) Las variables lógicas surgen como resultado de los operadores relacionales (==, <, <=, >, >=, ~=,) y de muchas funciones lógicas como any y all que se aplican a vectores y matrices, y que se verán mas adelante Tipos de datos La función logical(A) produce una variable lógica, con el mismo número de elementos que A, con valores 1 ó 0 según el correspondiente elementos de A sea distinto de cero o igual a cero. cero Una de las aplicaciones más importantes de las variables lógicas es para separar o extraer los elementos de una matriz o vector que cumplen cierta condición, y operar luego selectivamente sobre dichos elementos. Obsérvese, el siguiente ejemplo : >> A=magic(4) A= 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 >> j=A>10 >> A(j)=-10 Tipos de datos CADENAS DE CARACTERES MATLAB puede definir variables que contengan cadenas de caracteres. En MATLAB las cadenas de texto van entre apóstrofos o comillas simples (Nót (Nótese que en C van entre t comillas ill d bl dobles: " d "cadena"). ") Por P ejemplo, j l en MATLAB . >> s = 'cadena de caracteres‘ Las cadenas de texto tienen su más clara utilidad en temas que se verán más á adelante d l t Tipos de datos En muchos cálculos matriciales los datos y/ y/o los resultados no son reales sino complejos, con parte real y parte imaginaria. MATLAB trabaja sin ninguna dificultad con números complejos. Para ver como se representan por defecto los p j ejecútense j los siguientes g comandos . números complejos, >>a=sqrt(-4) a= 0 + 2.0000i >> 3 + 4j ans = 3.0000 + 4.0000i >> A = [1+2i 2+3i; -1+i 2-3i] >> A = [1 2; -1 2] + [2 3; 1 -3]*i necesario % En este caso el * es MATLAB dispone asimismo de la función complex, que crea un número complejo a partir de dos argumentos que representan la parte real e imaginaria como en el ejemplo siguiente: imaginaria, >> complex(1,2) Eliminación de variables Para eliminar las variables de la sesion de trabajo se utiliza el comando clear El comando clear tiene varias formas posibles: Clear sin argumentos, elimina todas las variables creadas previamente (excepto las variables globales). clear A, b borra las variables indicadas. clear l global l b l borra las variables globales. clear functions borra las funciones. clear all borra todas las variables, incluyendo las globales, y las funciones.) OTRAS FORMAS DE DEFINIR MATRICES MATLAB dispone de varias formas de definir matrices. matrices El introducirlas por teclado sólo es práctico en casos de pequeño tamaño y cuando no hay que repetir esa operación muchas veces. Recuérdese que en MATLAB no hace falta definir el tamaño de una matriz. Las matrices toman tamaño al ser definidas y este tamaño puede ser modificado por el usuario mediante adición y/o borrado de filas y columnas TIPOS DE MATRICES PREDEFINIDOS eye(4) zeros(3,5) zeros(4) ones(3) ones(2,4) linspace(x1,x2,n) logspace(d1,d2,n) rand(3) rand(2,5) forma la matriz unidad de tamaño (4×4) forma una matriz de ceros de tamaño (3×5) ídem de tamaño (4×4) forma una matriz de unos de tamaño (3×3) (3 3) idem de tamaño (2×4) genera un vector con n valores igualmente espaciados entre x1 y x2 genera un vector con n valores espaciados logarítmicamente entre 10^d1 y 10^d2. Si d2 es pi, los puntos se generan entre 10^d1 y pi forma una matriz de números aleatorios entre 0 y 1, con distribución uniforme, de tamaño (3×3) idem de tamaño (2×5) TIPOS DE MATRICES PREDEFINIDOS randn(4) forma una matriz de números aleatorios de tamaño (4×4), con di t ib ió normal,l de distribución d valor l medio di 0 y varianza i 1 1. magic(4) crea una matriz (4×4) con los números 1, 2, ... 4*4, con la propiedad de que todas las filas y columnas suman lo mismo hilb(5) crea una matriz de Hilbert de tamaño (5×5). La matriz de Hilbert es una matriz cuyos elementos (i (i,j) j) responden a la expresión (1/(i+j-1)). Esta es una matriz especialmente difícil de manejar por los grandes errores numéricos a los que conduce invhilb(5) crea directamente la inversa de la matriz de Hilbert kron(x,y) o ( ,y) p oduce una produce u a matriz at co con todos los os p productos oductos de los os e elementos e e tos de del vector x por los elementos del vector y. Equivalente a x'*y, donde x e y son vectores fila compan(pol) construye una matriz cuyo polinomio característico tiene como coeficientes los elementos del vector pol (ordenados de mayor grado a menor) vander(v) construye la matriz de Vandermonde a partir del vector v (las columnas son las potencias de los elementos de dicho vector) FORMACIÓN DE UNA MATRIZ A PARTIR DE OTRAS MATLAB ofrece f t bié la también l posibilidad ibilid d de d crear una matriz t i a partir ti de d matrices previas ya definidas, por varios posibles caminos: – recibiendo alguna de sus propiedades (como por ejemplo el tamaño), tamaño) – por composición de varias submatrices más pequeñas, – modificándola de alguna forma. A continuación se describen algunas de las funciones que crean una nueva matriz a partir de otra o de otras, comenzando por dos funciones auxiliares:) [m,n]=size(A) n length(x) n=length(x) zeros(size(A)) ones(size(A)) ( ( )) A=diag(x) x=diag(A) diag(diag(A)) devuelve el número de filas y de columnas de la matriz A. Si la matriz es cuadrada basta recoger el primer valorde retorno calcula el número de elementos de un vector x forma una matriz de ceros del mismo tamaño que una matriz A previamente creada ídem con unos forma una matriz diagonal A cuyos elementos diagonales son los elementos de un vector ya existente x forma un vector x a partir de los elementos de la diagonal de una matriz ya existente A crea una matriz diagonal a partir de la diagonal de la matriz A blkdiag(A,B) crea una matriz diagonal de submatrices a partir de las matrices que se le pasan como argumentos triu(A) forma una matriz triangular superior a partir de una matriz A (no tiene por qué ser cuadrada). Con un segundo argumento puede controlarse t l que se mantengan t o eliminen li i más á di diagonales l por encima o debajo de la diagonal principal. t il(A) tril(A) íd ídem con una matriz t i ttriangular i l iinferior f i rot90(A,k) Gira k*90 grados la matriz rectangular A en sentido antihorario. k es un entero que puede ser negativo negativo. Si se omite omite, se supone k=1 flipud(A) halla la matriz simétrica de A respecto de un eje horizontal fliplr(A) halla la matriz simétrica de A respecto de un eje vertical reshape(A,m,n) Cambia el tamaño de la matriz A devolviendo una matriz de tamaño m×n cuyas columnas se obtienen a partir de un vector formado por las columnas de A puestas una a continuación de otra. Si la matriz A tiene menos de m×n elementos se produce p un error. DEFINICIÓN DE VECTORES Y MATRICES MEDIANTE FUNCIONES Y DECLARACIONES También se pueden definir las matrices y vectores por medio de funciones de librería (las que se verán en la siguiente sección) y de funciones programadas p g por el usuario (q p (que también se verán más adelante). ) Operadores relacionales El lenguaje de programación de MATLAB dispone de los siguientes operadores relacionales: < > <= >= == ~= menor que mayor que menor o igual que mayor o igual que igual que distinto que q En MATLAB los operadores relacionales pueden aplicarse a vectores y matrices, y eso hace que tengan un significado especial. Operadores relacionales Al igual que en C, si una comparación se cumple el resultado es 1 (true), mientras i t que sii no se cumple l es 0 (f (false). l ) Recíprocamente, cualquier valor distinto de cero es considerado como true y ell cero equivale i l a false. f l La diferencia con C está en que cuando los operadores relacionales de MATLAB se aplican a dos matrices o vectores del mismo tamaño tamaño, la comparación se realiza elemento a elemento, y el resultado es otra matriz de unos y ceros del mismo tamaño Considérese el siguiente ejemplo como ilustración: >> A=[1 A [1 2;0 3]; B B=[4 [4 2;1 5]; >> A==B >> A~=B Operadores lógicos L operadores Los d ló lógicos i d de MATLAB son llos siguientes: i i t & and (función equivalente: and(A,B)). Se evalúan siempre ambos operandos, y el resultado es true sólo si ambos son true. true && and breve: si el primer operando es false ya no se evalúa el segundo, pues el resultado final ya no puede ser más que false. false | or (función equivalente: or(A,B)). Se evalúan siempre ambos operandos, y el resultado es false sólo si ambos son false. false || or breve: si el primer operando es true ya no se evalúa el segundo, pues el resultado final no puede ser más que true. ~ negación lógica (función equivalente: not(A)) xor(A,B) realiza un "or exclusivo", es decir,, devuelve 0 en el caso en que q ambos sean 1 ó ambos sean 0. Los operadores lógicos se combinan con los relacionales para poder comprobar el cumplimiento de condiciones múltiples. CONCATENACIÓN Es el proceso de adhesión a las matrices pequeñas para hacer matrices más grandes. De hecho, hemos creado una matriz mediante la concatenación de sus elementos. El par de corchetes, [], es el operador de concatenación. Por ejemplo, crear una matriz de 4-por-4 mágica. >> A=magic(4) A= 16 2 5 11 9 7 4 14 3 13 10 8 6 12 15 1 R li Realizar llas siguientes i i t operaciones i con lla matriz ti A >> B = [A A+32; A+48 A+16] El resultado es una matriz de 8x8, obtenida por la unión de 4 submatrices >> sum(B) Eliminar renglones y columnas Se puede eliminar un renglón o una columna con simplemente utilizar un par de corchetes cuadrados, de la siguiente manera: >> A=magic(4) >>X=A; A= 16 2 5 11 9 7 4 14 3 13 10 8 6 12 15 1 Entonces para eliminar la columna 2 de la matriz X X, se escribe escribe. >>X(:,2)=[]; x= 16 3 13 5 10 8 9 6 12 4 15 1 CARACTERES ESPECIALES [] Paréntesis cuadrados se utilizan para formar vectores y matrices {} Las llaves se utilizan en instrucciones de asignación de una matriz por celdas Por ejemplo, A(2,1) = {[1 2 3; 4 5 6]}, or A{2,2} = ('str'). () Los paréntesis se usan para indicar precedencia en expresiones aritméticas en la forma habitual. Se usan para encerrar los argumentos de las funciones de la forma habitual. También se utilizan para encerrar los subíndices de los vectores y matrices de manera más general que de costumbre costumbre, por ejemplo: Si X y V son vectores, entonces X (V) es [X (V(1)), X (V (2)), ..., X (V (n))]. Los componentes de la V deben ser números enteros para ser utilizado como subíndices = Se utiliza en instrucciones de asignación. B = A, B almacena los elementos de A. == es el operador de igualdad. ' Se utiliza para obtener la transpuesta de una matriz. . Punto decimal, se utiliza para operaciones elemento a elemento con los siguientes caracteres .* , .^, ./, / ó .\. \ Acceso al campo S (m).f cuando S es una estructura, se tiene acceso a los contenidos del campo f de esa estructura .( ) acceso dinámico de S.( S.(df df)) cuando S es una estructura, se tiene acceso a los contenidos del campo dinamico df de esa estructura. Nombres de los campos dinámicos son definidos durante el tiempo de ejecución CARACTERES ESPECIALES .. Directorio raíz, raíz también se utiliza (cd) ... Continuación. Tres o más puntos al final de una línea indica que la función actual sigue g en la línea siguiente. g , Coma. Se utiliza para separar los subíndices de la matriz y los argumentos de una función. ; Punto y coma. Utilizados en el interior de una expresión entre paréntesis para indicar fin a las filas. Si se utiliza después de una expresión o una declaración, se suprime la impresión de estas en pantalla. : Crea vectores, arreglos con subíndices y para las iteraciones de un bucle. El símbolo de porcentaje denota un comentario, es decir, indica un fin lógico de la línea. Cualquier texto que sigue del símbolo es ignorado. También en archivos creados en MATLAB, al ejecutarse se muestra las primeras líneas de comentarios contiguos en un archivo-m en respuesta a un comando de ayuda. %{%} { } Por ciento-llave. El texto incluido en los símbolos %{y%} {y } es un bloque q de comentario. Se utilizan estos símbolos para insertar comentarios que ocupan más de una línea en un archivo-m (código). % CARACTERES ESPECIALES ! Signo de exclamación exclamación. Indica que el resto de la línea de entrada se considera como un comando del sistema operativo. @ Identificador Id ifi d d de ffunción ió ((arroba). b ) Los L datos d de d MATLAB precedidos did d de este identificador, indica que se tratan de una función,(handle = @functionname) ejemplo sqr = @(x) x.^2; Manipulación de matrices Funciones de concatenación de Matrices Las siguientes funciones se combinan con las matrices ya existentes para formar una nueva matriz. C Cat C Concatena arreglos l a llo llargo d de una di dimensión ió especifica ifi Descripción sintaxis C = cat(dim, ( , A,, B)) C = cat(dim, A1, A2, A3, A4, ...) Ej Ejemplo: l d dar llos siguientes i i t arreglos l A= 1 3 B= 2 4 5 7 6 8 C = cat(dim, A, B) Concatena A y B en la dimensión dim C = cat(dim, A1, A2, A3, A4, ...) concatena todos los arreglos de entrada (A1, A2, A3 A4, A3, A4 etc.) etc ) en la dimensión dim. Aplicar la concatenación para producir las diferentes dimensiones >>C=cat(1,A,B) >>D=cat(2,A,B) >>E=cat(3,A,B) Funciones de concatenación de Matrices horzcat Concatena arreglos g horizontalmente Sintaxis: C = horzcat(A1, A2, ...) Ejemplo >> A = magic(5); % crea una matriz de 3-by-5 >> A(4:5,:) = [] >> B = magic(3)*100 i (3)*100 % crea una matriz ti d de 3 3-by-3 b 3 >> C = horzcat(A, B) vertcat Concatena arreglos verticalmente Si t i Sintaxis: C = horzcat(A1, h t(A1 A2 A2, ...)) Ejemplo j p >> C = vertcat(A,B) Funciones de concatenación de Matrices repmat p crea una matriz reproduciendo p los datos de una matriz dada ((copia p la matriz, concatenándola de acuerdo a las dimensión) Sintaxis: B = repmat(A,m,n) B = repmat(A,[m n]) B = repmat(A,[m n p...] Ejemplo B= 1 0 0 1 >>C = repmat(B,3,4) Ejemplo >>N = repmat(NaN,[2 3]) C= 1 0 1 0 1 0 0 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 1 0 1 0 1 0 N= NaN NaN NaN NaN NaN NaN 0 1 0 1 0 1 Funciones de concatenación de Matrices blkdiag Construye una matriz diagonal, con los datos de entrada del bloque de matrices Sintaxis: out = blkdiag(a,b,c,d,...) donde a, b, c, d, ... son las matrices, el resultado del bloque matrices en diagonal es de la forma Ejemplo j p >> A = magic(2); >> B = rand(2); >> C = A+B; >>D= blkdiag(A,B,C) D= 1.0000 4.0000 0 0 0 0 3.0000 0 0 2.0000 0 0 0 0.0196 0.3795 0 0.6813 0.8318 0 0 0 1.0196 0 0 0 4.6813 0 0 0 0 0 0 0 0 3.3795 2.8318 Indexación de Matrices Acceso a los elementos individuales Para hacer referencia a un elemento en particular de una matriz, es necesario especificar su número de fila y columna con la siguiente sintaxis, donde A es la variable de matriz matriz. Siempre se especifica primero la fila y después la columna: A(row, column) Indexación lineal Se refiere a los elementos de una matriz de MATLAB con un subíndice único, A (k) MATLAB almacena (k). l llas matrices ti y llos arreglos l no d de lla fforma en que aparecen cuando se muestra en la ventana de comandos de MATLAB, sino como una sola columna de elementos. Esta columna está compuesta por todas las columnas de la matriz matriz, cada una se anexa a la última última. >>A = [2 6 9; 4 2 8; 3 5 1] >>A = 2 6 9 4 2 8 3 5 1 ventana de comandos >> A(:) >>2 4 >>2, 4, 3, 3 6 6, 2 2, 5 5, 9 9, 8 8, 1 Forma en como se almacena en memoria >> A(6) >> A(3,2) ans = ans = 5 5 MATLAB calcula un índice en la columna de almacenamiento basado en las di dimensiones i que h ha asignado i d a lla matriz. ti Por ejemplo, supongamos una matriz de dos dimensiones, es decir A tiene el tamaño [d1 d2], d2] donde d1 es el número de filas en la matriz y d2 es el número de columnas. Si se proporciona dos subíndices (i, (i j) j), que representa los índices de fila de columnas, el índice de la columna de almacenamiento es: (j (j--1)) * d1 + i Por ejemplo, para obtener A (3,2), MATLAB calcula el índice en la columna de almacenamiento l i t d de A como (2-1) (2 1) * 3 + 3 3, igual i la6 6. E Este t es ell elemento l t seis i en lla columna accesando da el valor 5. Funciones de Control de Estilo de indexación función sub2ind, ind2sub Si se tiene subíndices en fila y columna, pero desea utilizar la indexación lineal en su l lugar, se puede d convertir ti a este t último últi con esta t función. f ió Por ejemplo: >> linearindex = sub2ind(size(A), 3, 2) linearindex = 6 Para obtener la fila y la columna equivalente a un índice lineal >> [[row col]] = ind2sub(size(A), ( ( ), 6)) row = 3 col = 2 Acceso a múltiples elementos >> A = magic(4); magic(4); A(1,4) + A(2,4) + A(3,4) + A(4,4) ans = 34 A(1:m, n) Acceso a elementos no consecutivos >> B = A; B(1:3:16) = -10 B= -10 2 3 -10 5 11 -10 8 9 -10 6 12 -10 14 15 -10 El uso de end >> B(1:3:end) = -10 >> A = 5:5:50 A= 5 10 15 20 25 >> B = [1 3 6 7 10]; >> A(B) ans = 5 15 30 35 50 30 35 40 45 50 Uso de la función find Encuentra los índices y valores de los elementos distintos de cero Sintaxis: ind = find(X) ind = find(X, k) i d = fi ind find(X, d(X kk, 'fi 'first') t') ind = find(X, k, 'last') [row,col] = find(X, ...) [row col v] = find(X [row,col,v] find(X, ...)) ind = find (X) localiza todos los elementos distintos de cero de X, y devuelve los índices lineales de los elementos en el vector ind. ind Si X es un vector fila fila, entonces ind es un vector fila, de lo contrario, ind es un vector de columna. p ) devuelve en la mayoría y de los p primeros ind = find ((X,, K)) o ind = find ((X,, K,, "primero") índices k correspondientes a los elementos no nulos de X. k debe ser un entero positivo, pero puede ser de cualquier tipo de datos numéricos. [fila, columna] = find (X, ...) Devuelve la fila y la columna de los índices de los elementos no nulos en la matriz X. [row, col, v] = find (X, ...) devuelve un vector v columna o fila de las entradas de cero en X, así como los índices de fila y columna Ejemplo 1 >> A= magic(4) >> find(A>10) ans = 1 6 8 12 13 15 A= 16 2 5 11 9 7 4 14 3 13 10 8 6 12 15 1 Ej Ejemplo l 2 >> X = [1 0 4 -3 0 0 0 8 6] X= 1 0 4 -3 0 0 >> indices = find(X) indices = 1 3 4 8 9 >> [r,c,v]= find(A>10); >> r', c', v‘ ans = 1 2 4 4 1 ans = 1 2 2 3 4 ans = 1 1 1 1 1 Ejemplo 3 0 8 6 >> find(X > 2) ans = 3 8 9 ( ), [r,c,v] = find(X) r= 1 1 1 1 c= 1 3 4 8 v= 1 4 -3 8 1 9 6 3 4 1 Ejemplo 4 Ejemplo 5 >> find(M > 3, 4) >> [r,c,v] = find(X>2) r= 1 1 1 c= 3 8 9 v= 1 1 1 >> M = magic(3) M= 8 1 6 3 5 7 4 9 2 ans = Practica con archivo de excel 1 3 5 6