curso básico matlab

51
1 CURSO BÁSICO DE MATLAB Dr. Ing. Marcos A. de Armas Teyra Centro de Estudios de Energía y Medioambiente Universidad de Cienfuegos

Upload: daniel-garcia

Post on 25-Jul-2015

73 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Curso Básico MATLAB

1

CURSO BÁSICO

DE

MATLAB

Dr. Ing. Marcos A. de Armas Teyra Centro de Estudios de Energía y Medioambiente Universidad de Cienfuegos

Page 2: Curso Básico MATLAB

2

Índice 1 Introducción. 5 1.1 La Ventana de MATLAB 6 1.2 Estructura de la Ayuda 7 1.3 Comandos y sintaxis básica 7 1.3.1 Comandos de información general 8 1.3.2 Comandos de administración del espacio de trabajo 8 1.3.3 Comandos y funciones de administración 9 1.3.4 Constantes y variables especiales 9 1.3.5 Funciones matemáticas 9 Hiperbólicas Complejas Estadísticas Operadores aritméticos y caracteres especiales Operadores lógicos y relacionales 1.3.6 M-Files 11 1.3.7 Temporización 12 1.3.8 Control de la ejecución y flujo de programas 121.4 Formato de Salida 121.5 Salvar una sesión de trabajo 132 Trabajo con arreglos, matrices y vectores 132.1 Definiciones 13 2.1.1 Generación de matrices 14 2.1.2 Formación de un vector fila 15 2.1.3 Formación de un vector columna 15 2.1.4 Matrices elementales definidas en MATLAB 162.2 Libretos o guiones (scripts M-Files) 182.3 Funciones M-Files 182.4 Sub funciones y funciones anidadas 192.5 Crear nuevas funciones 212.6 Funciones anónimas 212.7 Función función 222.8 ¿Que usar? ¿Libretos o Funciones? 232.9 Cadena de textos, entrada de datos y mensajes de errores 232.10 Creación de variables globales 242.11 Lazos for y while 25

Page 3: Curso Básico MATLAB

3

2.11.1 for 25 2.11.2l while 252.12 Condiciones if y switch 26 2.12.1 if 26 2.12.2 swith 272.13 Depurar y perfilar 283 Gráficos 283.1 Gráficos en dos dimensiones 283.2 Gráficos tridimensionales 303.3 Más sobre el comando plot 313.4 Salvar una figura 323.5 Publicación de figuras 323.6 Subplot 333.7 Gráficos de argumentos complejos 344 Métodos numéricos en MATLAB 344.1 Polinomios 344.2 Más sobre ajustes de polinomios 364.3 Solución de ecuaciones 374.4 Sistemas de ecuaciones lineales 384.5 Ecuaciones de regresión múltiple 40 4.5.1 Ecuaciones de regresión lineal múltiple 40 4.5.2 Ecuaciones de regresión polinómicas 414. 6 Estadística en MATLAB 415 Matemática simbólica 425.1 Creación de variables simbólicas 425.2 Creación de funciones matemáticas simbólicas 446 Simulink 486.1 Creación de un modelo 486.2 Subsistemas 496.3 Enmascarar un sistema 506.4 Otros bloques de interés 53

Page 4: Curso Básico MATLAB

4

Page 5: Curso Básico MATLAB

5

Introducción: El propósito de este curso es realizar una conquista útil, y en cierto grado especializada, de los fundamentos esenciales del MATLAB con el objetivo de lograr las habilidades suficientes para incursar con éxito en este campo imprescindible del momento. MATLAB es un compendio computacional interdisciplinario en las ciencias, ingeniería y en las matemáticas aplicadas, con un poderoso lenguaje de programación, cálculo y visualización que es común emplearlo como herramienta de afinación y validación antes de que muchos algoritmos y modelos sean definitivamente depositados en un lenguaje comercial más propio para un público general. Las aplicaciones típicas de MATLAB incluyen:

Matemáticas y cálculos Desarrollo de algoritmos Modelaje, simulación y establecimiento de prototipos Análisis de datos, exploración y visualización Gráficos científicos y de ingeniería Desarrollo de aplicaciones, incluyendo la construcción de interfases gráficas

MATLAB aporta una gran capacidad para la investigación, el desarrollo y el análisis de sistemas. En cada versión MATLAB proporciona nuevos recursos y un escenario más enriquecido. MATLAB posee una familia de aplicaciones específicas conocidas como “toolboxes” desarrolladas para estudios especializados que permiten resolver problemas diversos o muy particulares. Estas herramientas ocupan campos en redes neuronales, lógica difusa, algoritmos genéticos, sistemas de control, álgebra financiera, procesamiento de imágenes y señales, fijación de curvas, adquisición de datos, y muchos otros que incrementarán la productividad para resolver problemas esenciales. Estas herramientas no son más que funciones de MATLAB; M- Files que es posible enriquecer al crear funciones propias. MATLAB, por tradición, responde a órdenes escritas en la línea de comandos o desde archivos. Sin embargo, en las últimas ediciones, se ha incrementado su accesibilidad desde interfases gráficas con un elevado nivel de interactividad especialmente útil para comenzar. Los comandos tienen la ventaja de facilitar la reproducción y la repetición de los resultados. MATLAB es relativamente sencillo de aprender y la mejor forma de lograrlo es pasar directamente a ejecutarlo. La formación de variables en MATLAB se realiza con caracteres alfanuméricos y cada variable debe estar definida antes de que pueda ser empleada. Cuando una expresión arroja un valor, éste se almacena en la variable ans la cual puede ser utilizada como cualquier otra variable. El máximo error, o la máxima precisión con que se trabaja en la aritmética de punto flotante, lo da la variable eps. Una vez que las variables hayan

Page 6: Curso Básico MATLAB

6

sido definidas, existen en el espacio de trabajo; workspace. La existencia de una variable en el espacio de trabajo permite ser empleada para múltiples objetivos. 1.1 La ventana de MATLAB Cuando se inicia MATLAB, se presenta una ventana de varios paneles que es posible personalizar mostrada en la Figura 1

Figura 1 Presentación de MATLAB

El panel fundamental, con un diseño de mayor área, es la ventana de comandos (Command Windows). En ella se ordenan los comandos escritos a la derecha del prompt del sistema representado por el símbolo >>. Una vez escrita una orden, MATLAB la ejecuta tan sólo al presionar la tecla de entrada; (enter). En la parte superior izquierda se encuentra la ventana del Directorio Actual (Current Directory). MATLAB sólo reconoce los archivos existentes en el directorio en uso. Los comandos para trabajar sobre el directorio y la ruta (path), son cd, what, addpath y edithpath o escoger en el menú archivo, establecer la ruta;

Page 7: Curso Básico MATLAB

7

(File/set path…). Mucho más fácilmente se realiza seleccionando el directorio deseado en la pestaña gráfica del directorio actual. Es posible adicionar archivos a un directorio. Aledaño al Directorio Actual, está la pestaña del espacio de trabajo (Workspace) donde se muestra qué variables están definidas y cierta información sobre su contenido. En la ventana inferior se muestra el Historial de Comandos (Command History) donde se registran las órdenes efectuadas en la ventana de comandos. El registro histórico de comandos es persistente y se mantiene en distintas sesiones de trabajo de modo que si es necesario, se puede copiar y archivar en un lugar apropiado. Presionando el botón inicio de MATLAB; (Start), se encuentran las herramientas de aplicaciones, el acceso a sus interfases gráficas, la simulación dinámica de sistemas, la conexión con la ayuda y otros temas que facilitan el trabajo en el ambiente de MATLAB. 1.2 Estructura de la Ayuda Una característica especial e importante de MATLAB es el acceso en todo momento a la ayuda con una viabilidad extraordinaria. En ella se abordan todos los tópicos con ejemplos y demostraciones. Por esta razón, para iniciar el trabajo, es útil conocer cómo está estructurada y qué posibilidades de ayuda brinda MATLAB. Existen dos niveles de ayuda:

1. Si se necesita una ayuda rápida durante la sintaxis de un comando, se puede escribir sobre la ventana de comandos la palabra help seguida del comando específico que se desea investigar; por ejemplo help plot. Si sólo se escribe la palabra help recibirá como respuesta una lista de categorías de ayuda que contiene en el listado de todos los comandos.

2. Escribiendo doc seguido del nombre de un comando, recibirá una ayuda más general en una ventana

adicional mucho más elaborada e informativa que con la alternativa help. En el panel izquierdo se verá desplegado jerárquicamente toda la documentación disponible. Si sólo se escribe doc, o se selecciona help del menú, acudirá la ventana raíz de la ayuda.

Existen otros comandos de auxilio entre los que pueden mencionarse helpdesk que reporta una documentación para la solución de problemas en forma de un hipertexto comprensivo, lookfor para la búsqueda de M-files por palabras claves; info y support para información de MATLAB y MathWorks, etc que deben ser explorados en trabajo individual recurriendo al listado de categorías de comandos.

Page 8: Curso Básico MATLAB

8

