Your SlideShare is downloading. ×
0
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Matlab2
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Matlab2

2,605

Published on

presentacion que te ayudara a comprender el MATLAB

presentacion que te ayudara a comprender el MATLAB

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,605
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
121
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. UNIVERSIDAD FRANCISCO DE PAULA SANTANDER FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA Ing. José Armando Becerra Vargas Docente Tiempo Completo
  • 2. <ul><li>Matlab es una herramienta para hacer cálculos matemáticos .Su nombre significa laboratorio de matrices y fue escrito inicialmente en base a los ya existente paquetes de calculo matricial LINPACK y EISPACK. </li></ul><ul><li>Es al mismo tiempo un entorno y un lenguaje de programación. </li></ul><ul><li>Permite construir nuestras propias herramientas re-usables . </li></ul><ul><li>Podemos crear funciones y programas especiales ( archivos M–file) en código Matlab. </li></ul><ul><li>Los programas se pueden agrupar en toolbox ( colecciones de archivos M-file) para trabajar en clases particulares de problemas </li></ul><ul><li>En síntesis, Matlab es una plataforma de desarrollo de aplicaciones, donde conjuntos de herramientas inteligentes para la resolución de problemas en áreas de aplicación específica, comúnmente llamadas toolboxes o librerías, se pueden desarrollar con relativa facilidad. </li></ul>
  • 3. <ul><li>Calculo matricial y álgebra lineal </li></ul><ul><li>Polinomios e interpolación </li></ul><ul><li>Regresión </li></ul><ul><li>Ajuste de funciones </li></ul><ul><li>Ecuaciones diferenciales ordinarias </li></ul><ul><li>Integración funciones </li></ul><ul><li>Gráficos bi y tri-dimensionales </li></ul>
  • 4.  
  • 5. <ul><li>Método para procesar datos: </li></ul><ul><ul><li>El usuario escribe expresiones en la ventana de comandos, o bien en un archivo m-file </li></ul></ul><ul><ul><li>tras la ejecución ENTER ( o escribir el nombre del fichero) , Matlab procesa la información </li></ul></ul><ul><ul><li>Matlab escribe los resultados en la ventana de comandos y los gráficos (si los hubiere) en otras ventanas graficas </li></ul></ul>
  • 6. Ventana principal de Matlab: Command windows
  • 7. <ul><li>Matlab no tiene en cuenta los espacios en blanco. </li></ul><ul><li>Al escribir una línea el punto y coma (;) le dice al programa que evalué la línea pero que no muestre el resultado </li></ul><ul><li>Si el escrito es muy largo y se necesita cambiar de línea se coloca (…) una elipsis consistente en tres puntos seguido de un ENTER para indicar que la sentencia continua en la línea siguiente </li></ul>Matlab ofrece las siguientes operaciones básicas: Su precedencia es así: ^ > / , * > + , -
  • 8. Una vez que hemos creado una o una serie de variables podemos preguntar a Matlab por ellas con la orden who la cual nos mostrara una lita de las variables que hemos usado. Si queremos recordar el valor de una variable debemos introducir su nombre y a continuación la orden de petición. Si deseamos ver ordenes previas, podemos acceder a ellas por medio de las teclas del cursor del teclado.
  • 9. Para guardar todas las variables actuales: vamos al menú File y elegimos la opción Save Workspace as. Usamos Load Workspace, para cargar variables de un espacio de trabajo guardado previamente.
  • 10. Matlab no cambia la presentación interna de un número cuando se escogen distintos formatos; solo modifica la visualización del número.
  • 11. Por defecto Matlab, almacena resultados en la variable ans. Las variables son sensibles a las mayúsculas y pueden contener hasta 19 caracteres. Deben comenzar con una letra. Cuando Matlab realiza un cálculo, lo hace utilizando los valores que conoce del momento en que se evaluó la orden pedida. Mediante la orden clear podemos borrar las variables en el espacio de trabajo.
  • 12. <ul><li>Para escribir comentarios, se ponen después del signo tanto por ciento (%) </li></ul><ul><li>Podemos colocar órdenes múltiples en una línea si se separan por comas o puntos y comas .Las comas le dicen a Matlab que visualice los resultados, los puntos y comas suprimen la impresión de los resultados. </li></ul><ul><li>Para interrumpir Matlab en cualquier momento: Ctrl-C </li></ul><ul><li>La orden quit termina Matlab. </li></ul>
  • 13.  
  • 14.  
  • 15.  
  • 16. Matlab sigue el convenio usual, donde un numero complejo se escribe como (a + bi). La terminación con los caracteres i y j solo funciona con números simples, no con expresiones. Las operaciones matemáticas con números complejos se escriben igual que con números reales. Las funciones real, imag, angle y abs son útiles para la conversión entre las formas rectangular y polar.
  • 17. <ul><li>Matlab proporciona asistencia a sus capacidades a través de varias formas, así: </li></ul><ul><li>La orden “HELP” </li></ul><ul><li>La orden “LOOKFOR” </li></ul><ul><li>Menú de “Ayuda” </li></ul><ul><li>En la versión 7 del programa se puede acceder a la ayuda por medio del botón “START” que se localiza en la parte inferior izquierda. </li></ul><ul><li>Buen dominio de idioma Ingles </li></ul>
  • 18. <ul><li>Escribiendo: </li></ul><ul><li>help tema proporciona ayuda acerca del tema, si existe. </li></ul><ul><li>También proporciona ayuda escribiendo simplemente help. </li></ul>
  • 19. <ul><li>Proporciona ayuda buscando a través de todas las primeras líneas de las ayudas a temas de Matlab y devolviendo aquellos que contienen la palabra que se busca, esta palabra no necesita ser una orden de Matlab. </li></ul>
  • 20. <ul><li>El menú desplegable “HELP” proporciona vínculos a distintas formas de ayuda, incluyendo recursos disponibles en Internet, algunos tan útiles como el intercambio de archivos con otros usuarios de Matlab. </li></ul>
  • 21.  
  • 22. <ul><li>Arrays simples </li></ul><ul><li>Direccionamiento de arrays </li></ul><ul><li>Construcción de arrays </li></ul><ul><li>Matemáticas con arrays de escalares </li></ul><ul><li>Matemáticas con arrays de arrays </li></ul><ul><li>Orientación de los arrays </li></ul><ul><li>Otras características </li></ul>
  • 23. <ul><li>Para crear un array en Matlab iniciamos con un paréntesis cuadrado, introducimos los valores deseados separados por espacios ó comas y cerramos con un paréntesis cuadrado, así: </li></ul><ul><li>Variable=[ lista de números separados por espacios ó comas ] </li></ul>
  • 24. <ul><li>Existen varias formas de direccionar un arreglo en Matlab, como se ilustra en el ejemplo: </li></ul><ul><ul><li>X = [2 , 4 , 6 , 8 , 10 , 12 ,14 ] </li></ul></ul><ul><ul><li>X(1) = 2 </li></ul></ul><ul><ul><li>X(4) = 8 </li></ul></ul><ul><ul><li>X(2:5) = 4 , 6 , 8 , 10 </li></ul></ul><ul><ul><li>X(2:2:7) = 4 , 8 , 12 </li></ul></ul><ul><ul><li>X([2 4 5 7]) = 4 , 8 , 10 , 1 4 </li></ul></ul>
  • 25. <ul><li>Otras formas de crear un array son: </li></ul><ul><li>Mediante la notación dos puntos, (0 : 0.1 : 1) se crea un array que inicia en cero, incrementa 0.1 y finaliza en 1. </li></ul><ul><li>Mediante las funciones linspace y logspace con la siguiente gramática para las funciones: </li></ul><ul><li>linspace(primer_termino , ultimo_termino , número de valores) </li></ul><ul><ul><li>logspace(primer_termino , ultimo_termino , número de valores) </li></ul></ul>
  • 26. <ul><li>Las operaciones matemáticas sencillas entre escalares y arrays siguen una interpretación natural, es decir, se aplica la operación a todos los elementos del array. </li></ul>
  • 27. <ul><li>Cuando dos arrays tienen la misma longitud y orientación, la suma, resta, división y multiplicación se aplican sobre la base de elemento-a-elemento. </li></ul><ul><li>Para multiplicar dos arrays elemento a elemento su usa el operador .* ya que si se utiliza solamente el operador * se obtendría la multiplicación matricial, lo mismo ocurre con la división y la potencia de un array. </li></ul><ul><li>Se pueden combinar operaciones escalares y de arrays. </li></ul>
  • 28. <ul><li>Separar elementos por espacios o comas (,) especifica elementos en distintas columnas ( vector fila ); separar elementos por puntos y comas (;) especifica elementos en distintas filas ( vector columna ). </li></ul><ul><li>Usando el operador transpuesta (‘) podemos pasar de vector fila a vector columna y viceversa. </li></ul><ul><li>En el caso de un array complejo la transpuesta (‘) da la transpuesta compleja conjugada. La transpuesta punto (.’) transpone el array pero no lo conjuga. </li></ul>
  • 29. <ul><li>La creación de matrices (orientación rectangular ) sigue la misma estructura de los vectores fila y columna. </li></ul><ul><li>Además de los puntos y comas, pulsando la tecla “ ENTER ” cuando se está introduciendo una matriz, también le dice a Matlab que comience una nueva fila. </li></ul><ul><li>Una matriz puede tener múltiples filas, pero cada fila debe tener un número igual de columnas. </li></ul>
  • 30. <ul><li>Para obtener información adicional sobre los arrays se puede utilizar la orden </li></ul><ul><li>“ WHO ” </li></ul>
  • 31. <ul><li>Primero se crean los valores para el eje horizontal x (Variable independiente), a continuación se calcula el eje vertical y (Variable dependiente); la orden “ plot ” genera la gráfica: </li></ul><ul><li>plot (x,y) </li></ul>
  • 32. <ul><li>Superponer gráficas sobre los mismos ejes: </li></ul><ul><li>plot(x,y,x,z) </li></ul><ul><li>Usar distintos tipos de líneas para el dibujo de la gráfica: </li></ul><ul><li>plot(x,y,’+’) </li></ul><ul><li>Etiqueta sobre el eje x de la gráfica actual: </li></ul><ul><li>xlabel(‘ texto ’) </li></ul>
  • 33. <ul><li>Etiqueta sobre el eje y de la gráfica actual: </li></ul><ul><li>ylabel(‘ texto ’) </li></ul><ul><li>Titulo en la cabecera de la gráfica actual: </li></ul><ul><li>title(‘ texto ’) </li></ul><ul><li>Dibujar una rejilla: </li></ul><ul><li>grid </li></ul>
  • 34. <ul><li>MATLAB proporciona un completo lenguaje de programación que permite escribir una serie de sentencias dentro de un archivo M para luego ejecutarlo con un simple comando. </li></ul><ul><li>Los scripts son el más simple tipo de archivo M porque estos no tienen argumentos de entrada ni salida. </li></ul><ul><li>Son útiles para automatizar una serie de pasos que necesiten ser realizados varias veces. </li></ul><ul><li>Almacenan las variables en un espacio de trabajo que es compartido con otros scripts y con la interfaz de línea de comandos de MATLAB. </li></ul>
  • 35. <ul><li>Para crear un script podemos ir al menú File>>New>>M-file u oprimir las teclas Ctrl+n </li></ul><ul><li>Al finalizar el archivo se debe guardar con la extensión .m </li></ul><ul><li>Para ejecutar las sentencias del script escribimos el nombre del archivo (sin extensión) en la línea de comandos. </li></ul><ul><li>Ya que los scrips comparten el espacio de trabajo, tienen la capacidad de modificar las variables preexistentes y agregas nuevas, por lo tanto se debe tener cierta precaución con estos para evitar sobre-escrituras involuntarias </li></ul>
  • 36. <ul><li>Algunos comando importantes son: </li></ul>edit nombre_archivo Sirve para modificar scripts existentes. echo on nombre_archivo Permiten visualizar las sentencias al interior de este en la línea de comandos a medida que son ejecutadas. echo off nombre_archivo Desactiva echo on what Muestra todos los archivos .m del directorio actual type nombre_archivo Muestra el contenido del archivo en la línea de comandos delete nombre_archivo .m Elimina el archivo cd Muestra el directorio de trabajo actual which nombre_archivo Muestra la ruta de acceso al archivo
  • 37. <ul><li>Una cadena de caracteres o string es un texto entre comillas sencillas así: </li></ul><ul><ul><li>‘ Esto es una cadena’ </li></ul></ul><ul><li>Un string es en realidad un vector fila cuyos componentes son los códigos numéricos para los caracteres (los primeros 127 códigos son ASCII), por lo tanto es posible hacer las mismas operaciones que con los arreglos. </li></ul><ul><li>Los caracteres mostrados dependen de su codificación para una fuente dada y cualquier elemento fuera del rango desde 0 hasta 65535 no esta definido ( pudiendo variar de acuerdo a la plataforma). </li></ul><ul><li>La longitud de una cadena es igual a su numero de caracteres. Una comilla dentro de la cadena es indicada por dos comillas. </li></ul>
  • 38. <ul><li>Las operaciones más comunes sobre las cadenas de caracteres son: </li></ul>S = [S1 S2 ...] Concatena las cadenas S1, S2, etc. en una nueva cadena, S. char(S) Puede ser usado para convertir un arreglo X de enteros positivos en un arreglo con los respectivos caracteres. char(S1,S2,S3,..) Forma un arreglo de caracteres conteniendo el texto de S1,S2,S3,... como columnas. Automáticamente rellena cada cadena con espacios para conformar una matriz valida. double(S) Convierte el arreglo a su equivalente código numérico. ischar(S) Dice si S es un arreglo de caracteres.
  • 39. <ul><li>MATLAB proporciona los siguientes operadores relacionales: </li></ul>Estos operadores dan un valor de 1 lógico si la relación es verdadera y 0 lógico donde la relación es falsa. < Menor que <= Menor que o igual a > Mayor que >= Mayor que o igual a == Igual a ~= Diferente a
  • 40. <ul><li>MATLAB ofrece dos tipos de operadores lógicos. </li></ul><ul><li>Si tenemos dos arreglos A = [0 1 1 0 1]; y B = [1 1 0 0 1]; entonces: </li></ul><ul><ul><li>Element-wise — opera sobre elementos correspondientes de arreglos lógicos. </li></ul></ul>& Retorna 1 para cada posición de un elemento que es verdadera en ambos arreglos, y 0 para todos los otros elementos. A & B = 01001 | Retorna 1 para cada posición de un elemento que es verdadera en alguno de los dos o ambos arreglos, y 0 para todos los otros elementos. A | B = 11101 ~ Complementa cada elemento del arreglo, A. ~A = 10010 xor Retorna 1 para cada posición de un elemento que es verdadera en uno solo de los arreglos, y 0 para todos los otros elementos xor(A,B) = 10100
  • 41. <ul><li>Tanto para las operaciones relacionales, como para las lógicas hasta aquí se aplican los siguientes: </li></ul><ul><ul><li>Cualquier valor diferente a cero es evaluado como 1 (verdadero) </li></ul></ul><ul><ul><li>En caso de comparación entre arreglos o matrices es necesario que estos sean de la misma dimensión ya que la comparación se hace elemento por elemento. </li></ul></ul><ul><ul><li>En caso que la comparación se realice entre un arreglo o matriz y un escalar, este último se comparara con cada elemento del otro operando, generando así un resultado del mismo tamaño del arreglo o matriz. </li></ul></ul>
  • 42. <ul><ul><li>Short-circuit — opera sobre escalares, expresiones lógicas. </li></ul></ul><ul><ul><li>Los operadores AND y OR se efectúan sobre expresiones lógicas que contienen valores escalares. Son operadores de short-circuit ya que evalúan el segundo operando solo cuando el resultado no es completamente determinado por el primer operando. </li></ul></ul>Si se introducen las palabras false o true en algún punto, esta se reemplazará por un 0 o 1 respectivamente. && Retorna 1 lógico (true) si ambas entradas se evalúan a verdadero, y 0 lógico 0 (false) si no lo hacen. || Retorna 1 lógico (true) si alguna entrada, o ambas, evalúan a verdadero, y 0 lógico (false) si no lo hacen.
  • 43. <ul><li>Es posible construir expresiones que usen cualquier combinación de aritmética operadores lógicos y relaciónales. Los niveles de precedencia determinan el orden el que MATLAB evalúa una expresión. En cada nivel de precedencia, los operadores tienen la misma precedencia y son evaluados de izquierda a derecha. Esta lista ordena del máximo al mínimo nivel de precedencia: </li></ul>1 Parentheses () 2 Transpose (.'), power (.^), complex conjugate transpose (’), matrix power(^) 3 Unary plus (+), unary minus (-), logical negation (~) 4 Multiplication (.*), right division (./), left division (.), matriz multiplication (*), matrix right division (/), matrix left division () 5 Addition (+), subtraction (-) 6 Colon operator (:) 7 Less than (<), less than or equal to (<=), greater than (>), greater than or equal to (>=), equal to (==), not equal to (~=) 8 Element-wise AND (&) 9 Element-wise OR (|) 10 Short-circuit AND (&&) 11 Short-circuit OR (||)
  • 44. Manejo de matrices Manipulación Matricial <ul><li>Los elementos matriciales se direccionan en el formato fila, columna: A (filas, columnas) </li></ul><ul><li>Las matrices se introducen de una manera directa. Ej: >> A = [1 2 3; 4 5 6; 7 8 9] </li></ul><ul><li>A = 1 2 3 </li></ul><ul><li>4 5 6 </li></ul><ul><li>7 8 9 </li></ul><ul><li>Los puntos y comas separan las filas de la matriz, mientras que los elementos de la misma fila deben separarse mediante un espacio en blanco (o una coma). </li></ul>En Matlab todas las variables representan matrices. Los escalares son matrices 1x1: De hecho la palabra MATLAB es una sigla: Matrix Laboratory.
  • 45. <ul><li>Utilizar el símbolo dos puntos como la designación de filas o columnas implica, respectivamente, todas las filas o columnas; por ejemplo, A(:,1) representa todas las filas en la columna 1 </li></ul><ul><li>Ej:>>B=[1 4 7]; </li></ul><ul><li>>>A(2,:)=B </li></ul><ul><li>A= 1 2 3 </li></ul><ul><li>1 4 7 </li></ul><ul><li>7 8 9 </li></ul><ul><li>Podemos trabajar con los elementos de una matriz de diversas maneras: </li></ul><ul><ul><li>Valores internos a una matriz se acceden identificando los subíndices de los elementos deseados. </li></ul></ul><ul><li>Ej: >> A(2,3) = 6 </li></ul><ul><ul><li>Se puede seleccionar una submatriz de A, indicando fila inicial y final, y columna inicial y final de la sub-matriz: </li></ul></ul><ul><li>Ej1: >>A(1:2,2:3) Ej2:>>A([1 3],[1 3] </li></ul><ul><li>ans= 2 3 ans= 1 3 </li></ul><ul><li>5 6 7 9 </li></ul>Usar sólo los dos puntos, por ejemplo, A(:), reagrupa una matriz en un vector columna, tomando todas las columnas a un tiempo. >> A(:) ans = 1 1 7 2 4 8 3 7 9
  • 46. Operaciones con Matrices <ul><li>+ Sumar </li></ul><ul><li>Restar </li></ul><ul><li>* Multiplicación </li></ul><ul><li>^ Elevar a una potencia </li></ul><ul><li>´ Transpuesta conjugada </li></ul>Ej: >> B = [1 2; 3 4]; >> C = B’ %C es la transpuesta de B C = 1 3 2 4 >> 3*(B*C)^3 %3(BC)^3 ans = 13080 29568 29568 66840
  • 47. Operaciones que se realizan elemento a elemento Las operaciones matriciales de suma resta y producto por un escalar se realizan elemento a elemento, lo que no ocurre con las operaciones matriciales de multiplicación división y potenciación. Estas tres operaciones pueden realizarse elemento a elemento si anteponemos un punto al símbolo correspondiente: .* , ./ y .^ Ej: >> A=[1 2; 3 4]; A^2 %Calcula el producto AA ans= 7 10 15 22 Ej: >> A=[1 2; 3 4]; A.^2 %Eleva al cuadrado cada elemento de A ans= 1 4 9 16 Ej: >> A=[1 2; 3 4]; cos (A./2) %divide cada elemento de a entre 2 y, después, calcula el coseno ans= 0.8776 0.5403 0.0707 -0.4161
  • 48. <ul><li>size devuelve el número de filas y de columnas de una matriz </li></ul><ul><li>length devuelve la longitud de un vector o la máxima dimensión de una matriz </li></ul><ul><li>inv (A) calcula la inversa de la matriz A </li></ul><ul><li>A’ es la transpuesta de la matriz A </li></ul><ul><li>d=eig(A) devuelve los valores propios asociados con la matriz A cuadrada como un vector columna </li></ul><ul><li>[V,D]=eig(A) devuelve vectores propios en la matriz V y los valores propios como elementos diagonales en la matriz D </li></ul><ul><li>rank(A) devuelve el rango de la matiz A </li></ul><ul><li>norm(A) Calcula la norma de la matriz A. admite el calculo de norma -1, norma-2, norma-∞ </li></ul><ul><li>poly(A) encuentra el polinomio característico asociado con la matriz cuadrada A </li></ul><ul><li>flipud(A) Intercambia una matriz de arriba a bajo </li></ul><ul><li>fliplr(A) Intercambia una matriz de izquierda a derecha </li></ul><ul><li>rot90(A) gira una matriz en dirección contraria a las manecillas del reloj </li></ul><ul><li>diag(v) crea una matriz diagonal, con el vector v sobre la diagonal </li></ul><ul><li>diag(A) extrae la diagonal de la matriz A como un vector columna </li></ul>Funciones de Matlab para manejo de matrices
  • 49.  
  • 50. Matrices especiales Podemos generar algunas matrices especiales usando funciones ya incorporadas: zeros(n) : Matriz de ceros ( n x n ). >>Z=zeros(3); %crea una matriz de ceros de orden 3 ans = 0 0 0 0 0 0 0 0 0 ones(n,m) : Matriz de unos ( n x m ) >>X=ones(3,5); %crea una matriz de unos de orden 3x5 ans = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 rand(n,m): Matriz ( n x m ) de números aleatorios distribuidos uniformemente entre 0 y1 >> rand(3,1) ans = 0.2190 0.0470 0.6789 randn(n,m): Matriz ( n x m ) de números aleatorios distribuidos normalmente con media cero y varianza unidad. >> randn(2) ans= 1.1650 0.0751 0.6268 0.3516 eye(n,m): Matriz identidad ( n x m ) >>eye(3) ans= 1 0 0 0 1 0 0 0 1
  • 51. Estructura de Flujo de Control Descripción for = array órdenes end Un bloque for que en cada iteración asigna x a la i- esima columna del array y ejecuta ordenes while expresión órdenes end Un bloque while que ejecuta ordenes mientras todos los elementos de expresión son verdaderos o diferentes de cero. if expresión órdenes end Una simple instrucción if-else-end con dos caminos . Un grupo de ordenes se ejecuta si la expresión es verdadera. El otro conjunto de ejecuta si la otra expresión es falsa o diferente e cero. if expresión ordenes evaluadas si exp = verdadero else órdenes evaluadas si expresión = falso end Una estructura if-else.end con dos caminos. Un grupo de órdenes se ejecuta si la expresión es verdadera. El otro conjunto se ejecuta si la expresión es falsa o cero.
  • 52. Estructura de Flujo de Control Descripción if expresión 1 ordenes evaluadas si expresión 1 es verdadera else if expresión 2 ordenes evaluadas si expresión 2 es verdadera elseif_ . . . else órdenes evaluadas si ninguna otra expresión es verdadera end La estructura mas general if-else-end . Solo se evalúan las órdenes asociadas con la primera expresión verdadera. break Termina la ejecución de los bucles.
  • 53. LOS ARCHIVOS TIPO FICHERO.M SON PARECIDOS A LOS SCRIPTS, O MEJOR LOS SCRIPTS SON FICHEROS .M, EN ESTA SESIÓN SE VAN A VER LAS FUNCIONES.
  • 54. <ul><li>Las funciones permiten definir funciones enteramente análogas a las de MATLAB, con su nombre, sus argumentos y sus valores de retorno. Los ficheros *.m que definen funciones permiten extender las posibilidades de MATLAB; de hecho existen bibliotecas de ficheros *.m que se venden (toolkits) o se distribuyen gratuitamente (a través de Internet ). Las funciones definidas en ficheros *.m se caracterizan porque la primera línea (que no sea un comentario) comienza por la palabra function, seguida por los valores de retorno (entre corchetes [ ] y separados por comas, si hay más de uno), el signo igual (=) y el nombre de la función , seguido de los argumentos (entre paréntesis y separados por comas). </li></ul><ul><li>Recuérdese que un fichero *.m puede llamar a otros ficheros *.m, e incluso puede llamarse así mismo de forma recursiva. Los ficheros de comandos (scripts) se pueden llamar también desde funciones, en cuyo caso las variables que se crean pertenecen a espacio de trabajo de la función. </li></ul><ul><li>El espacio de trabajo de una función es independiente del espacio de trabajo base y del espacio de trabajo de las demás funciones. Esto implica por ejemplo que no puede haber colisiones entre nombres de variables: aunque varias funciones tengan una variable llamada A, en realidad se trata de variables completamente distintas (a no ser que A haya sido declarada como variable global). </li></ul>
  • 55. <ul><li>La primera línea de un fichero llamado name.m que define una función tiene la forma: </li></ul><ul><li>function [lista de valores de retorno] = name(lista de argumentos) </li></ul><ul><li>donde name es el nombre de la función. Entre corchetes y separados por comas van los valores de retorno (siempre que haya más de uno), y entre paréntesis también separados por comas los argumentos. Puede haber funciones sin valor de retorno y también sin argumentos. Recuérdese que los argumentos son los datos de la función y los valores de retorno sus resultados. Si no hay valores de retorno se omiten los corchetes y el signo igual (=); si sólo hay un valor de retorno no hace falta poner corchetes. Tampoco hace falta poner paréntesis si no hay argumentos. </li></ul><ul><li>Una diferencia importante con C/C++/Java es que en MATLAB una función no modifica nunca los argumentos que recibe. Los resultados de una función de MATLAB se obtienen siempre a través de los valores de retorno, que pueden ser múltiples y matriciales. Tanto el número de argumentos como el de valores de retorno no tienen que ser fijos, dependiendo de cómo el usuario llama a la función. </li></ul>
  • 56. <ul><li>Las variables definidas dentro de una función son variables locales, en el sentido de que son inaccesibles desde otras partes del programa y en el de que no interfieren con variables del mismo nombre definidas en otras funciones o partes del programa. Se puede decir que pertenecen al propio espacio de trabajo de la función y no son vistas desde otros espacios de trabajo. Para que la función tenga acceso a variables que no han sido pasadas como argumentos es necesario declarar dichas variables como variables globales, tanto en el programa principal como en las distintas funciones que deben acceder a su valor. Es frecuente utilizar el convenio de usar para las variables globales nombres largos (más de 5 letras) y con mayúsculas. </li></ul><ul><li>Por razones de eficiencia, los argumentos que recibe una función de MATLAB no se copian a variables locales si no son modificados por dicha función (en términos de C/C++ se diría que se pasan por referencia). Esto tiene importantes consecuencias en términos de eficiencia y ahorro de tiempo de cálculo. Sin embargo, si dentro de la función se realizan modificaciones sobre los argumentos recibidos, antes se sacan copias de dichos argumentos a variables locales y se modifican las copias (se diría que en este caso los argumentos se pasan por valor). </li></ul><ul><li>Dentro de la función, los valores de retorno deben ser calculados en algún momento (no hay sentencia return, como en C/C++/Java). De todas formas, no hace falta calcular siempre todos los posibles valores de retorno de la función, sino sólo los que el usuario espera obtener en la sentencia de llamada a la función. En cualquier función existen dos variables definidas de modo automático, llamadas nargin y nargout, que representan respectivamente el número de argumentos y el número de valores de retorno con los que la función ha sido llamada. Dentro de la función, estas variables pueden ser utilizadas como el programador desee. </li></ul><ul><li>La ejecución de una función termina cuando se llega a su última sentencia ejecutable. Si se quiere forzar el que una función termine de ejecutarse se puede utilizar la sentencia return, que devuelve inmediatamente el control al entorno de llamada. </li></ul>
  • 57. <ul><li>SUB-FUNCIONES </li></ul><ul><li>Tradicionalmente MATLAB obligaba a crear un fichero *.m diferente por cada función. El nombre de la función debía coincidir con el nombre del fichero. A partir de la versión 5.0 se han introducido las sub-funciones, que son funciones adicionales definidas en un mismo fichero *.m, con nombres diferentes del nombre del fichero (y del nombre de la función principal) y que las sub-funciones sólo pueden ser llamadas por las funciones contenidas en ese fichero, resultando “invisibles” para otras funciones externas. </li></ul>
  • 58. <ul><li>VARIABLES PERSISTENTES </li></ul><ul><li>Las variables persistentes son variables locales de las funciones (pertenecen al espacio de trabajo de la función y sólo son visibles en dicho espacio de trabajo), que conservan su valor entre distintas llamadas a la función. Por defecto, las variables locales de una función se crean y destruyen cada vez que se ejecuta la función. Las variables persistentes se pueden definir en funciones, pero no en ficheros de comandos. Es habitual utilizar para ellas letras mayúsculas. Las variables se declaran como persistentes utilizando la palabra persistent seguida de los nombres separados por blancos, como por ejemplo: </li></ul><ul><li>persistent VELOCIDAD TIEMPO </li></ul>
  • 59. <ul><li>Las variables persistent se inicializan a la matriz vacía [] y permanecen en memoria hasta que se hace clear de la función o cuando se modifica el fichero-M . Para evitar que un fichero-M se modifique se puede utilizar el comando mlock file.m, que impide la modificación del fichero. El comando munlock desbloquea el fichero mientras que la función mislocked permite saber si está bloqueado o no. </li></ul>
  • 60. <ul><li>VARIABLES GLOBALES </li></ul><ul><li>Las variables globales son visibles en todas las funciones (y en el espacio de trabajo base o general) que las declaran como tales. Dichas variables de declaran precedidas por la palabra global y separadas por blancos, en la forma: </li></ul><ul><li>global VARIABLE1 VARIABLE2 </li></ul><ul><li>Como ya se ha apuntado, estas variables sólo son visibles en los espacios de trabajo de las funciones que las declaran como tales (y en el propio espacio de trabajo base, si también ahí han sido declaradas como globales). Ya se ha dicho también que se suele recurrir al criterio de utilizar nombres largos y con mayúsculas, para distinguirlas fácilmente de las demás variables. </li></ul>
  • 61. <ul><li>MATLAB PUEDE HACER ANALISIS ESTADISTICOS A PARTIR DE UNOS DATOS </li></ul><ul><li>LOS DATOS SE ORDENARAN EN MATRICES ORDENADAS POR COLUMNAS </li></ul>
  • 62. <ul><li>coorcoef(x): Coeficiente de correlación. </li></ul><ul><li>cov(x): Matriz de covarianaza </li></ul><ul><li>cumprod(x): Producto acumulativo de columnas </li></ul><ul><li>cumsum(x): Suma acumulativa de columnas </li></ul><ul><li>diff(x): Calcula la diferencia entre elementos </li></ul><ul><li>hist(x): Histograma </li></ul><ul><li>mean(x): Valor medio de columnas </li></ul><ul><li>median(x): Valor de la mediana de columnas </li></ul><ul><li>prod(x): Producto de elementos en columnas </li></ul><ul><li>rand(x): Números aleatorios distribuidos uniformemente </li></ul><ul><li>Randn(x): Números aleatorios distribuidos normalmente </li></ul><ul><li>Sort(x): Ordenar columnas en orden ascendente </li></ul><ul><li>Std(x): Desviación estándar de columnas </li></ul><ul><li>Sum(x): Suma de elementos en cada columna </li></ul>
  • 63. <ul><li>RAICES: </li></ul><ul><li>Un polinomio se representa por una matriz fila con los coeficientes en orden descendente, se deben incluir los términos con coeficientes ceros. </li></ul><ul><li>Las raíces del polinomio se encuentran ayudados por la función: roots(p) . </li></ul><ul><li>Las raíces se localizan en vectores columnas. </li></ul><ul><li>Dadas las raíces es posible crear los posibles polinomios con la función: poly(r). </li></ul>
  • 64. <ul><li>conv(a,b) : Multiplica los polinomios a y b. </li></ul><ul><li>deconv(a,b) : Divide el polinomio a entre b. </li></ul><ul><li>polyder(p) : Calcula la derivada del polinomio p </li></ul><ul><li>polyval(p,x) : Evalúa el polinomio p en el punto x </li></ul><ul><li>Residue(n,d): Calcula el desarrollo en fracciones simples del cociente de n a d </li></ul><ul><li>polyder(n,d): Calcula la derivada del cociente de n a d, donde n y d son polinomios </li></ul>Además Matlab tiene las siguiente funciones para la utilización con polinomios
  • 65. <ul><li>Representación Grafica. </li></ul><ul><ul><li>Hay una función que evalúa la función que se va a representar. </li></ul></ul><ul><ul><ul><li>fplot(‘nombre’,[a,b]): la entrada de la función son el nombre de la función y el rango de representación </li></ul></ul></ul><ul><li>Minimización. </li></ul><ul><ul><li>Para calcular los valores máximos y mínimos de una función </li></ul></ul><ul><ul><li>fmin(‘nombre’,a,b) </li></ul></ul><ul><ul><li>fmax(‘nombre’,a,b) </li></ul></ul>
  • 66. <ul><li>Localización ceros. </li></ul><ul><ul><li>Para buscar el cero de la función unidimensional. </li></ul></ul><ul><ul><ul><li>fzero(‘nombre’,a): donde a es el punto cerca donde se encuentra el cero. </li></ul></ul></ul><ul><li>Integración. </li></ul><ul><ul><li>El área bajo la curva se puede calcular de tres formas. </li></ul></ul><ul><ul><ul><li>trapz(x,y): Aproximación por trapezoides. </li></ul></ul></ul><ul><ul><ul><li>quad() </li></ul></ul></ul><ul><ul><ul><li>quad8() </li></ul></ul></ul>
  • 67. <ul><li>Diferenciación. </li></ul><ul><ul><li>diff </li></ul></ul><ul><li>Ecuaciones diferenciales. </li></ul><ul><ul><li>ode23(‘nombre’,to,tf,yo) y ode45(‘nombre’,to,tf,yo) </li></ul></ul><ul><ul><ul><li>Donde nombre: nombre de la función , t o instante inicial, t f instante final, y o condición inicial </li></ul></ul></ul>
  • 68. <ul><li>Para empezar, un programa que calcula la suma de los primeros cien números de un arreglo del 1 al 100: </li></ul><ul><ul><li>i=1; suma=0; </li></ul></ul><ul><ul><li>A=[1:1:100]; </li></ul></ul><ul><ul><li>for i=1:10 </li></ul></ul><ul><ul><li>suma=A(i)+suma; </li></ul></ul><ul><ul><li>%i=i+1; </li></ul></ul><ul><ul><li>end </li></ul></ul>
  • 69. <ul><li>A continuación veremos el archivo .m que nos ayudaría a resolver el problema del número mínimo que Matlab tiene: </li></ul><ul><ul><li>num=0; min=1; </li></ul></ul><ul><ul><li>while (1+min)>1 </li></ul></ul><ul><ul><li>min=min/2; </li></ul></ul><ul><ul><li>num=num+1; </li></ul></ul><ul><ul><li>end </li></ul></ul><ul><ul><li>min=2*min % el valor de min es igual a la constante EPS </li></ul></ul>
  • 70. <ul><li>El programa siguiente nos ayuda a resolver la tarea 1 del curso: </li></ul><ul><ul><li>x1=1/3; </li></ul></ul><ul><ul><li>x2=1; </li></ul></ul><ul><ul><li>for i=1:7 </li></ul></ul><ul><ul><li>y(i)=5/6*x1-1/6*x2; </li></ul></ul><ul><ul><li>x2=x1; </li></ul></ul><ul><ul><li>x1=y(i); </li></ul></ul><ul><ul><li>i=i+1; </li></ul></ul><ul><ul><li>end </li></ul></ul>
  • 71. <ul><li>Ahora vamos a ver cómo sería una posible implementación del algoritmo para el MÉTODO DE LA BISECCIÓN (método cerrado): </li></ul>
  • 72. <ul><li>P=[1 4 0 -10]; % x^3+4*X^2-10 </li></ul><ul><li>N=14; % Numero de iteraciones limite </li></ul><ul><li>i=1; % Variables </li></ul><ul><li>raiz=1; </li></ul><ul><li>E=0.000001; </li></ul><ul><li>a=1; </li></ul><ul><li>b=2; </li></ul><ul><li>fa=polyval(P,a); % Evaluamos P en a, y asignamos a fa </li></ul><ul><li>fb=polyval(P,b); </li></ul><ul><li>%if (i<=N) </li></ul><ul><li>while (i<N) </li></ul><ul><li>p(i)=(a+b)/2; </li></ul><ul><li>fp=polyval(P,p(i)); </li></ul><ul><li>if (abs(fp)<E) </li></ul><ul><li>raiz='la raiz encontrada es: ' </li></ul><ul><li>p(i-1) </li></ul><ul><li>else </li></ul><ul><li>if (fa*fp>0) </li></ul><ul><li>a=p(i); </li></ul><ul><li>fa=fp; </li></ul><ul><li>else </li></ul><ul><li>b=p(i); </li></ul><ul><li>end </li></ul><ul><li>end </li></ul><ul><li>i=i+1; </li></ul><ul><li>end </li></ul>

×