1.3 Comandos y sintaxis básicas Una vez escrita una expresión válida en la ventana de comandos y presionar la tecla de aceptación; Intro, MATLAB la ejecuta de inmediato mostrando el resultado tal y como lo hace una calculadora. De hecho, en lo más elemental, MATLAB puede ser utilizado como un calculador ordinario. Sin embargo, MATLAB es muy superior cuando se aborda como un compendio de operaciones sobre arreglos, matrices y vectores. Por esta razón, exige el conocimiento previo de los fundamentos básicos del álgebra lineal y por su origen del idioma inglés. Las órdenes y sentencias en MATLAB se ejecutan mediante comandos de información, administración, aritméticos, de control, etc. A continuación se muestra un grupo de comandos considerados básicos. Para una revisión mucho más amplia y general de los comandos, se debe solicitar ayuda en help general. 1.3.1 Comandos de información General

Comandos Acciones demo Muestra todas las demostraciones que acompañan a la versión del MATLAB ver Da información sobre la versión de MATLAB, Simulink y las herramientas del sistema

version Muestra información sobre la versión en ejecución de MATLAB 1.3.2 Comandos de administración del espacio de trabajo.

Comandos Acciones clc Limpia la ventana de comandos

clear Elimina las variables en memoria pack Compacta la memoria del espacio de trabajo exist Chequea la existencia de una variable o archivo

global Declara globales a las variables help Búsqueda de auxilio en una materia determinada

lookfor Búsqueda por palabras claves quit Detiene el MATLAB who Lista las variables whos Lista las variables con mayor información load Carga las variables del espacio de trabajo desde un archivo save Salva las variables del espacio de trabajo

recycle Brinda la opción de mover los archivos borrados a una carpeta de reciclaje exit Salir del MATLAB

Page 9: Curso Básico MATLAB

9

1.3.3 Funciones y comandos de administración

Acciones what Realiza un listado de los archivos específicos en el directorio de MATLAB type Lista los M-file open Abre los archivos por extensión

which Localiza funciones y archivos inmem Lista las funciones en memoria

1.3.4 Constantes y variables especiales

Variables Interpretación

ans Respuesta más reciente eps Precisión de la notación con punto flotante i , j Unidad imaginaria 1− inf Infinito

NaN No es un número pi Número π

why Respuesta breve 1.3.5 Funciones Matemáticas

Exponenciales y Logarítmicas exp(x) Exponencial xe log(x) Logaritmo Natural )ln(x

log10(x) Logaritmo base 10 )(log10 x

sqrt(x) Raíz cuadrada x

nthroot(x) Raíz n-sima de un número real n x

Trigonométricas acos(x) Coseno inverso )(cos 1 x−

asin(x) Seno inverso )(1 xsen−

atan(x) Tangente inversa )(tan 1 x−

cos(x) Coseno )cos(x

sin(x) Seno )(xsen

Page 10: Curso Básico MATLAB

10

tan(x) Tangente )tan(x

sec(x) Secante )sec(x

csc(x) Cosecante )csc(x

Hiperbólicas

acosh(x) Coseno hiperbólico inverso )(cosh 1 x−

asinh(x) Seno hiperbólico inverso )(1 xsenh−

atanh(x) Tangente hiperbólica inversa )(tanh 1 x−

cosh(x) Coseno hiperbólico )cosh(x

senh(x) Seno hiperbólico )(xsenh

tanh(x) Tangente hiperbólica )tanh(x

sech(x) Secante hiperbólica )(sec xh

csch(x) Cosecante hiperbólica )(csc xh

Complejas

abs(z) Valor absoluto Z

angle(z) Ángulo de un número complejo conj(z) Complejo conjugado de Z img(z) Valor imaginario de Z real(z) Valor real de Z

Estadísticas erf(x) Calcula el error de la función (x)

mean(x) Calcula el promedio median(x) Calcula la mediana

std(x) Calcula la desviación estándar

Operadores aritméticos y caracteres especiales + Operador de adición - Operador de resta * Operador de multiplicación escalar y matricial .* Operador de multiplicación de arreglos elemento a elemento ^ Operador de potenciación escalar y matricial .^ Operador de potenciación de arreglos elemento a elemento

Page 11: Curso Básico MATLAB

11

/ Operador de división derecha \ Operador de división izquierda ./ Operador de división derecha de arreglos elemento a elemento .\ Operador de división izquierda de arreglos elemento a elemento . Punto decimal : Genera elementos espaciados regularmente y representa filas o columnas completas ; Separador de columnas y evita desplegar, mostrar , Separa elementos y argumentos en una fila

… Operador de continuación de línea ( ), { } Encierra argumentos de funciones e índices de arreglos: supedita precedencia

[ ] Encierra elementos de arreglos [,] Concatenación Horizontal [;] Concatenación vertical % Establece un comentario .' Transpuesta ' Complejo conjugado transpuesta = Asignación

Operadores lógicos y relacionales

== Igual a ~= Desigual < Menor que > Mayor que

<= Menor o igual que >= Mayor o igual que & Operador lógico AND P Operador lógico NOT | Operador de elementos lógico OR

xor Operador lógico EXCLUSIVE OR 1.3.6 M-Files

eval Interpreta las cadenas que contienen expresiones de MATLAB feval Evalúa la función

function Crea un M-File definido para una función creada por el usuario global Define variables globales

Page 12: Curso Básico MATLAB

12

nargin Número de argumentos de entrada a una función nargout Número de argumentos de salida de una función script Guión, Argumento M-File

1.3.7 Temporización

cputime Tiempo en segundos de CPU clock Fecha y tiempo corriente como vector de datos

tic, toc Comenzar o detener un temporizador 1.3.8 Control de la ejecución y flujo de programas

break Termina la ejecución de un lazo case Brinda ejecución en trayectorias alternas dentro de la estructura de switch else Delinea bloques alternos de argumentos

elseif Ejecuta condicionalmente los argumentos end Concluye los argumentos for, while e if

error Muestra mensajes de error for Repite los argumentos un número específico de veces if Ejecuta los argumentos condicionalmente

otherwise Establece partes de los argumentos de switch return Regresa a la función invocada switch Dirige la ejecución del programa comparando con expresiones de caso

warning Muestra mensajes de alerta while Repite los argumentos un número indefinido de veces

1.4 Formatos de salida Todos los cálculos en MATLAB se realizan con doble precisión. El comando format puede utilizarse para hacer cambios en la forma de visualización de los resultados. Entre ellos se encuentran:

Acciones format Por defecto. Igual al short

format short Formato de punto fijo a escala con 5 dígitos format long Formato de punto fijo a escala con 15 dígitos

format short e Formato de punto flotante con 5 dígitos format long e Formato de punto flotante con 15 dígitos Format bank Formato fijo para dólares y céntimos Format rat Aproximación por relaciones de números

>> pi

Page 13: Curso Básico MATLAB

13

ans = 3.1416 >> format short; pi ans = 3.1416 >> format long; pi ans = 3.14159265358979 >> format short e;pi ans = 3.1416e+000 >> format long e; pi ans = 3.141592653589793e+000 >> format rat;pi ans = 355/113 1.5 Salvar una sesión de trabajo. Cuando se abandona MATLAB, todas las variables que existen en el espacio de trabajo se pierden. Si se utiliza el comando save, las variables se almacenan en un archivo llamado matlab.mat. Una vez de nuevo dentro de MATLAB, el comando load reestablece el espacio de trabajo al estado anterior. 2 TRABAJO CON ARREGLOS, MATRICES Y VECTORES 2.1 Definiciones Un arreglo es una colección ordenada de elementos identificados por subíndices para los que MATLAB emplea números integrales comenzando por el 1. La dimensión de un arreglo es el número de subíndices necesarios para especificar un elemento. El tamaño (size) de un arreglo es un listado del número de índices máximo por dimensión. Una matriz es un arreglo bidimensional con reglas especiales para la adición, multiplicación, división, potenciación y otras operaciones. Representa una transformación matemática lineal. Las dos dimensiones son denominadas filas y columnas. Un vector es una matriz para la cual una dimensión tiene solamente el índice 1. Un vector fila tiene sólo un fila y un vector columna sólo una columna.

Page 14: Curso Básico MATLAB

14

Aunque un arreglo es mucho más general y menos matemático que una matriz, los términos se usan a veces de forma intercambiable. Algo más: en MATLAB no existe realmente una distinción formal entre un escalar y una matriz de 1×1. Note que no existe un arreglo unidimensional en MATLAB. Aún los vectores son arreglos bidimensionales con una dimensión trivial. 2.1.1 Generación de Matrices Es posible introducir o generar matrices de diferente forma:

Introducir una lista de elementos Cargarla desde datos externos Generarla a partir de funciones de construcción Crearla a partir de funciones propias en M-Files

Para introducir una matriz como una lista de elementos, se deben seguir las convenciones básicas siguientes:

Encerrar entre corchetes; [ ] la lista de los elementos Separar los elementos de una fila con espacios en blanco o comas Usar el semicolon ; para indicar el fin de cada fila

Por ejemplo; Formación de una Matriz cuadrada de 3×3 >> A = [1 2 3; 4 5 6; 7 8 9] A = 1 2 3 4 5 6 7 8 9 La dimensión de A es: >> ndims(A) ans = 2 El tamaño de A es: >> size(A) ans = 3 3

Page 15: Curso Básico MATLAB

15

2.1.2 Formación de un vector fila: >> B = [0 2 2] B = 0 2 2 2.1.3 Formación de un vector columna: >> C = [0;2;2] C = 0 2 2 Los arreglos y matrices pueden construirse de otros arreglos y matrices con la sola condición de que sean compatibles: >> D = [A C] D = 1 2 3 0 4 5 6 2 7 8 9 2 >> E = [A B] ??? Error using ==> horzcat All matrices on a row in the bracketed expression must have the same number of rows. >> E = [A D] E = 1 2 3 1 2 3 0 4 5 6 4 5 6 2 7 8 9 7 8 9 2 En ocasiones es necesario acceder a uno o más elementos de un arreglo o matriz. Para ello se utilizan los índices dimensionales que identifican a cada elemento encerrado entre paréntesis. El resultado es la extracción del elemento o bloque indicado. Ejemplos: Extracción del elemento perteneciente a la fila 1 columna 2 >> E(1,2)

Page 16: Curso Básico MATLAB

16

ans = 2 Extracción de un bloque que comprende los elementos de la fila 1 y 2 que ocupan las columnas 2 y 3 >> E(1:2,2:3) ans = 2 3 5 6 El operador colon (dos puntos); : , es muy importante en MATLAB. Con él se indica un intervalo de variación entre dos valores:

>> x = [1:10] x = 1 2 3 4 5 6 7 8 9 10

En este caso se asume por defecto un intervalo de 1 entre los puntos. Para especificar un paso de 0.5 se tiene: » x = [1:0.5:5] x = Columns 1 through 9 1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000 4.5000 5.0000 En una matriz o vector el operador : permite seleccionar una parte del mismo. Así en el vector y se obtienen los elementos entre el 2 y el 5to. Lugar con la expresión:

>> y = x(2:5) y = 1.5000 2.0000 2.5000 3.0000

2.1.4 Existen un grupo de matrices elementales definidas en MATLAB. Estas son:

zeros(x,y) Arreglo de ceros ones(x,y) Arreglo de unos eye(x,y) Matriz identidad

repmat(x,y) Reproduce una matriz. rand(x,y) Matriz de números reproducidos de forma aleatoria

randn (x,y) Matriz de números aleatorios distribuidos normalmente linspace (x,y) Vector linealmente espaciado logspace(x,y) vector con espaciamiento logarítmico meshgrid(x,y) Arreglos de x y y para gráficos en 3D.

Page 17: Curso Básico MATLAB

17

Información básica sobre los arreglos matrices y vectores. size(A) Tamaño del arreglo

length(A) Longitud o número de elementos de un vector. ndims(A) Número de dimensiones numel(A) Número de elementos disp(A) Mostrar la matriz o el texto

isempty(A) Cierto si el arreglo está vacío isequal(A) Cierto si el arreglo es numéricamente igual

Comandos básicos de arreglos matrices y vectores

max(A) Arroja el elemento máximo min(A) Arroja el elemento mínimo sum(A) Suma cada columna prod(A) Producto de cada columna

cat Concatena arreglos find Encuentra los índices de los elementos no nulos end Último índice diag Matriz diagonal y diagonal de una matriz triu Extraer la triangulación superior tril Extraer la triangulación inferior : Vector espaciado regularmente e índice dentro de una matriz

Aritmética Matricial

dot Calcula el producto escalar cross Calcula el producto vectorial

Comandos matriciales para resolver ecuaciones lineales

det Calcula el determinante de un arreglo inv Determina el inverso de una matriz

rank Determina el rango de una matriz MATLAB posee, además, un grupo de matrices especializadas para el trabajo en diferentes campos de la ciencia que pueden ser consultadas en la ayuda. Entre ellas la matriz de Hilbert, Pascal, Mágica, Wilkinson, Companion, Vandermonde, etc

Page 18: Curso Básico MATLAB

18

2.2 Libretos o guiones (Script M-files) Un libreto (script M-file) es un archivo externo a la línea de comandos que contienen una secuencia de sentencias u órdenes ejecutables de MATLAB. Escribiendo el título del archivo en la ventana de comandos se tiene acceso a la ejecución y salidas correspondientes a este archivo. Por asignación poseen la extensión .m debido a ello se llaman M-files. Estos ficheros no necesitan ser compilados y para ser ejecutados, se debe escribir su nombre en la línea de comandos con la única condición de que se encuentre en la ruta; path, donde MATLAB busca y reconoce sus archivos. Su utilidad fundamental es automatizar los bloques de comandos en cálculos que deben realizarse repetidamente y cuando se desea reproducir o interpretar el trabajo realizado en un momento posterior. Los libretos operan con las variables existentes en el espacio de trabajo o pueden crear nuevas que permanezcan y se empleen en futuros cálculos. Los libretos pueden producir salidas gráficas usando comandos como plot. Cualquier texto precedido del signo % en el inicio de un libreto se entiende como un comentario lo cual es útil si se desea obtener información del archivo al escribir help seguido del nombre del archivo en cuestión en la línea de comandos. Por ejemplo se ha creado el libreto trigonometrica.m con los comentarios y argumentos siguientes %Este archivo determina y grafica el %valor de la función % y = cos(x)+tan(x)/sin(x) x = (0:0.2:pi); y = cos(x)+tan(x)/sin(x); plot(x,y) En el prompt del MATLAB se escribe: >> help trigonometrica Este libreto determina y grafica el valor de la función y=cos(x)+tan(x)/sin(x) Para ejecutarlo >> trigonometrica 2.3 Funciones M-files Las funciones son M-files que extienden las capacidades de MATLAB. Comparadas con los libretos son mucho mejores para compartimentar las tareas. Cada función comienza con una línea del tipo: Function [out1,out2, out3] = nombrefunción(ini1,ini2,ini3)

Page 19: Curso Básico MATLAB

19

Las variables ini1,ini2,ini3, son las variables de entrada y las out1,out2,out3, son las variables de salida . Se pueden tener tantas funciones como se desee y llamarlas cuando se desee. La condición para que sea reconocida una función es que sea guardada en un archivo con el mismo nombre declarado en la sintaxis; es decir: en un archivo nombrefunción.m . Para ejecutarla sólo es necesario escribir en la línea de comandos su nombre al igual que en los libretos. Unas de las principales características de una función es el carácter local de sus variables. Cualquier argumento o variable creada durante la ejecución de la función, son variables sólo de esa función y poseen un espacio privado de trabajo. Por su parte las variables existentes en la línea de comandos o workspace, no son reconocidas por la función. Como ejemplo se ha creado un archivo con una función llamada stat cuyo objetivo es determinar la media y la desviación estándar de un vector x. function [mean,stdev] = stat(x) x = [1:100] n = length(x); mean = sum(x) / n; stdev = sqrt(sum((x - mean).^2)/n); Si durante la ejecución de una función, se llaman otras funciones, cada una de éstas establece su propio espacio de trabajo lo que permite crear programas complejos sin preocuparse por antagonismos en las variables mientras se conservan las pertenecientes al espacio de trabajo. 2.4 Subfunciones y funciones anidadas. Un M-file puede tener definida más de una función. La función principal al inicio del encabezamiento de la línea define la función primaria. En el mismo archivo pueden existir subfunciones y funciones anidadas. Por ejemplo: Ahora se ha creado dentro del archivo stat.m una nueva expresión identificada con la palabra clave avg que es una subfunción de la función stat(x) function [mean,stdev] = stat(x) x = [1:100]; n = length(x); mean = avg(x,n); stdev = sqrt(sum((x-avg(x,n)).^2)/n) end %stat (x)

Page 20: Curso Básico MATLAB

20

function mean = avg(x,n) mean = sum(x)/n; end %avg (x,n) Las subfunciones no son visibles fuera del archivo donde han sido creadas por lo tanto no pueden ser llamadas desde la línea de comandos. Cuando MATLAB no reconoce una función por su nombre, busca por un archivo con el mismo nombre. Si lo encuentra, lo compila en la memoria para uso subsiguiente. Cuando es llamada una función desde la línea de comando o desde cualquier otro M-File, MATLAB analiza la función y la almacena en memoria. La función almacenada permanece en memoria hasta que sea limpiada con el comando clear o se abandone MATLAB. El argumento end es opcional si se tiene una sola función, pero es una buena idea cuando están involucradas subfunciones y obligatorio cuando se usan funciones anidadas. Las funciones anidadas actúan algo diferente. Ellas son definidas dentro del alcance de otra función y comparten el espacio de trabajo de la función receptora. Para escribir una función anidada, simplemente define la función dentro del cuerpo de otra función en un M-File. Se debe terminar la función anidada con un argumento final end. Por ejemplo: function x = A(p1, p2) ... function y = B(p3) ... end ... end Ejemplo de más de una función anidada dentro de A. function x = A(p1, p2) ... function y = B(p3) ... end function z = C(p4) ... end ... end

Page 21: Curso Básico MATLAB

21

2.5 Crear nuevas funciones.

En MATLAB se pueden crear nuevas funciones si es conveniente. Por ejemplo: se desea definir una nueva función con nombre sincos(x) de forma tal que al invocarla en la línea de comandos devuelva el resultado de la expresión correspondiente. Para ello se crea un archivo con extensión .m que contenga la definición de la función y con un nombre que coincida con el nombre de la función. Para el caso sincos.m: function[y]=sincos(x) y=cos(x)-2*sin(2*x-pi/3); Se salva en el subdirectorio de trabajo con el nombre sincos y la extensión .m. Esta es la forma en la cual están escritas las funciones en MATLAB. Note cómo no hay declaración de variables, ni comandos de inicio o fin de programa. 2.6 Funciones anónimas En ocasiones se necesita definir una función temporalmente y evitar la edición de un M-File. Para ello se utiliza la función anónima que se puede construir desde la línea de comandos o en una función M-File. Su sintaxis es: fhandle = @(arglist) expr El término expr representa el cuerpo; esto es: el código que identifica la tarea principal que se debe ejecutar. A la izquierda está arglist, que es una lista de variables o argumentos de entrada separados por coma que deben pasar a la función. Estos dos componentes son similares a lo conocido en las funciones ya tratadas. El signo @ es un operador en MATLAB que construye un manejador de funciones. Crear un manejador de funciones proporciona un medio de invocar a la función anónima. El signo @ es una parte requerida de una función anónima. Ejemplo: La función anónima sqrt calcula el cuadrado de un número. Cuando se llama a esta función, MATLAB le asigna el valor que posee a la variable x y lo usa para calcular el valor de la ecuación x.^2: >>sqrt = @(x) x.^2; >> sqrt(4) ans = 16 También puede almacenarse la respuesta en una variable adicional

Page 22: Curso Básico MATLAB

22

>> a=sqrt(4) a = 16 Ejemplo con dos entradas La función anónima siguiente emplea dos argumentos de entrada x, y. sumAxBy = @(x, y) (A*x + B*y); En la línea de comandos se escribe: A=2; B=4; >> sumAxBy = @(x, y) (A*x + B*y); sumAxBy(2,2) ans = 12 2.7 Función función Muchos problemas en el campo de la ciencia emplean o exigen operar con funciones; encontrar raíces, resolver ecuaciones diferenciales, optimizar o efectuar la integración numérica, son sólo algunos ejemplos citados. En determinados casos un problema complejo puede tratarse con una función que opere sobre determinada función. Este tipo de procedimiento MATLAB lo realiza con una función de funciones; function functions, que utiliza una o más funciones como argumentos de entrada a una función, que va a ser evaluada para obtener los resultados deseados. La sintaxis, el objetivo y el contenido de estas funciones pueden verse al solicitar help funfun en la línea de comandos. Una forma de realizar este procedimiento es mediante una función anónima. Por ejemplo: La función fzero, encuentra la raíz de una función escalar de una variable en la proximidad del punto declarado; Primeramente encuentra un intervalo conteniendo a x donde la función cambia de signo y a continuación busca en ese intervalo el cero de la función. Su sintaxis es: x = fzero (fun, x0) La función fun acepta como parámetro de entrada valores de x reales escalares y retorna valores reales escalares de la función fun evaluada en el punto x. El valor que retorna fzero está en la proximidad donde fun cambia de signo si es continua o NaN si el proceso de búsqueda falla. Ejemplo: >> f=@(x) sin(x); >> fzero(f,2)

Page 23: Curso Básico MATLAB

23

ans = 3.1416 Otro ejemplo: La función x = fminbnd (fun, x1, x2) trata de encontrar un mínimo local de la función fun en el intervalo x1 <= x <= x2. >> f = @(x) 3*x^2+5*x-2; >> y = fminbnd (f, 2, 6) y = 2 >> y = fminbnd (f, -15, 6) y = -0.8333 2.8 ¿Que utilizar? ¿Libretos o funciones? Los scripts o libretos son siempre interpretados y ejecutados línea a línea no importa el número de veces que sean llamados y, por supuesto, MATLAB emplea tiempo en ello. En contraste, las funciones son compiladas en memoria cuando se llaman por primera vez y si son necesaria llamarlas de nuevo, se esquiva ese paso. Por esta razón se recomienda realizar la programación en términos de funciones M-Files. Como regla práctica, los libretos se deben de llamar sólo desde la línea de comandos y no se deben llamar desde otro libreto. 2.9 Cadenas de textos, entrada de datos y mensajes de errores Las cadenas de textos pueden introducirse en MATLAB al encerrar el grupo de palabras en simple comilla. Por ejemplo para asignarle a la variable s una cadena de texto se escribe: s = ‘Esto es una demostración para establecer una cadena de texto’ Las cadenas de texto se muestran con el comando disp. Por ejemplo: >> disp(s) Esto es una demostración para establecer una cadena de texto

Page 24: Curso Básico MATLAB

24

Los mensajes de error se muestran más adecuadamente con el comando error ya que cuando se sitúa en un M-File, se aborta la ejecución del mismo. En un M-File, se puede actuar interactivamente para la entrada de datos con la función input. Por ejemplo: >> Pn = input ('Potencia nominal en kW, Pn= '); Potencia nominal en kW, Pn = En este caso se despliega un mensaje en el prompt y se realiza una pausa en la ejecución del programa hasta que se introduzca el dato solicitado. Presionando la tecla de aceptación, el dato se asigna a la variable solicitada y se continúa la ejecución del programa. Finalmente es necesario saber que en las funciones de MATLAB se pueden encontrar órdenes que son imposibles de ejecutar. En este caso se emite una señal de error desplegando un mensaje en la ventana de comandos, se detiene la ejecución del programa y se ignoran los argumentos de salida de la función. Similar a un error es la señal de alerta (warning) la cual despliega un mensaje pero permite que la ejecución continúe. Es posible crear estas señales de alerta e incluso tener la capacidad de esquivar un error en una subrutina y continuar con un plan de contingencia usando los comandos try y catch. Con este objetivo se debe consultar la ayuda 2.10 Declaración de variables globales Cada función en MATLAB definida en un M-File posee sus propias variables locales las cuales son independientes de las variables de otra función y de las que se encuentran en el espacio de trabajo (workspace). Desde luego, si varias funciones y el espacio de trabajo declaran una variable en particular global, todos compartirán esa variable. Cualquier asignación a esa variable, en cualquier función, está disponible a todas las otras funciones que la declaran global. Si la variable declarada global no existe en el momento que se ha declarado global, tomará por asignación el valor de una matriz vacía. Si una variable con el mismo nombre que la variable global existe en el espacio de trabajo, MATLAB emite una alerta y cambia el valor de esa variable para que concuerde con la declarada global. Ejemplo: global Vab Vbc Vca Ia Ib Ic Pt St FDVC ; declara globales esas 9 variables

Page 25: Curso Básico MATLAB

25

2.11 Lazos for y while Las condicionales en MATLAB operan de forma similar a como lo hacen en la mayoría de los programas de computación. Ellas son especialmente útiles cuando se desea repetir o desviar una sección de cálculos en dependencia de las condiciones en la rutina. 2.11.1 for La instrucción for se utiliza para repetir un argumento un número específico de veces. La sintaxis general es: for variable = expresión argumento ... argumento end Los valores de la expresión son almacenados uno a la vez en la variable mientras el siguiente argumento, hasta el último, es ejecutado. En la práctica la expresión es casi siempre de la forma escalar : escalar. El alcance del argumento for se concluye con la orden end. >> for x =1:4 y = 2*x end y = 2 y = 4 y = 6 y = 8 2.11.2 While while repite los argumentos un número indefinido de veces mientras se mantenga una condición. Su sintaxis es: while expresión argumentos

Page 26: Curso Básico MATLAB

26

end Los argumentos son ejecutados mientras la expresión sea cierta. Por ejemplo, dado un número positivo x, se calcula y se muestra el menor número no negativo que cumple la relación 2n +2n ≥ x >> x = 16; n = 0; while 2^n +2*n < x n = n+1; end >> n n = 4 2.12 Condicionales if y switch Cuando se necesita modificar la ejecución de los argumentos en dependencia de las condiciones en la rutina, se utilizan comandos condicionales similares a los utilizados en otros lenguajes. 2.12.1 if La forma más simple de un argumento condicional if es: if relación argumento end En este caso el argumento será ejecutado sólo si la relación es cierta. También es posible utilizar múltiples ramas como se muestra a continuación: if x > 6 y = x^2 +3 elseif -1< x<6 y = 2*x^2+3*x-1 else y = 0.98 end El condicionante if puede emplear operadores relacionales o funciones que retornen valores lógicos así como condicionantes lógicos combinados evaluados de izquierda a derecha. Por ejemplo:

Page 27: Curso Básico MATLAB

27

if (length (x) > 4) & (x(3) = =2) argumento end La sintaxis if / elseif se emplea cuando son dos o tres las opciones que presenta una condicional. Cuando existe un número mayor de opciones, se emplea switch 2.12.2 switch El comando switch cambia o permuta entre varios casos de acuerdo a la expresión. La forma general de sintaxis es: switch switch_expr case case_expr, argumento… case {case_expr1, case_expr2, case_expr3,...} argumento ... otherwise argumento end Los argumentos que siguen al primer caso son ejecutados si coinciden con la expresión de cambio declarada. Cuando la expresión de cambio se encuentra en un arreglo como en el segundo caso, el cambio se ejecuta si sólo uno de los elementos del arreglo coincide con la expresión de cambio. Si ninguno coincide, se pasa a la opción otherwise. Sólo se ejecuta un caso y la ejecución concluye con el argumento final end. Por ejemplo: >> x = 6; switch x case x > 2 disp ('bien') case x <2 disp ('mal') otherwise x = 0.1 end x = 0.1000

Page 28: Curso Básico MATLAB

28

2.13 Depurar y perfilar Para depurar un programa que no corre, se pueden establecer puntos de rupturas breakpoints en una o más funciones (Ver el menú debut en el editor de M-Files). Cuando MATLAB alcanza un breakpoint, se detiene y permite inspeccionar y modificar las variables. La ejecución se puede reiniciar normalmente o paso a paso. Para más detalles solicitar help debug. Cuando un programa emplea más tiempo que el necesario para ejecutarse, se puede optimizar su ejecución. Es posible localizar las líneas retardadas con profiling que mantiene el control del tiempo empleado en cada línea de cada función. Perfilar es también una vía de determinar la dependencia de las funciones. Para introducirse se debe escribir en la línea de comandos profile viewer. 3. Gráficos Una de las fortalezas de MATLAB es el tratamiento gráfico. MATLAB posee control sobre todos los aspectos de un gráfico adjudicándole poder, elegancia y disfrute en la ejecución. 3.1 Gráficos en dos dimensiones; x, y Para desarrollar gráficos en dos dimensiones MATLAB dispone de un comando fundamental denominado plot. Normalmente se utilizan segmentos de línea para conectar los puntos correspondientes a los vectores de coordenadas x, y. Existen diversos recursos para resaltar o distinguir los pares ordenados de un gráfico. Un ejemplo que se recomienda desarrollar en la ventana de comandos: x=[-pi:0.1:pi]; y=cos(x) - 2*sin(2*x-pi/3); plot(x,y); xlabel('coordx'); ylabel('coordy'); title('función trigonométrica');

Page 29: Curso Básico MATLAB

29

grid on; En la primera línea se define el intervalo de variación de las x, en la segunda se calcula la expresión de y a partir de las función trigonométrica definida. En la tercera línea el comando plot calcula y muestra la gráfica de los pares (x, y). Los comandos xlabel , ylabel y title tienen como objetivo imprimir en el gráfico el nombre que se le dará a los ejes x ,y y su título. La función grid on activa una rejilla en el intervalo en que ha sido evaluada la función. La ayuda de MATLAB brinda más posibilidades para cambiar el color de las líneas, marcar con puntos, cruces, círculos, etc los pares (x,y). Consulte la ayuda del MATLAB para más posibilidades. Los comandos zoom y ginput permiten aproximar y precisar puntos sobre la gráfica. Si se desean obtener varios gráficos superpuestos (deben ser compatibles), se emplea el comando hold on Con la interfase gráfica y los botones de la barra de menú principal se pueden realizar diversas transformaciones y obtener una figura como la mostrada a la derecha. En el ejemplo a continuación se muestra el trabajo con la herramienta de ploteo de MATLAB para graficar una variable existente en el espacio de trabajo; (workspace), vs una expresión escrita en el diálogo Add Data de Plot tools. Los pasos son: 1.- Se crea una variable en el espacio de trabajo denominada x = -2*pi:pi/25:2*pi; 2.-Haciendo clic en el botón inicio en la ventana de MATLAB ir a MATLAB y hacer clik en la herramienta Plot tools. 3.- Hacer Click en 2D Axes en el panel de la Figure Palette. Una vez que aparezcan los ejes, se activa el botón de adicionar datos; Add Data, en el navegador de ploteo. Con esta acción se despliega la ventana para adicionar datos a los ejes; Add Data to Axes.

Page 30: Curso Básico MATLAB

30

4.- Cuando el dialogo se despliega, se procede de la forma siguiente: a) Se selecciona el tipo de gráfico que se desea en Plot Type; lineal, logarítmico, semilogarítmico, polar, etc. b) Se establece como fuente de datos el vector x declarado o existente en el espacio de trabajo. c) Se escribe en y la función que se desee. (Para el caso sin(x).^2. ) y se hace clic en aceptar; ok MATLAB dibuja el gráfico de sin(x).^2 vs. x. Para agregar otro gráfico sobre los mismos ejes se procede de la forma siguiente: 1.- Se hace click otra vez en Add Data y se especifican los datos a plotear: 2.- Se establece como fuente de datos el vector x existente en el espacio de trabajo. 3.- Se escribe en y la nueva función que se desee. (Para el caso sin(x). ^8. ) y se hace clic en aceptar; ok 4.- MATLAB dibuja el gráfico de sin(x). ^8 vs x. 5.-Seleccione el último gráfico y establezca en el Plot Type del Property Editor el tipo de gráfico que desea para esta segunda función Para acceder a todas las propiedades de la figura se visita el inspector. 3.2 Gráficos tridimensionales El primer paso para crear un gráfico tridimensional es conformar una malla de puntos en el plano (x,y). Esos serán los puntos donde la función f será evaluada para obtener las respuestas en la dimensión z. Un ejemplo: x = pi*(0:0.02:1); y = 2*x; [x,y] = meshgrid(x,y); surf(x,y,sin(x.^2+y))

Una vez que el gráfico se ha creado, se utiliza el botón de rotación de la figura para darle la vista que se desea ver en la pantalla.

Page 31: Curso Básico MATLAB

31

Para adicionar el título de la figura, de los ejes y las propiedades de éstos, se utilizan las opciones de edición grafica que proporciona la barra de menú de la figura. La rotación, el rotulado de ejes y el título de la figura se han adicionado por este procedimiento y se muestra a la derecha. 3.3 Más sobre el comando plot En un gráfico se pueden obtener diversos tipos de líneas, símbolos y colores con el comando plot(x,y,s) siendo s una cadena de caracteres compuestos por elementos de las columnas siguientes:

Estilos Símbolo Color - sólida . puntos b azul : con puntos o círculos g verde -. punto y raya x cruces r rojo

(none) sin línea + más c cianurado -- guionada * estrellas m magenta s cuadrados y amarillo d diamantes k negro v triángulos (hacia abajo) ^ triángulos (hacia arriba) < triángulos (a la izquierda) > triángulos (a la derecha) p pentagrama h hexagrama

Por ejemplo plot(x,y,’g+:’) grafica con una línea de cruces color verde en cada punto donde se han evaluado los datos. plot(x,y,’bd’) dibuja un diamante azul en cada punto pero sin línea. El comando plot, si no especifica el color, toma por asignación el azul para gráficos de una línea y en el caso de un gráfico de múltiples líneas utiliza el ciclo de colores listado en la tabla. Si no se especifica el tipo de línea, se usa una línea sólida. Si no se especifica el símbolo, no se emplea ninguno. Para más información consultar help plot. 3.4 Salvando las figuras. En ocasiones sucede que una figura necesita ser modificada después de su creación. Aunque existen otros procedimientos para salvarla, en la barra de menú de la figura; botón archivo; en save as, se salva como un

Page 32: Curso Básico MATLAB

32

archivo del tipo *. fig con el nombre que se desee. Luego, con el comando; openfig myfig puede llamarse para efectuar las transformaciones o recrearla como se desee. 3.5 Publicación de figuras Existen tres cuestiones importantes que deben considerarse cuando se desea incluir algún gráfico de MATLAB en un documento para su publicación. El formato del archivo, el tamaño y posición y el color. Ayuda a comprender la importancia el hecho de que lo que desee ve en la pantalla no es exactamente lo que se obtiene en el papel porque MATLAB distorsiona los gráficos dependiendo del dispositivo de salida. La gran diferencia en los formatos de los gráficos está entre la selección de vector (representando las líneas en una imagen) y bitmap (una fotografía literal píxel a píxel). Bitmaps incluyendo GIF, JPEG, PNG, y TIFF, son apropiados para fotografías pero no para otras aplicaciones científicas. Esos formatos fijan la resolución de su imagen por siempre, mientras la resolución de su pantalla, impresora y la impresora de la revista pueden ser todas muy diferentes. Los formatos vectoriales son usualmente una mejor opción. Entre estos se encuentran EPS y WMF. La selección depende algo de su plataforma y procesador de palabras. Un problema común con la publicación de gráficos en MATLAB es el tamaño. Por asignación, los gráficos en MATLAB son hechos en 8×6 pulgadas sobre el papel. Esto es excesivo para muchas revistas y para uso privado. En estos casos se reescala la imagen. Desde luego, el proceso de reescalar reduce todo incluyendo el ancho de las líneas y el tamaño del texto y el resultado puede ser difícil de leer. Para este procedimiento se sugiere reescalar el gráfico antes de exportarlo. Para reescalar antes de exportar se puede utilizar la opción de edición gráfica que proporciona la barra de menú de la figura; Archivo / Page Setup. Muchas revistas no aceptan figuras a color. Las líneas coloreadas son convertidas automáticamente a negro cuando se salvan en un formato sin color. De esta forma se deben distinguir las líneas por otras características tales como símbolos o estilo de línea. La opción Archivo/Export setup de la barra de menú de la figura, brinda un procedimiento para introducir cambios en la apariencia incluyendo el tamaño y color en diferentes contextos (imprimir, presentación, etc.). Finalmente es una buena idea salvar la figura en formato *.fig para ser recreada y en formato EPS en el mismo directorio. 3.6 Subplot El comando subplot permite desplegar varias figuras en la misma ventana o imprimirlas en la misma hoja de papel. La sintaxis:

Page 33: Curso Básico MATLAB

33

subplot(m,n,p) Tiene la función de crear una matriz de (m filas×n columnas) de gráficos numerados por filas comenzando por la primera fila y a continuación la segunda fila, etc. Subplot selecciona el orden p para ubicarlo. Por ejemplo para plotear datos en cuatro regiones diferentes de una ventana de figuras: t=[-pi:0.1:pi]; [X,Y,Z]=cylinder(4*cos(t) - 2*sin(2*t-pi/3)); subplot(2,2,1) mesh(X) xlabel('X'); ylabel('Y'); zlabel('Z') title('Función muy especial'); subplot(2,2,2):mesh(Y) xlabel('X'); ylabel('Y'); zlabel('Z') subplot(2,2,3):mesh(Z) xlabel('X'); ylabel('Y'); zlabel('Z') subplot(2,2,4):mesh(X,Y,Z) xlabel('X'); ylabel('Y'); zlabel('Z') La posición es:

⎥⎦

⎤⎢⎣

⎡2,4)subplot(2, 2,3)subplot(2,2,2)subplot(2, 2,1)subplot(2,

Con las opciones el menú en la barra de la figura se puede modificar cada uno de los gráficos obtenidos. 3.7 Gráficos de argumentos complejos Cuando los argumentos a graficar son complejos, la parte imaginaria es ignorada excepto cuando el ploteo se realiza sobre un argumento complejo simple z. Para este caso especial se grafica la parte real contra la imaginaria.

Page 34: Curso Básico MATLAB

34

4 Métodos numéricos en MATLAB 4.1 Polinomios La representación de polinomios en MATLAB se realiza mediante la escritura del vector de sus coeficientes en potencias decrecientes. Así el polinomio 432)( 2 ++= xxxp está dado por: x = [2,3,4]; Las raíces del polinomio se obtienen con la función roots roots(x) ans = -0.7500 + 1.1990i -0.7500 - 1.1990i Para el trabajo con polinomios existen un grupo de comandos con funciones específicas. Estos son: poly El comando poly(x), cuando x es el vector de las raíces del polinomio, arroja como respuesta un vector cuyos elementos son los coeficientes del polinomio original con las raíces x. Si roots encuentra las raíces, poly encuentra el polinomio que posee determinadas raíces. roots y poly son funciones inversas para vectores. Para evaluar un polinomio en varios puntos se emplea la función polyval. x = [0:.1:2]; a = [3,4,5]; y = polyval(a,x); plot(polyval(a,x),'r') Una cuestión que puede resultar importante en el trabajo con polinomios es el ajuste de un conjunto de datos experimentales (x, y) a un polinomio de cierto grado según el criterio de los mínimos cuadrados. Esto se realiza con polyfit. Ejemplo: Dado un conjunto de datos: x = [ 1 2 3 4 5]; y = [ 3.5 8.9 19 30.6 49.3]; >> b= polyfit(x,y,2); >> plot(x,y,'r+') hold on

Page 35: Curso Básico MATLAB

35

plot(polyval(b,x)) El polinomio de grado 2 que se ajusta por mínimos cuadrados es: b= polyfit(x,y,2) b =[2.0071 -0.7129 2.3200]

Las últimas órdenes se han dado para graficar los puntos experimentales y el resultado de la ecuación de ajuste con la intención de comprobar visualmente la aproximación La interpolación es el proceso matemático mediante el cual a partir de un conjunto de puntos discretos de una función es posible estimar sus valores en el intervalo. Existen diversas funciones en MATLAB que permiten realizar estos cálculos. Una de ellas es interp1 que realiza una interpolación lineal por el método de los mínimos cuadrados. Como ejemplo se toma el conjunto de pares ordenados de resistencia y temperatura de un termopar con los valores siguientes: R= [77.8 79.75 80.8 82.35 83.9 85.1] T= [25.1 30.1 36.0 40.1 45.2 50.5]

Para determinar la temperatura en un punto intermedio de la tabla, por ejemplo 27.5 se procede:

Rt = interp1(T,R,26.5)

Rt = 78.3460

El resultado corresponde a la interpolación lineal entre los dos primeros pares de los vectores T y R. Existen otros métodos de interpolación que deben ser revisados consultando las posibilidades de ayuda de MATLAB. Los polinomios pueden ser derivados e integrados con los comandos polyder y polyint.

4.2 Más sobre el ajuste con polinomios. Un ejemplo de interfase gráfica es polytool. Considérese el conjunto de datos siguiente: y = [.5 .82 1.14 1.25 1.35 1.40] x= [0 0.3000 0.8000 1.1000 1.6000 2.3000] polytool (x,y) ajusta el polinomio a los pares (x,y) y despliega un gráfico interactivo.

Page 36: Curso Básico MATLAB

36

y x( ) 1

x2 5 x. 62

polytool(x,y,n,alpha) predice una gráfica que responde a un polinomio de orden n en los puntos (x,y) y adicionalmente indica el intervalo de confidencial 100(1-alpha) en forma de dos líneas de color rojo. El valor por asignación de n es 1 y el de alpha es 0.05. Para más información consulte la ayuda help polytool 4.3 Solución de Ecuaciones. Una de las formas en que MATLAB resuelve ecuaciones es con el empleo de las funciones: fzero, fplot, quad y quad8 que permiten hallar los ceros, graficar y realizar la integración numérica de funciones no lineales. Considere el cálculo de los ceros empleando la función fzero de la función:

Primero se edita un archivo M-file que denote la función, denominado fun1.

Para graficar este tipo de funciones se puede usar la función fplot. A la izquierda se muestra el resultado de plotear fun1 en el intervalo de 0 a 5. Donde se nota que la función se indefine en dos puntos y tiene dos ceros en 1.62 y 3.37. Los ceros se obtienen llamando a la función de la forma siguiente: cero1=fzero('fun1',0) cero1 =1.6340 cero2=fzero('fun1',3.2) cero2 = 3.3660

Es posible calcular la integral numérica de la función fun1 entre dos puntos, con la función quad. Para ello se escogen valores donde no se indefine la función: area=quad('fun1',2.1,2.9) area = -5.9945 4.4 Sistemas de ecuaciones lineales. Para la solución de sistemas de ecuaciones lineales se emplea el álgebra lineal. El sistema de ecuaciones lineales:

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5-15

-10

-5

0

5

10

x

y

Fun1(x)

Page 37: Curso Básico MATLAB

37

x1 + x2 + 2 x3 = -1 2x1 - x2 + 2x3 = -4 4x1 + x2 + 4x3 = -3 Es posible representarlo por la matriz A de los coeficientes de las incógnitas y el vector columna b de los términos independientes: A x = b

A = [1 1 2; 2 -1 2; 4 1 4] A = 1 1 2 2 -1 2 4 1 4 » b = [-1 -4 -3]' b = -1 -4 -3

Para que el sistema tenga solución, el determinante debe ser no singular. Esto se comprueba con la función det.

» det(A) ans = 6

Una solución del sistema se obtiene al emplear el método de Kramer, donde x1 se obtiene al sustituir en la matriz original la columna 1 por el vector columna del término independiente y efectuar la división entre los determinantes correspondientes:

A1 = -1 1 2 -4 -1 2 -2 1 4 » x1=det(A1)/det(A)

Page 38: Curso Básico MATLAB

38

x1 = 1

Y así sucesivamente para cada variable. Sin embargo esto es posible hacerlo en forma directa con el operador \ . Obteniendo directamente el vector x de las incógnitas:

» x= A \ b

x =

1

2

-2

También puede implementarse el método de eliminación de Gauss o factorización LU, que expresa que cualquier matriz cuadrada se puede descomponer en el producto de dos matrices L y U triangulares, una L triangular inferior permutada y otra U triangular superior. Esto se calcula con la función lu.

[L, U] = lu(A) L = 0.2500 -0.5000 1.0000 0.5000 1.0000 0 1.0000 0 0 U = 4.0000 1.0000 4.0000 0 -1.5000 0 0 0 1.0000 » L * U ans = 1 1 2 2 -1 2 4 1 4

Permitiendo calcular x más eficientemente mediante:

x = U \ (L \ b) x = 1

Page 39: Curso Básico MATLAB

39

2 -2

4.5 Regresión Lineal Múltiple El propósito de una ecuación de regresión lineal múltiple es establecer una relación cuantitativa entre un grupo de variables de predicción insertadas por columna X y la respuesta Y. Esta relación es útil para: 1.- Conocer que variables poseen el mayor efecto sobre la respuesta Y 2.- Conocer la dirección de ese efecto. 3.- Usar el modelo para predecir valores futuros cuando sólo se conocen o planifican los valores predictores 4.5.1 Ecuaciones de regresión lineal múltiple Si Y es una función de varias variables independientes X, es posible encontrar los coeficientes que afectan cada variable para determinar la ecuación general que caracteriza al sistema. Por ejemplo: Sean MP, P y B los vectores columnas de las variables independientes que determinan el consumo de energía eléctrica; MWh, de una empresa. En este caso la ecuación de regresión lineal estaría dada por: Electrica = Kowh + K1wh*MP + K2wh*P + K3wh*B El problema se resuelve al determinar los coeficientes Kiwh para lo cual se emplea la sintaxis: X = [ones(size(MP)) MP P B]; Kiwh=X\MWh; Quedando definida la función al conocer cada uno de los coeficientes Kowh…Kiwh. 4.5.2 Ecuación de regresión polinómica Basado en la experiencia o en la observación gráfica, es posible que los datos sean modelados por una función polinómica. Los coeficientes desconocidos a0, a1, y a2 pueden determinarse mediante mínimos cuadrados lo cual minimiza la suma de los cuadrados de las desviaciones experimentales de los obtenidos por el modelo.

2210tataay ++=

Page 40: Curso Básico MATLAB

40

⎥⎥⎥

⎢⎢⎢

⎥⎥⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢⎢⎢

=

⎥⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢⎢

2

1

0

266

255

244

233

222

211

6

5

4

3

2

1

*

1

11111

aaa

tt

tttttttttt

yyyyyy

X = [ones(size(t)) t t.^2] a = X\y 4.6 Estadística en MATLAB. Existe un paquete de funciones de estadística muy fuerte que pueden observarse al consultar la documentación estadística de MATLAB. Las funciones de uso más frecuente mean [promedio], median [mediana], range [rango], std [desviación estandard] y var [varianza] se implementan fácilmente. Finalmente la interfase gráfica disttool posibilita trabajar con las funciones de distribución más importantes. 5 MATEMATICA SIMBOLICA. 5.1 Creación de variables y expresiones simbólicas En matemática simbólica los resultados obtenidos no son numéricos sino símbolos que siguen las mismas convenciones que diaria y normalmente son empleadas en el algebra. Para que MATLAB reconozca las variables simbólicas éstas deben primeramente ser declaradas. Para ello se utilizan los comandos sym o syms.

syms x a b c » (a+b)^2 ans = (a+b)^2 » expand(ans)

ans = a^2+2*a*b+b^2

Después de declaradas las variables simbólicas a y b, se puede obtener el binomio cuadrado perfecto resolviendo la factorización con expand. El comando factor efectúa el proceso inverso. En matemática simbólica es posible definir funciones y calcular sus derivadas.

Page 41: Curso Básico MATLAB

41

» y = sin(a*x+b) y = sin(a*x+b) » dydx=diff(y) Calcula la derivada respecto a x dydx = cos(a*x+b)*a

Si se desea darles valores a los coeficientes, se emplea la función subs.

subs(dydx,{a b},{2 pi/2}) Indicándose la sustitución de los parámetros a y b por los valores 2 y pi/2. ans = -2*sin(2*x)

El comando sym permite construir variables y expresiones simbólicas con el objetivo de efectuar operaciones con ella. Por ejemplo el comando m = sym(‘sqrt(cosfi^2 + 2*senfi)’) declara a m una variable simbólica que representa a una expresión. Ahora es posible efectuar operaciones con esa variable que representa la expresión. f = 2*m^2 – 3*m +1 En general se puede usar sym o syms para crear variables simbólicas. Es preferible usar syms ya que requiere menos escritura. Debe notarse que para declarar una constante como variable simbólica, es necesario utilizar el comando sym. Si se utiliza una variable para representar una expresión simbólica, y se vuelve a aplicar el comando syms a esta variable, MATLAB actualiza y desconoce las variables previamente declaradas. Por ejemplo: syms a b f = a + b f = a+b Si de Nuevo se declara syms f MATLAB arroja f = f Esto muestra la utilidad de emplear el comando syms para limpiar variables o definiciones previamente asignadas en una sesión de MATLAB. El comando findsym determina las variables simbólicas en una expresión. Por ejemplo dadas las expresiones simbólicas f y g definidas por syms a b n t x z

Page 42: Curso Básico MATLAB

42

f = x^n; g = sin(a*t + b); es posible encontrar las variables simbólicas en f entrando: findsym(f) ans = n, x Similarmente se encuentran las de g: findsym(g) ans = a, b, t Con el comando subs se le dan valores numéricos a una variable simbólica. Por ejemplo para sustituir el valor de x =2 en la expresión simbólica f = 2*x^2 - 3*x + 1 Se entra el comando subs(f,2) Que arroja el resultado f(2): ans = 3 Para sustituir una matriz A en la expresión simbólica f, se usa el comando polyvalm(sym2poly(f), A), que reemplaza x por A y el término constante f por la matriz identidad correspondiente. Cuando las expresiones contienen más de una variable, se puede especificar que variable es la que se desea sustituir. Por ejemplo: Para sustituir el valor x = 3 en la expresión simbólica syms x y f = x^2*y + 5*x*sqrt(y) se introduce el comando subs(f, x, 3) lo que arroja ans = 9*y+15*y^(1/2) De otra parte, para sustituir y = 3, se introduce subs(f, y, 3) ans = 3*x^2+5*x*3^(1/2) 5.2 Creación de funciones matemáticas simbólicas Existen dos vías para crear funciones: Usar expresiones simbólicas o crear un M-File usando expresiones simbólicas. La secuencia de comandos para generar las expresiones simbólicas r, t y f. son: syms x y z r = sqrt(x^2 + y^2 + z^2) t = atan(y/x) f = sin(x*y)/(x*y)

Page 43: Curso Básico MATLAB

43

Utilizando los comandos diff, int, subs, y otras funciones existentes en la caja de herramientas de Matemática Simbólica (Symbolic Math Toolbox ) , se pueden manipular tales expresiones. Creando un M-File es posible un uso más general. Por ejemplo: se desea crear la función sinc; sin(x)/x. Para hacer esto se crea un M-file en el directorio @sym: function z = sinc(x) %sinc la función simbólica sinc % sin(x)/x. esta función acepta sym como el argumento de entrada if isequal(x,sym(0)) z = 1; else z = sin(x)/x; end Es posible extender estos ejemplos a funciones de varias variables. Para ello se recomienda solicitar la ayuda, ver los aspectos de “Programming and Data Types” en la documentación en línea de MATLAB o para una discusión más detallada, revisar la programación orientada por objeto. Para resolver ecuaciones algebraicas, se utiliza la función simbólica solve. Por ejemplo para resolver la ecuación de segundo grado:

syms x a b c % Se declaran las variables y=a*x^2+b*x+c %Definición de la función y = a*x^2+b*x+c solve(y) % Búsqueda de la solución simbólica ans = % Resultado [ 1/2/a*(-b+(b^2-4*a*c)^(1/2))] [ 1/2/a*(-b-(b^2-4*a*c)^(1/2))]

Si se desea resolver una ecuación trascendente como:

5.1+= xe x Se utiliza la sintaxis:

sol = solve( 'x+1.5=exp(x)' );] double(sol) ans = -1.1983 0.8577

Page 44: Curso Básico MATLAB

44

-1 -0.5 0 0.5 1 1.5-4

-3

-2

-1

0

1

2

3

4

5

6

x

exp(x)

Es posible comprobar el resultado gráficamente pero también en el ambiente simbólico, empleando el comando ezplot. Intente obtener el siguiente gráfico con dicho comando, consulte la ayuda correspondiente.

Para resolver sistemas de ecuaciones se emplea también solve. Supóngase que se necesita calcular:

13.0123

21

21

−=−=+

xxxx

La solución se obtiene en una sintaxis de dos cadenas; una para cada ecuación:

[x1,x2] = solve ('3*x1+2*x2=1','x1-0.3*x2=-1') x1 = -.5862068965 x2 = 1.3793103448 Para resolver ecuaciones diferenciales ordinarias, se

emplea el comando dsolve. La sintaxis es muy similar a solve, donde se emplean los símbolos Dy , D2y etc, para representar las derivadas de primer orden y segundo orden dy/dx, dy2 / dx2 respectivamente. En este ejemplo:

21)( ydx

yd+= y(0) = 1 condición inicial.

La solución se calcula como: y= dsolve('Dy=1+y^2','y(0)=1') y = tan(t+1/4*pi) Note que la solución es una función .

Se puede calcular el área bajo la curva de dicha función; por ejemplo en el intervalo entre [-2 , 0 ] con la función simbólica: » int(y,-2,0) ans = -1/2*log(1+tan(2)^2)+log(-1-tan(2)) » double(ans) ans = -0.7069

-6 -4 -2 0 2 4 6

-6

-4

-2

0

2

4

6

t

tan(t+1/4*pi)

Page 45: Curso Básico MATLAB

45

Otros comandos importantes en Matemática Simbólica son collect, horner, simplify y simple. Analice los ejemplos mostrados y consulte la ayuda para más información. Para polinomios, collect, reagrupa todos los coeficientes con la misma potencia de x:

» y=(x-1)*(x-1/2)*(x+5); » collect(y) ans = x^3+7/2*x^2-7*x+5/2 » horner(ans) Resuelve según el esquema de Horner ans = 5/2+(-7+(7/2+x)*x)*x

Simplify y simple son potentes herramientas algebraicas.

» simplify(log(x*y))

ans = log(x*y)

simplify( cos(x)^2+ sin(x)^2); ans= 1 En Matemática simbólica se puede trabajar con las transformadas de laplace, fourier con las funciones simbólicas correspondientes: f =exp(-x^2) » fourier(f) ans = pi^(1/2)*exp(-1/4*w^2) Compruebe finalmente el empleo la función funtool en variable simbólica como un calculador de funciones. Consulte la ayuda.

6.- SIMULINK Simulink es un software especializado para modelar, simular y analizar sistemas dinámicos lineales o no lineales. En su ambiente es posible construir modelos propios o simular y modificar modelos existentes mediante la adición de nuevos elementos. Las simulaciones son interactivas de modo que permite cambiar los parámetros y observar que sucede a la vez que brinda acceso a todas las herramientas de análisis de MATLAB, para visualizar y analizar los resultados. Un objetivo de Simulink es dar sentido funcional a la simulación de modo que, realizando ésta, es posible ver que sucede antes de que un modelo sea llevado a la realidad. Simulink permite sobrepasar los límites de la linealización y explorar otros modelos más reales. En resumen, la meta principal es convertir su PC en un laboratorio para desarrollar ideas que amplíen todo tipo de posibilidad.

Page 46: Curso Básico MATLAB

46

6.1 Creación de un modelo. Para crear un modelo simplemente se busca el bloque de interés en cualesquiera de las bibliotecas básicas del ambiente Simulink ( Sources, Sinks, Linear, Nonlinear, Discrete, Connections y Blocksets & Toolboxes. Como indicaciones generales la biblioteca Source define los tipos de estímulo o señales, Sink brinda los bloques de visualización y Connections, los elementos o bloques en las conexiones. Consulte la ayuda para una descripción más detallada de las mismas

Para tomar un bloque de una biblioteca en particular, solo es necesario indicarlo con el botón izquierdo del mouse y arrastrarlo hacia la ventana del Simulink y liberarlo. Así se procede con todos los bloques necesarios. Otras operaciones con los bloques son: • Conectar bloques entre si: posesionar el cursor sobre el terminal de salida del bloque origen, hacer

click y enlazar con el terminal de entrada correspondiente del bloque destino. • Dibujar una rama: posesionar en la línea y presionar CTRL. • Mover línea: marcarla y arrastrarla. • Crear un vértice en línea: marcarla y presionar SHIFT. • Ancho de línea con format. • Etiquetas en líneas: doble click sobre la línea. • Etiqueta en la ventana: doble click en el lugar de interés. • Seleccionar bloques: click. Si son múltiples, adicionar SHIFT. • Copiar un bloque (duplicarlo). Marcarlo, apretar CTRL y arrastrar. • Cambiar orientación del bloque: con format ( flip-block y rotate). • Cambiar tamaño de bloque: marcar y ampliar esquinas. • Cambiar nombre del bloque: marcar en el nombre y escribir. • Especificar parámetros del bloque: como corresponda según la ventana del bloque.

Page 47: Curso Básico MATLAB

47

Como ejercicio dibuje el sistema de la figura: Practique las principales operaciones sobre el sistema descritas anteriormente. Establezca una señal de amplitud 1 y frecuencia angular 1, continua. Salve el modelo con un nombre en el directorio de trabajo y ajuste los parámetros de la simulación en el menú <Simulation\ Parameters> en particular el tiempo de simulación e inicie la simulación con <Simulation \ Start>. Para ver los resultados de la simulación, doble click en el osciloscopio.

6.2 Subsistemas. El concepto de subsistemas es equivalente al de una subrutina o función en lenguajes de programación. Así cuando se tiene un sistema complejo con muchos componentes es más conveniente agruparlos en subsistemas, los cuales simplifican el número de bloques en el diagrama de trabajo y se establece así una jerarquía de niveles pues se pueden crear subsistemas dentro de otros subsistemas. Es posible poner a punto el programa total ajustando cada uno de sus partes independientemente. Hay dos formas básicas de crear subsistemas: • Agrupando los bloques de interés dentro del diagrama de trabajo y crear un subsistema con estos. • Definiendo a priori un subsistema y creando sus componentes dentro del mismo. El bloque para crear un subsistema se encuentra en la biblioteca < connections>, además deben de usarse los bloques <in > <out > dentro de esa misma biblioteca que definen las entradas y salida al bloque del subsistema. En el ejemplo anterior, se creará un subsistema con los bloques que actúan sobre la señal. Para proceder a crear el subsistema a partir de bloques ya construidos, basta con agruparlos, marcarlos e ir al menú EDIT/ create subsystems el cual es activado al marcar. Abra el subsistema creado y note cómo automáticamente se

Page 48: Curso Básico MATLAB

48

han añadido los puertos <in > <out > que definen la entradas y salidas del subsistema. Para crear el subsistema a partir de cero, copie el bloque <subsysms> , abra el mismo, copie los componentes necesarios incluyendo los puertos de entrada y salida.

6.3 Enmascarar un subsistema. Puede ser conveniente que un determinado subsistema, definido por un conjunto de parámetros, permita modificarlos sin tener que acceder al interior del mismo. Mediante una máscara el subsistema se representa por un icono gráfico, y al acceder a éste aparece un cuadro de diálogo donde se especifican los parámetros particulares en la aplicación. La mayoría de los bloques del Simulink en las distintas bibliotecas están construidos de esta forma.

En este ejemplo se quiere construir un nuevo bloque que modele a una termo resistencia, de acuerdo a los parámetros de la ecuación fundamental de la misma:

)*1()( 0 trtr α−×=

Page 49: Curso Básico MATLAB

49

Donde ro es la resistencia a la temperatura de referencia, usualmente cero grados y alfa es el coeficiente de sensibilidad de la termoresistencia, que expresa cuantos Ohms se varían por grado de temperatura. Si se hace doble click en el bloque en cuestión, no aparece el contenido del bloque sino el cuadro de diálogo siguiente. En este diálogo aparecen los dos parámetros que definen a la termoresistencia los cuales deben ser

especificados convenientemente. Adicionalmente aparece una información sobre el objetivo del bloque. A este procedimiento, que sustituye el modelo de un subsistema, por un bloque con parámetros a variar, se le denomina enmascarar el bloque. Para ver como se ha constituido el bloque, marcar en el menú de comandos de <EDIT/ look_under mask> y aparece el bloque original que ha dado origen a la máscara.

Nótese que hay dos bloques que definen los parámetros en cuestión, los dos bloques de ganancia denominados ALFA y RO. Los pasos para enmascarar un bloque son los siguientes: • Dibujar el bloque • Marcar bloque , activar el editor de máscaras con < EDIT/

edit mask> • Completar el cuadro inicialización. • Completar el cuadro documentación. • Completar el cuadro icono.

Page 50: Curso Básico MATLAB

50

Estos cuadros definen los parámetros del sistema, la ayuda del mismo y la forma del icono gráfico que va a representar el sistema. En este cuadro se escribe la información que va a efectuar la descripción del bloque en la máscara y la que brindará una ayuda de como operar el bloque. En este menú se indican los nombres que van a tener las variables asignadas en el texto de la máscara, en este

caso SENSE y ALFA, las cuales se corresponden con las variables ALFA y R0 del modelo. Defina como tipo de máscara a Simple Masked Block, adicione o borre las variables con ADD y DELETE según se escriban en el mismo. Finalmente con el cuadro de icono, se procede a dibujar un gráfico que represente al bloque, empleando el comando plot, como se indica en el siguiente cuadro de diálogo.

6.4 Otros bloques de interés • Los bloques de la biblioteca Sources, definen un conjunto de señales de entrada de formas distintas. Note

cómo las señales pueden partir del ambiente MATLAB mediante un file name.mat que archive las variables de interés o directamente del workspace.

• Los bloques de la biblioteca Sink, definen como se van a mostrar las salidas de las señales. Además del

osciloscopio y el graficador, las señales se pueden enviar hacia un file.mat o hacia el área de trabajo.

Page 51: Curso Básico MATLAB

51

• En los bloques de las bibliotecas Block Sets y Toolboxes aparecen un conjunto de aplicaciones específicas de Simulink tales como comunicaciones, lógica difusa, procesamiento digital de señales etc. Cada nueva versión del MATLAB incorpora nuevas aplicaciones en estos campos.

• Consulte la ayuda, la documentación gráfica y los demos del MATLAB y Simulink para más información.