Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Luis O. Moncada Albitres Luis D. Moncada Torres Guía de MATLAB para principiantes Guía de MATLAB para principiantes Autores: Luis O. Moncada Albitres Luis D. Moncada Torres Editor: © Luis David Moncada Torres Jr. Negrón Ugarte N°957 – Las Quintanas luisd.moncada@hotmail.com Trujillo – Perú Primera edición digital, febrero 2020 ISBN: 978-612-00-5024-8 Libro digital disponible en www.ingenieriaquimica.tech PROLOGO Guía de MATLAB para principiantes está dirigido a estudiantes que utilizan MATLAB por primera vez y que no tienen conocimientos previos sobre programación. El presente libro tiene por objetivo proporcionar a los estudiantes conocimientos básicos para usar el entorno de MATLAB básicamente como una herramienta para la resolución de problemas. La obra se puede utilizar como un libro de texto para estudiantes de los primeros cursos de ingeniería. El orden de la presentación de los temas ha sido elaborado a partir de la experiencia en la enseñanza de MATLAB en cursos introductorios de ingeniería. El Capítulo 1 nos describe el entorno de trabajo y conceptos básicos de MATLAB, el Capítulo 2 trata la representación de gráficos en dos dimensiones, mientras que el Capítulo 3 trata sobre la utilización del programa para resolver operaciones matemáticas desde unas muy básicas como operaciones aritméticas hasta más complejas como EDOs. El capítulo 4 trata sobre como MATLAB puede ser usado para realizar operaciones con polinomios, el Capítulo 5 muestra el uso de gráficos en tres dimensiones, en el Capítulo 6 se explican los M-archivos, el diseño de funciones y la creación de ficheros script. La programación en MATLAB se aborda en el Capítulo 7, donde se explican desde las sentencias condicionales hasta los bucles. El Capítulo 8, es el último capítulo del presente texto y se aborda la interfaz gráfica de MATLAB. INDICE 1. INICIANDO MATLAB 1 1.1. ¿Qué es MATLAB? 1 1.2. Entorno de trabajo 1 1.3. Asignaciones 3 1.4. Vectores y Matrices 4 1.5. Diferentes formatos para los datos 7 1.6. WHO, WHOS, CLEAR 7 2. GRAFICAS 2D EN MATLAB 9 2.1. El comando plot 9 2.2. El comando subplot 15 2.3. Otras gráficas 16 3. OPERACIONES MATEMÁTICAS 25 3.1. Aritmética elemental 25 3.2. Funciones matemáticas comunes 27 3.3. Ecuaciones 30 3.4. Sistema de ecuaciones lineales 31 3.5. Series 33 3.6. Límites 34 3.7. Derivada de una función 35 3.8. Integral de una función 35 3.9. Ecuaciones diferenciales 37 4. OPERACIONES CON POLINOMIOS 42 4.1. Polinomios 42 4.2. Valor de un polinomio 42 4.3. Ajuste a un polinomio 43 4.4. Suma de polinomios 44 4.5. Producto de dos polinomios 45 4.6. Cociente 45 4.7. Derivada 46 4.8. Integral 46 4.9. Raíces de un polinomio 47 4.10. Factorización 48 4.11. Expansión 48 5. GRAFICAS 3D EN MATLAB 49 5.1. Comando plot3 49 5.2. Comando comet3 50 5.3. Comando mesh 50 5.4. Comando surf 53 6. M-ARCHIVOS 60 6.1. Editor 60 6.2. Script 60 6.3. Funciones 62 7. DECISIONES y CICLOS 64 7.1. Sentencia condicional if 64 7.2. Sentencia condicional if else 67 7.3. Sentencia if anidada 70 7.4. Bucle for 72 7.5. Bucle while 75 8. INTERFAZ GRÁFICA DE USUARIO 78 8.1. Introducción 78 8.2. Inicio 78 8.3. Propiedades de los componentes 81 8.4. Funcionamiento de una aplicación GUI 83 8.5. Manejo de datos entre los elementos de la aplicación y el archivo .m 83 8.6. Sentencias GET Y SET 84 8.7. Radio Button, Button Group 87 8.8. ListBox 90 9. BIBLIOGRAFIA 93 Guía de MATLAB – Para principiantes 1 1. INICIANDO MATLAB 1.1. ¿Qué es MATLAB? Es una herramienta computacional para realizar cálculos numéricos con vectores y matrices, además también se puede trabajar con números escalares, cadenas de caracteres y con otras estructuras de información más complejas. MATLAB es el nombre abreviado de MATrix LABoratory. 1.2. Entorno de trabajo MATLAB dispone de las siguientes sub-ventanas: 1. Ventana de comandos (Command Window) 2. Directorio actual (Current Folder) 3. Espacio de trabajo (Workspace) 4. Historial de comandos (Command History) Ventana de comandos (Command Window) La parte más importante de la ventana inicial es la Ventana de comandos. En esta ventana es donde se ejecutan los comandos luego del promp característico >>. 1 2 4 3 Guía de MATLAB – Para principiantes 2 El símbolo >> determina la línea de comandos donde podremos escribir y ejecutar los comandos. Importante: • Para teclear un comando el cursor debe estar situado después del símbolo >>. • Una vez que el comando se ha tecleado, se pulsa la tecla Intro para ejecutarlo. • Si un comando es demasiado grande (límite máximo de 4096 caracteres) se puede dividir tecleando puntos suspensivos (…) y pulsando la tecla Intro, luego se continua la escritura del comando en la línea siguiente. • Cuando se teclea el símbolo de porcentaje (%) al principio de una línea, MATLAB considerará dicha línea como un comentario. Ejemplo: >> x=rand(10); %Creamos una matriz de 10 x 10 con números aleatorios entre (0 y 1) Espacio de trabajo (Workspace) Esta ventana contiene información sobre todas las variables que se hayan definido en esta sesión y permite ver y modificar las mismas. Al hacer doble clic sobre cualquier variable lanza automáticamente una ventana de documento (Document window) que contiene el editor de variables (Variable editor). Guía de MATLAB – Para principiantes 3 Directorio actual (Current folder) Esta ventana lista todos los archivos en una carpeta, la ubicación por defecto del directorio varía con la versión del software. El directorio actual se puede cambiar y seleccionar otro. Historial de comandos (Command history) La ventana de historial de comandos (Command history) registra los comandos que se escriben en la ventana de comandos y conserva una lista de todos ellos. Conforme ejecute cálculos cada vez más complicados encontrará que la ventana de historia de comandos es útil. 1.3. Asignaciones Uno de los elementos fundamentales en la programación son las variables. Una variable se define como un objeto que puede tomar el mismo valor a lo largo de todo el programa o bien puede ir cambiando al ejecutar diferentes acciones. MATLAB tiene un conjunto de variables predefinidas: ans Contiene el valor del último comando no asignado a una variable. pi Es el valor aproximado de π. eps Representa la diferencia más pequeña entre dos números (2^(- 52)). inf Representa el infinito. i Se define como la raíz cuadrada de -1. j Es igual a i. NaN Es la abreviación de Not a Number. Se usa cuando MATLAB no puede determinar un valor numérico válido. Importante: • Todos los nombres deben comenzar con una letra. • Los nombres pueden tener cualquier longitud, pero sólo se usan los primeros 63 caracteres. (Verificarlo con el comando namelengthmax) • Los únicos caracteres permisibles son letras, números y el guión bajo. Guía de MATLAB – Para principiantes 4 • MATLAB distingue entre mayúsculas y minúsculas por lo que x y X no serán las mismas variables ni lo serán tampoco Nodos, nodos y NODOS. • Con el comando isvarname puede verificar si se permite el nombre de la variable. >> isvarname if ans = 0 >> isvarname luis ans = 1 • El comando iskeyword hace que MATLAB elabore una lista de nombres reservados, es decir que no se pueden asignar como nombres de variable. Ejemplo: >> A=0.5 A = 0.50 >> B=pi B = 3.1416 1.4. Vectores y Matrices Para crear un vector introducimoslos valores deseados separados por espacios (o comas) todo ello entre corchetes [ ]. Si lo que queremos es crear una matriz lo hacemos de forma análoga pero separando las filas con puntos y comas (;). Ejemplo: >> x = [5 7 -2 4 -6] % es un vector, los elementos los separamos con espacios x = 5 7 -2 4 -6 Guía de MATLAB – Para principiantes 5 >> y = [2,1,3,7] % es otro vector, los elementos los separamos con comas y = 2 1 3 7 >> z = [0 1 2,3 4,5] % es otro vector, da igual separar los elementos por comas o espacios z = 0 1 2 3 4 5 >> A = [1 2 3; 4 5 6] % es una matriz con 2 filas y 3 columnas A = 1 2 3 4 5 6 Para acceder a los elementos individuales de un vector o matriz lo haremos utilizando subíndices, así x(n) sería el n-ésimo elemento del vector x. Si queremos acceder al último podemos indicarlo usando end como subíndice. La posición absoluta del elemento en la matriz se determina desde el elemento X11 (posición 1) hacia abajo y luego hacia la derecha siguiendo el siguiente esquema: Ejemplo: >> x = [5 7 -2 4 -6]; >> x (2) % segundo elemento del vector x ans = 7 >> x (end) % último elemento del vector x ans = -6 >> X=[5 7 9 8; 1 4 5 7; 3 3 2 7] X = 5 7 9 8 1 4 5 7 3 3 2 7 >> X(3) % tercer elemento de la matriz X ans = 3 Guía de MATLAB – Para principiantes 6 >> X(10) % décimo elemento de la matriz X ans = 8 >> X(end) % último elemento de la matriz X ans = 7 Para el caso de las matrices también es posible identificar un elemento cualquiera según la siguiente sintaxis: A(fila, columna) Ejemplo: >> X(1,3) % fila número 1, columna número 3 ans = 9 También es posible utilizar el operador “:” para referirse a un conjunto de elementos de una matriz o vector. >> X(:,1) % Todas las filas, columna 1 de la matriz X. ans = 5 1 3 >> X(3,:) % Todas las columnas, fila 3 de la matriz X. ans = 3 3 2 7 >> X(:,:) % Todos los elementos de la matriz. ans = 5 7 9 8 1 4 5 7 3 3 2 7 Guía de MATLAB – Para principiantes 7 1.5. Diferentes formatos para los datos Existen diferentes formatos de salida para los datos en MATLAB. Veamos algunos ejemplos. >> d=1/33 d= 0.0303 >> format short, d %Formato corto, 4 cifras decimales. d = 0.0303 >> format long, d %Formato largo, 14 cifras decimales. d= 0.03030303030303 >> format short e, d %Formato corto con mantisa y exponente. d= 3.0303e-02 >> format long e, d %Formato largo con mantisa y exponente. d= 3.030303030303030e-02 >> format rat, d %Formato racional. d= 1/33 >> format bank, d %Formato con 2 dígitos decimales. d = 0.03 1.6. WHO, WHOS, CLEAR Un comando de uso frecuente es who que nos permite conocer el número y nombre de las variables usadas a lo largo del programa o de la sesión. Su formato es: >> who Your variables are: A u vfil x ans vcol w y Guía de MATLAB – Para principiantes 8 Donde las variables corresponden a otra ejecución del programa. El comando whos nos muestra, además del nombre de las variables, información adicional de cada variable, distinguiendo si es vector o escalar. >> whos Name Size Bytes Class A 3x4 96 double array ans 4x1 32 double array u 1x1 8 double array vcol 4x1 32 double array vfil 1x4 32 double array w 1x1 8 double array x 1x1 8 double array y 1x1 8 double array Debemos tener en cuenta que MATLAB en cada sesión mantiene en memoria todas las variables utilizadas hasta ese momento y que únicamente el comando clear hace que elimine el valor de todas las variables. >> clear Si ahora tecleamos who no se produce ninguna salida. Guía de MATLAB – Para principiantes 9 2. GRAFICAS 2D EN MATLAB 2.1. El comando plot El usuario de MATLAB puede dibujar fácilmente un conjunto de pares de puntos, y una forma de hacerlo es mediante el comando plot. >> plot(argumentos) Ejemplos: Dibujemos el vector de ordenadas y el de abscisas: >> x=[-4 -2 0 1 3 5]; >> y=[16 4 0 1 9 25]; >> plot(x,y); Guía de MATLAB – Para principiantes 10 Dibujemos un vector de números complejos: >> z=[1 2+i 3 2-i 3-2*i]; >> plot(z); Dibujemos una matriz: >> A=[1 1 0.5; 2 4 -0.5; 3 9 0.5; 4 16 -0.5; 5 25 0.5]; >> plot(A); Guía de MATLAB – Para principiantes 11 Si en el ejemplo anterior elegimos las ordenadas obtenemos: >> x=[0 0.1 0.2 0.3 0.4]; >> A=[1 1 0.5; 2 4 -0.5; 3 9 0.5; 4 16 -0.5; 5 25 0.5]; >> plot(x,A); También podemos dibujar diferentes funciones en el mismo gráfico. >> x=0:0.1:2; >> A=[sin(pi*x); 0.5+0.5*x]; >> plot(x,A); Guía de MATLAB – Para principiantes 12 Podemos intercambiar los ejes sin más que escribir >> plot(A,x) Opciones del comando plot Sintaxis Descripción plot(x,y, LineSpec) Dibuja la grafica de abcisas x y ordenadas y con las opciones de estilo dadas por LineSpec. plot(x1,y1, LineSpec1, x2,y2, LineSpec2,...) Dibuja la gráfica de abcisas x1 y ordenadas y1 con las opciones de estilo dadas por LineSpec1, la gráfica de abcisas x2 y ordenadas y2 con las opciones de estilo dadas por LineSpec2 y así con el resto de ternas. Si se omiten las opciones de estilo MATLAB escoge el color y estilo para cada grafico. Así por ejemplo, LineSpec=’ys-’ dibuja una línea amarilla, sólida y con cuadrados como marcadores, exactamente igual que LineSpec=’s-y’ o LineSpec=’sy-’ aunque siempre es mejor ser homogéneos en cada uno de los usos de estos parámetros. Guía de MATLAB – Para principiantes 13 Marcador Estilo de línea Color . punto * estrella x cruz o cırculo + más s cuadrado d rombo p pentágono h hexágono v triangulo abajo < triangulo izquierda > triangulo derecha ^ triangulo arriba - solida -- discontınua -. punto-raya : punteada y amarillo g verde m magenta b azul c cyan w blanco r rojo k negro Ejemplos: >> x=-pi:0.05:pi; >> plot(x, sin(x).*cos(x),'o'); n=50; %Asignamos valores a las variables a=0; b=3; x=linspace(a,b,n); %Construimos el vector x e1=exp(-x.^2); %y los vectores de abcisas e2=(x.^2).*exp(-x.^2); Guía de MATLAB – Para principiantes 14 e3=x.*exp(-x.^2); e4=exp(-x); plot(x,e1,'+',x,e2,'*',x,e3,'o',x,e4,'x'); %Dibujamos las graficas Además podemos colocar etiquetas o manipular la gráfica: >> xlabel('texto') %etiqueta sobre el eje X de la gráfica actual >> ylabel('texto') %etiqueta sobre el eje Y de la gráfica actual >> title('texto') %título en la cabecera de la gráfica actual >> text(x,y, 'texto') %texto en el lugar especificado por las coordenadas >> gtext('texto') %texto, el lugar lo indicamos después con el ratón >> grid %dibujar una rejilla >> axis( [xmin xmax ymin ymax] ) %fija valores máximo y mínimo de los ejes >> axis equal %fija que la escala en los ejes sea igual >> axis square %fija que la gráfica sea un cuadrado >> axis normal %desactiva axis equal y axis square >> hold on %abre una ventana de gráfico >> hold off %borra lo que hay en la ventana de gráfico Guía de MATLAB – Para principiantes 15 También podemos cambiar a apariencia de la gráfica con el último botón de la barra de herramientas y se abrirán unos cuadros enlos laterales que nos permitirán ir haciendo los cambios deseados como darle nombre a los ejes. 2.2. El comando subplot Una ventana gráfica se puede dividir en m particiones horizontales y en n verticales, de modo que cada subventana tiene sus propios ejes, y para hacer esto vamos a usar subplot (m,n,p) donde p indica la subdivisión que se convierte en activa. Ejemplo: >> x = 1:360; y1 = sind (x); y2 = cosd(x); y3 = exp (x); y4 = exp (-x); >> subplot (2,2,1), plot(x,y1), title ('seno') >> subplot (2,2,2), plot(x,y2), title ('coseno') >> subplot (2,2,3), plot (x,y3), title ('exponencial') >> subplot (2,2,4), plot (x,y4), title ('-exponencial') Guía de MATLAB – Para principiantes 16 Para volver al modo por defecto basta escribir: >> subplot (1,1,1) 2.3. Otras gráficas Comando pie (Diagrama de sectores) Resultan útiles para representar datos de tipo cualitativo, en los que tenemos varias opciones, el diagrama de sectores permite compararlas en un circulo con sectores cuyo ángulo es directamente proporcional al porcentaje de cada opción. Ejemplo: Los resultados de las elecciones generales del 10 de abril del 2016 al Congreso fueron los siguientes: Guía de MATLAB – Para principiantes 17 Partido político Número de Congresistas Fuerza Popular 73 Peruanos por el Kambio 18 El Frente Amplio 20 APP 9 Alianza Popular 5 Acción Popular 5 Total 130 Para dibujar un diagrama de sectores de los resultados de las elecciones, procedemos como sigue. Introducimos los datos en un vector >> x=[73 18 20 9 5 5]; >> pie3(x) >> legend('FP','PPK','FA','APP','Alianza P.','Acción P.') Con el comando pie3 se obtiene también un diagrama de sectores, pero en versión tridimensional. Ejemplo: >> pie3(x, [1 1 1 0 0 0]) >> legend('FP','PPK','FA','APP','Alianza P.','Acción P.') Guía de MATLAB – Para principiantes 18 Tanto para el comando pie, como para el comando pie3 existe la posibilidad de separar uno o más sectores para destacarlos con respecto de los demás. Ejemplo: >> pie(x, [1 1 1 0 0 0]) >> legend('FP','PPK','FA','APP','Alianza P.','Acción P.') Guía de MATLAB – Para principiantes 19 Comando bar y barh (Diagrama de barras) Existen varias posibilidades para representar diagramas de barras. Ejemplo: Supongamos que queremos representar los siguientes datos en un diagrama de barras: >>x=[10 2 3 5 18 20 15 ]; Y ahora usamos los comandos bar, barh, para generar los gráficos. (Usando el comando subplot podemos conseguir que aparezcan todos en la misma figura.) >> subplot(1,2,1),bar(x),title('Barras Verticales') >> subplot(1,2,2),barh(x),title('Barras Horizontales') Con los comandos bar3 y bar3h se obtienen sus respectivas versiones tridimensionales. >> subplot(1,2,1),bar3(x),title('Barras Verticales 3D') >> subplot(1,2,2),bar3h(x),title('Barras Horizontales 3D') Guía de MATLAB – Para principiantes 20 Comando area Similar al comando plot, salvo que rellena las ordenadas de 0 a y. Ejemplo: >> x=[1989:2018]; y=rand(1,30)*1000; area(x,y); axis([1989 2018 0 1000]) Guía de MATLAB – Para principiantes 21 Comando stairs Función análoga a bar sin líneas internas. Ejemplo: >> x=[1989:2018]; y=rand(1,30)*1000; stairs(x,y); axis([1989 2018 0 1000]) Comando stem Representa una gráfica de tallos Ejemplo: >> x=[1989:2018]; y=rand(1,30)*1000; stem(x,y); axis([1989 2018 0 1000]) Guía de MATLAB – Para principiantes 22 Comando errorbar Representa sobre una gráfica –mediante barras– valores de errores Ejemplo: >> x=[1989:2018]; y=rand(1,30)*1000; errorbar(x,y); axis([0 31 1000 3000]) Guía de MATLAB – Para principiantes 23 Comando compass Dibuja los elementos de un vector complejo como un conjunto de vectores partiendo de un origen común Ejemplo: >> Z=[2+3i,3-2i,5.6+4i]; compass(Z); Comando feather Dibuja los elementos de un vector complejo como un conjunto de vectores partiendo de orígenes uniformemente espaciados sobre el eje de abscisas Ejemplo: >> Z=[2+3i,3-2i,5.6+4i]; feather(Z); Guía de MATLAB – Para principiantes 24 Comando comet Crea un gráfico animado en el que un círculo (cometa) recorre los puntos de datos en la pantalla. Ejemplo: >> t = 0:.01:2*pi; x = cos(2*t).*(cos(t).^2); y = sin(2*t).*(sin(t).^2); comet(x,y); Guía de MATLAB – Para principiantes 25 3. OPERACIONES MATEMÁTICAS 3.1. Aritmética elemental Comenzaremos viendo con varios ejemplos que las operaciones aritméticas habituales se realizan del modo esperado con los operadores. Suma: + Resta: - Multiplicación: * División: / Potencia: ^ Ejemplos: >> 1+2 %Suma de dos enteros. ans = 3 >> 2.45*3.1415 %Producto de números reales. ans = 7.6967 >> (3+2^3*i)+(-1+5*i) %Suma de complejos. ans = 2.0000+13.0000i Si no queremos que aparezca por pantalla el resultado de una operación tendremos que poner al final de la línea punto y coma ”;”. Vectores y Matrices Comencemos con algunos ejemplos elementales de asignaciones y alguna de las operaciones que se pueden realizar. >> a=2 %Asignación del valor 2 a la variable a. a= 2 >> b=1:1:10 %Asignamos a b el vector de datos [1,2,3,...,10] b= 1 2 3 4 5 6 7 8 9 10 Guía de MATLAB – Para principiantes 26 >> a+b %Sumamos un escalar y un vector. ans= 3 4 5 6 7 8 9 10 11 12 >> a*b %Producto de un vector y un escalar. ans= 2 4 6 8 10 12 14 16 18 20 Si sumamos vectores de tamaño diferente tenemos lo siguiente. >> c=1:5:25 %Declaramos el vector c. c= 1 6 11 16 21 >> b+c %Sumamos los vectores b y c. ??? Error using ==> + Matrix dimensions must be agree Podemos multiplicar vectores, bien como producto escalar de ellos o bien componente a componente. >> b=0:2:20 %Declaramos el vector b. b= 0 2 4 6 8 10 12 14 16 18 20 >> c=0:1:10 %Declaramos el vector c. c= 0 1 2 3 4 5 6 7 8 9 10 >> b.*c % Producto de dos vectores componente a componente. ans= 0 2 8 18 ...200 >> b’*c %Matriz resultado de multiplicar b traspuesto por c (ver pantalla) >> b*c’ %Producto de b por c traspuesto (producto interior) ans= 770 No sólo se pueden sumar vectores o multiplicar por una constante si no que se puede calcular el logaritmo de un vector o el seno de un vector, etc. obteniendo el logaritmo o el seno de cada una de sus componentes. >> b=1:10; %Declaramos el vector b. Guía de MATLAB – Para principiantes 27 >> log(b) %Logartimo del vector b. ans= Columns 1 through 7 0 0.6931 ...1.9459 Columns 8 through 10 2.0794 2.1972 2.3026 >> sin(b) %Seno del vector b. ans= Columns 1 through 7 0.8415 0.9093 ...0.6570 Columns 8 through 10 0.98954 0.4121 -0.5440 >> c=1:1:5 c= 1 2 3 4 5 >> 2.^c %2 elevado a las potencias que determina c. ans= 2 4 8 16 32 >> c.^ 2 %Las componentes de c elevadas al cuadrado. ans= 1 4 9 16 25 Un punto delante de los operadores .*, .^ y ./ indica que las operaciones se realizan componente a componente en los vectores o las matrices. 3.2. Funciones matemáticas comunes APROXIMACIONES Función ¿Qué hace? Ejemplo x = 5.92 ceil (x) redondea hacia infinito 6 fix (x) redondea hacia cero 5 floor (x) redondea hacia menos infinito 5 round (x) redondea hacia el entero más próximo 6 Guía de MATLAB – Para principiantes 28 Ejemplos: >> x=ceil(pi) x = 4 >> round ( [19.54646 13.656 -2.1565 0.78] ) ans = 20 14 -2 1 >> x = round(pi,3) %Aproxima a 3 cifras decimales X = 3.1420 TRIGONOMETRÍA Función Qué hace? ... (x)función trigonométrica con el ángulo expresado en radianes sin (x) cos (x) tan (x) csc (x) sec (x) cot (x) seno (radianes) coseno tangente cosecante secante cotangente ...d (x) función trigonométrica con el ángulo expresado en grados sind (x) ... seno (grados) ... ...h (x) función trigonométrica hiperbólica con el ángulo expresado en radianes sinh (x) ... seno hiperbólico (radianes) ... a... (x) inversa de la función trigonométrica con el resultado expresado en radianes asin (x) ... arco seno (radianes) ... a...d (x) inversa de la función trigonométrica con el resultado expresado en grados asind (x) ... arco seno (grados) ... a...h (x) inversa de la función trigonométrica hiperbólica con el resultado expresado en radianes asinh (x) ... arco seno hiperbólico (radianes) ... Guía de MATLAB – Para principiantes 29 Ejemplos: >> sin(pi/2) %Seno de pi/2 radianes ans = 1 >> sind(-90) %Seno de 90 grados centesimales ans = -1 >> cosd(60) %Coseno de 60 grados centesimales ans = 0.5000 >> asind(1) %Arcoseno de 1 en grados centesimales ans = 90 OTRAS FUNCIONES Función Que hace? abs (x) valor absoluto o magnitud de un número complejo sign (x) signo del argumento si x es un valor real (-1 si es negativo, 0 si es cero, 1 si es positivo) exp (x) exponencial gcd (m,n) máximo común divisor lcm (m,n) mínimo común múltiplo log (x) logaritmo neperiano o natural log2 (x) logaritmo en base 2 log10 (x) logaritmo decimal mod(x,y) módulo después de la división rem (x,y) resto de la división entera sqrt (x) raíz cuadrada nthroot (x,n) raíz n-ésima de x (x e y cualquier escalar, m y n enteros) Guía de MATLAB – Para principiantes 30 Ejemplos: >> abs (-7) % valor absoluto de -7 ans = 7 >> sign (10) % signo del número 10 ans = 1 >> gcd (9,12) % máximo común divisor entre 9 y 12 ans = 3 >> lcm (10,25) % mínimo común múltiplo ans = 50 >> mod (-12,5) % módulo de la división de -12/5 ans = 3 >> rem (12,5) % resto de la división de 12/5 ans = 2 >> nthroot (8,3) % raíz cúbica de 8 ans = 2 3.3. Ecuaciones El comando solve, resuelve una ecuación o un sistema de ecuaciones. Por ejemplo, para calcular las raíces de la ecuación 𝑥2 + 𝑥 6 − 1 3 = 0 >> syms x; %Declaramos variable simbólica >> solve(x^2+x/6-1/3) ans = 1/2 -2/3 Vamos a resolver la conocida ecuación de segundo grado 𝑎𝑥2 + 𝑏𝑥 + 𝑐 = 0 Guía de MATLAB – Para principiantes 31 𝑥1,2 = −𝑏 ± √𝑏2 − 4𝑎𝑐 2𝑎 >> syms a b c x; %Declaramos variables simbólicas >> eq=a*x^2+b*x+c; >> solve(eq,x) %Resolvemos respecto a la variable simbólica x ans = -(b + (b^2 - 4*a*c)^(1/2))/(2*a) -(b - (b^2 - 4*a*c)^(1/2))/(2*a) Resolver el sistema de dos ecuaciones con dos incógnitas { 3𝑥 + 2𝑦 = −1 𝑥 − 𝑦 = 2 >> syms x y; %Declaramos variables simbólicas >> eq1=3*x+2*y+1; >> eq2=x-y-2; >> [x1 y1]=solve(eq1,eq2,x,y) x1 = 3/5 y1 = -7/5 3.4. Sistema de ecuaciones lineales Un sistema de ecuaciones lineales, también conocido como sistema lineal de ecuaciones o simplemente sistema lineal, es un conjunto de ecuaciones lineales (es decir, un sistema de ecuaciones en donde cada ecuación es de primer grado). Se presentan tres maneras de resolver sistemas de ecuaciones con MATLAB: • Método de la matriz inversa (sistema de ecuaciones lineales). • Método de la división matricial izquierda (sistema de ecuaciones lineales). • Utilizando el comando rref (sistema de ecuaciones lineales). • Utilizando el comando solve (sistema de ecuaciones lineales y no lineales). Guía de MATLAB – Para principiantes 32 Ejemplos: 2𝑥 + 4𝑦 + 6𝑧 = 18 4𝑥 + 5𝑦 + 6𝑧 = 24 3𝑥 + 𝑦 − 2𝑧 = 4 >> A = [2,4,6;4,5,6;3,1,-2]; >> B = [18;24;4]; >> C = det(A) C = 6 % Determinante distinto de 0, solución única >> sol1 = inv(A)*B % Método de la matriz inversa sol1 = 4.0000 -2.0000 3.0000 >> sol2=A\B % Método de la división matricial izquierda sol2 = 4.0000 -2.0000 3.0000 >> AB=[A B] % Escribimos la matriz ampliada >> rref(ab) % Eliminación Gauss-Jordan ans = 1 0 0 4 0 1 0 -2 0 0 1 3 >> syms a b c %Declaramos variables simbólicas >> a1=2*a+4*b+6*c==18; >> a2=4*a+5*b+6*c==24; >> a3=3*a+b-2*c==4; >> [x1,y1,z1]=solve(a1,a2,a3) %Mediante comando solve x1 = 4 y1 = -2 z1 = 3 Guía de MATLAB – Para principiantes 33 3.5. Series La función symsum(f,a,b) suma la expresión f a medida que la variable simbólica varía de a a b 𝑠 = ∑ 𝑘2 = 12 + 22 + 32 + 42 + 52 = 55 5 𝑘=1 >> syms k; %Declaramos variable simbólica >> symsum(k^2,1,5) %Sumatoria de 1 a 5 ans = 55 ∑ 𝑘 = 𝑁(𝑁 + 1) 2 𝑁 𝑘=0 >> syms k N; %Declaramos variables simbólicas >> symsum(k,0,N) %Sumatoria de 0 a N ans = (N*(N + 1))/2 ∑ 𝑘2 = 𝑁(𝑁 + 1)(2𝑁 + 1) 6 𝑁 𝑘=0 >> syms k N; %Declaramos variables simbólicas >> symsum(k^2,0,N) %Sumatoria de 0 a N ans = (N*(2*N + 1)*(N + 1))/6 ∑ 𝑥𝑘 𝑘! = 𝑒𝑥 ∞ 𝑘=0 >> syms x k %Declaramos variables simbólicas >> symsum(x^k/sym('k!'),k,0,inf) %Sumatoria de k desde 0 a inf ans = exp(x) Dado que hay dos variables simbólicas x y k, especificamos en el segundo parámetro de la función sysmsum que la suma se refiere a k Guía de MATLAB – Para principiantes 34 3.6. Límites lim 𝑥→1 ( 𝑥2 + 2𝑥 − 1 𝑥2 + 1 ) = 1 >> syms x a; %Declaramos variables simbólicas >> y=(x^2+2*x-1)/(x^2+1); >> limit(y,x,1) %Calculamos limite cuando x tiende a 1 ans = 1 lim x→∞ (1 + a x ) x inf representa en MATLAB el infinito >> syms x a; >> limit((1+a/x)^x,x,inf) %Calculamos limite cuando x tiende a infinito ans = exp(a) lim x→0 (cos(2x)) 3/x2 >> syms x; >> y=cos(2*x)^(3/x^2); >> limit(y,x,0) ans = 1/exp(6) La derivada de una función f(x) es el límite 𝑓′(𝑥) = lim ℎ→0 𝑓(𝑥 + ℎ) − 𝑓(𝑥) ℎ La derivada de y=sin(x) es y'=cos(x) >> syms x h; >> limit((sin(x+h)-sin(x))/h,h,0) ans = cos(x) Guía de MATLAB – Para principiantes 35 De forma alternativa, podemos calcular las derivadas definiendo la función f(x) como función anónima y aplicando la definición de derivada. >> syms x h; >> f=@(x) sin(x) %función anónima >> limit((f(x+h)-f(x))/h,h,0) ans = cos(x) 3.7. Derivada de una función La función diff calcula la derivada de una función respecto a una variable x. Por defecto, calcula la derivada primera, pero también puede calcular la derivada segunda, tercera, etc., indicándoselo en su segundo argumento. >> syms x; >> y=(sin(x))^2; >> yp=diff(y) %derivada con respecto a x yp =2*cos(x)*sin(x) >> ypp=diff(yp) %derivada de la derivada ypp = 2*cos(x)^2 - 2*sin(x)^2 >> diff(y,2) %segunda derivada (derivada de la derivada) ans = 2*cos(x)^2 - 2*sin(x)^2 Derivadas parciales (respecto de una variable) >> syms x y; >> diff(x*sin(x*y),x) %derivada con respecto a x ans = sin(x*y) + x*y*cos(x*y) >> diff(x*sin(x*y),y) %derivada con respecto a y ans = x^2*cos(x*y) 3.8. Integral de una función El comando int(f,x,a,b) calcula la integral de la expresión f, respecto de la variable x, en el intervalo [a,b] donde a y b pueden ser cantidades numéricas o variables simbólicas. Guía de MATLAB – Para principiantes 36 Integrales indefinidas Si no ponemos límites a la integral, obtenemos la integral indefinida, la función cuya derivada es el integrando ∫ 𝒔𝒊𝒏𝟐(𝒙)𝒅𝒙 = ∫ 𝟏 − 𝒄𝒐𝒔(𝟐𝒙) 𝟐 𝒅𝒙 = 𝟏 𝟐 𝒙 − 𝒔𝒊𝒏(𝟐𝒙) 𝟒 + 𝒄 >> syms x; %Declaramos variablesimbólica >> y=sin(x)^2; >> z=int(y) z = x/2 - sin(2*x)/4 >> y=diff(z) y = 1/2 - cos(2*x)/2 >> simplify(y) ans = sin(x)^2 Calculamos la derivada con diff, simplificamos la expresión obtenida con simplify y obtenemos el integrando. Integales definidas Para calcular la integral ∫ 𝑠𝑖𝑛2(𝑥)𝑑𝑥 𝜋 0 = ∫ 1 − 𝑐𝑜𝑠(2𝑥) 2 𝑑𝑥 = 1 2 𝜋 0 𝑥 − 𝑠𝑖𝑛(2𝑥) 4 | 0 𝜋 = 𝜋 2 >> syms x; %Declaramos variable simbólica >> y=sin(x)^2; >> int(y,0,pi) ans = pi/2 En este ejemplo, ∫ 𝑒𝑥𝑝(−𝑎𝑥2)𝑑𝑥 +∞ −∞ >> syms x a; %Declaramos variables simbólicas >> y=exp(-a*x^2); >> int(y,x,-inf,inf) Guía de MATLAB – Para principiantes 37 ans = piecewise([a < 0, Inf], [0 <= real(a) | angle(a) in Dom::Interval([-pi/2], [pi/2]) & a ~= 0, pi^(1/2)/a^(1/2)], [real(a) < 0 & ~angle(a) in Dom::Interval([-pi/2], [pi/2]) & ~a < 0, int(exp(-x^2*a), x, -Inf, Inf)]) Nos devuelve una expresión condicional cuya sintaxis es la siguiente: pw = piecewise(cond1,val1,cond2,val2,...) cuyo valor es val1 cuando la condición cond1 es cierto, es val2 cuando cond2 es cierto, y así sucesivamente. pw = piecewise(cond1,val1,cond2,val2,...,otherwiseVal) otherwiseVal si ninguna condición es verdadera. Si declaramos el parámetro a positivo entonces: >> clear >> syms x; %Declaramos variable simbólica >> syms a positive; %Declaramos variable positiva >> y=exp(-a*x^2); >> int(y,x,-inf,inf) ans = pi^(1/2)/a^(1/2) 3.9. Ecuaciones diferenciales Resolución exacta de ecuaciones diferenciales ordinarias Para resolver de forma exacta una o varias ecuaciones diferenciales, MATLAB dispone de la orden dsolve. Por defecto, la variable independiente es t, pero se puede usar cualquier otra variable si se incluye como último argumento: dsolve(‘ec1’, …,’ecn’) resuelve el sistema diferencial de ecuaciones y condiciones iniciales (ec1, …., ecn) dsolve(‘ec1’,…,’ecn’,’var’) resuelve el sistema diferencial de ecuaciones y condiciones iniciales (ec1, …., ecn) y usa var como variable independiente Guía de MATLAB – Para principiantes 38 La letra D se utiliza para representar la derivación con respecto a la variable independiente, es decir, u’ se escribe Du; las derivadas orden superior u’’, u’’’,… se escriben D2u, D3u,… Ejemplo: 𝑢′ = 1 2 𝑢, 𝑢(0) = 1 4 >> u = dsolve('Du= u/2','u(0)= 1/4') u = exp(t/2)/4 Es posible obtener la solución general de una ecuación diferencial: >> u = dsolve('Du=u/2') u = C2*exp(t/2) Esto significa que la solución de la ecuación diferencial 𝑢′ = 𝑢/2 es. 𝑢(𝑡) = 𝐶1𝑒 𝑡 2⁄ , (𝐶1 ∈ 𝑅) 𝑢′ = 2𝑡 + 𝑢, 𝑢(1) = 0.5 >> u = dsolve('Du= 2*t+u','u(1)= 0.5') u = (9*exp(-1)*exp(t))/2 - 2*t – 2 El operador simbólico dsolve no siempre puede encontrar una solución de forma cerrada (algo probable puesto que sólo clases particulares de EDOs pueden ser resueltas en forma simbólica cerrada). Y cuando no podemos resolver la EDO de manera simbólica, debemos cambiar a un solucionador numérico. Comando ode45 Su sintaxis es la siguiente [t,x]=ode45(odefun,tspan,x0, options, params) • x es una matriz donde cada columna corresponde a las variables dependientes y t es el vector tiempo. • odefun es el nombre de la función, • tspan especifica el intervalo de tiempo, un vector de dos números tspan=[ti,tf], tiempo inicial y final. Para obtener valores de las Guía de MATLAB – Para principiantes 39 variables dependientes en instantes concretos t0, t1, t2, ... tn. se escribe tspan=[t0,t1....tn]; • x0 es un vector que contiene los valores iniciales. • options es una estructura que se crea con la función odeset. • params son parámetros que queremos pasar a la función odefun Ejemplo: Para el intervalo de [0,5], calcular: 𝑢′ = 2𝑡 𝑢(0) = 0 >> tspan = [0 5]; %Definimos los limites >> u0 = 0; %Valor de u con t=0 >> [t,u] = ode45(@(t,u) 2*t, tspan, u0); >> plot(t,u,'-o') %Graficamos el resultado Sistema de ecuaciones diferenciales de primer orden Ejemplo: Resolver el sistema de ecuaciones diferenciales: 𝑑𝑥 𝑑𝑡 = −𝑎𝑥 𝑑𝑦 𝑑𝑧𝑡 = 𝑎𝑥 − 𝑏𝑦 Guía de MATLAB – Para principiantes 40 a=0.5; b=0.7; %condiciones iniciales en el vector x0 x0=zeros(1,2); x0(1)=0; x0(2)=1; tf=5 %tiempo final tspan=[0 tf]; fg=@(t,x) [-a*x(1);a*x(1)-b*x(2)]; [t,x]=ode45(fg,tspan,x0); plot(t,x,'-o') Ejemplo: Resolver el sistema de ecuaciones diferenciales: 𝑑𝑦 𝑑𝑧 = −0.2(1 − 0.23𝑥)/𝑦 𝑑𝑥 𝑑𝑧 = 1.5(1 − 𝑥)𝑦/(1 − 0.2𝑥) Para valores de: 𝑥(0) = 0 , 𝑦(0) = 1.0 , 𝑧(0) = 0 , 𝑧(𝑓) = 3.0 Podemos obtener el resultado de manera directa con el comando ode45: >> x0=zeros(1,2); >> x0(1)=0; Guía de MATLAB – Para principiantes 41 >> x0(2)=1; >> tspan=[0,3]; >> fg=@(t,x) [1.5*(1-x(1))*x(2)/(1-0.2*x(1));-0.2*(1- 0.23*x(1))/x(2)]; >> [t,x]=ode45(fg,tspan,x0); >> plot(t,x,'-o') Guía de MATLAB – Para principiantes 42 4. OPERACIONES CON POLINOMIOS 4.1. Polinomios Un polinomio de grado n de coeficientes a1,a2...,an,an+1 es la expresión 𝑎1𝑥 𝑛 + 𝑎2𝑥 𝑛−1 + ⋯ + 𝑎𝑛𝑥 + 𝑎𝑛+1 en MATLAB se representa por el vector fila p=[a1,a2...,an,an+1] El polinomio p = x3 − 2x2 + x − 2 se representa por el vector p=[1 -2 1 -2] Los polinomios se pueden representar de forma simbólica mediante la función poly2sym. >> p=[1 -2 1 -2]; %Vector formado por sus coeficientes >> poly2sym(p) ans = x^3 - 2*x^2 + x - 2 A su vez un polinomio en forma simbólica se puede convertir en el vector formado por sus coeficientes mediante sym2poly >> syms x; >> sym2poly(x^3-2*x-4) %Polinomio en forma simbólica ans = 1 0 -2 -4 4.2. Valor de un polinomio Calculamos el valor de polinomio cuando se conoce el valor la variable x. Sea 𝑝 = 𝑥5 − 3.5𝑥4 + 2.75𝑥3 + 2.125𝑥2 − 3.875𝑥 + 1.25 Cuando se expresa un polinomio de forma simbólica se utiliza la función subs >> syms x; >> p=x^5-3.5*x^4+2.75*x^3+2.125*x^2-3.875*x+1.25; >> subs(p,x,1.5) %Valor de x de 1.5 ans = -0.6250 La función polyval nos proporciona este valor cuando se expresa el polinomio en forma de vector formado por los coeficientes. Guía de MATLAB – Para principiantes 43 >> p=[1 -3.5 2.75 2.125 -3.875 1.25]; >> x=1.5; %Valor de x de 1.5 >> polyval(p,x) ans = -0.6250 >> x=0:0.5:2; %Valor de x de 0 a 2 con un paso de 0.5 >> polyval(p,x) ans = 1.2500 0 -0.2500 -0.6250 0 4.3. Ajuste a un polinomio La función polyfit devuelve los coeficientes para un polinomio de grado n, que es el mejor ajuste para una serie de datos ingresados. Los coeficientes están en potencias descendentes y la longitud es n+1. >> p = polyfit(x, y, n) Ejemplo: >> x = linspace (0,4 * pi, 10); %Genera un vector de 10 valores desde 0 hasta 4pi >> y = sin (x); >> p = polyfit (x, y, 7); >> x1 = linspace(0,4*pi); %Genera un vector de 100 valores desde 0 hasta 4pi >> y1 = polyval(p,x1); %Evalúa y1 en función de los valores de x1 >> figure >> plot(x,y, 'o' ) >> hold on >> plot(x1,y1) >> hold off Guía de MATLAB – Para principiantes 44 4.4. Suma de polinomios Queremos sumar los polinomios p1=x3-2x-4 y p2=x2+3x+4 De forma simbólica >> syms x; >> p1=x^3-2*x-4; >> p2=x^2+3*x+4; >> p1+p2 ans = x^3 + x^2 + x Para sumar dos polinomios en forma de vectores, los vectores tiene que tener las mismas dimensiones >> p1=[1 0 -2 -4]; >> p2=[2 3 4]; >> p1+p2 ??? Error using ==> plus Matrix dimensions must agree. >> p2=[0 2 3 4]; >> p1+p2 ans = 1 2 1 0 Guía de MATLAB – Para principiantes 45 4.5. Producto de dos polinomios Queremos multiplicar los polinomiosp1=x3-2x-4 y p2=x2+3x+4 De forma simbólica >> syms x; >> p1=x^3-2*x-4; >> p2=x^2+3*x+4; >> p=p1*p2 p = -(x^2 + 3*x + 4)*(- x^3 + 2*x + 4) >> expand(p) ans = x^5 + 3*x^4 + 2*x^3 - 10*x^2 - 20*x - 16 Producto de dos polinomios mediante la función conv >> p1=[1 0 -2 -4]; >> p2=[1 3 4]; >> p=conv(p1,p2) p = 1 3 2 -10 -20 -16 4.6. Cociente 𝑥3 + 5𝑥2 + 11𝑥 + 13 𝑥2 + 2𝑥 + 4 = (𝑥 + 3) + 𝑥 + 1 𝑥2 + 2𝑥 + 4 De forma simbólica >> syms x; >> p1=x^3+5*x^2+11*x+13; >> p2=x^2+2*x+4; >> p=p1/p2 p = (x^3 + 5*x^2 + 11*x + 13)/(x^2 + 2*x + 4) >> simplify(p) ans = x + (x + 1)/(x^2 + 2*x + 4) + 3 La función deconv nos proporciona el cociente y el resto de la división entre dos polinomios. >> p1=[1 5 11 13]; Guía de MATLAB – Para principiantes 46 >> p2=[1 2 4]; >> [q r]=deconv(p1,p2) q = 1 3 %Coeficientes del polinomio x+3 r = 0 0 1 1 %Coeficientes del resto x+1 4.7. Derivada La regla de derivación de cada término de un polinomio es 𝑑 𝑑𝑥 𝑎𝑥𝑛 = 𝑛𝑎𝑛−1 Mediante la función diff(p,n) calculamos la derivada n del polinomio p de forma simbólica >> syms x; >> p=x^3+4*x^2-3*x-2; >> diff(p) %Primera derivada del polinomio p ans = 3*x^2 + 8*x - 3 >> diff(p,2) %Segunda derivada del polinomio p ans = 6*x + 8 La función polyder calcula la derivada de un polinomio expresado en forma de vector formado por los coeficientes. >> p=[1 4 -3 -2]; >> polyder(p) ans = 3 8 -3 4.8. Integral La integral de cada uno de los términos del polinomio se calcula mediante la fórmula ∫ 𝑎𝑥𝑛𝑑𝑥 = 𝑎 𝑥𝑛+1 𝑛 + 1 Guía de MATLAB – Para principiantes 47 La función int calcula la integral de forma analítica, suponiendo que la constante de integración vale 0 >> syms x; %Declaramos variable simbólica >> p=4*x^3+4*x^2-2*x-2; >> int(p) ans = x^4 + (4*x^3)/3 - x^2 - 2*x La función polyint calcula la integral cuando se expresa un polinomio como vector formado por los coeficientes >> p=[4 4 -2 2]; >> polyint(p) ans = 1.0000 1.3333 -1.0000 2.0000 0 4.9. Raíces de un polinomios Cuando se expresa un polinomio de forma simbólica se utiliza la función solve >> syms x; %Declaramos variable simbólica >> p=x^5-3.5*x^4+2.75*x^3+2.125*x^2-3.875*x+1.25; >> solve(p) ans = 2 -1 1/2 i/2 + 1 1 - i/2 Cuando se expresa un polinomio como vector formado por los coeficientes, se emplea la función roots. >> p=[1 -3.5 2.75 2.125 -3.875 1.25]; >> roots(p) ans = 2.0000 -1.0000 1.0000 + 0.5000i 1.0000 - 0.5000i Guía de MATLAB – Para principiantes 48 0.5000 Conocidas las raíces del polinomio podemos calcular el vector que guarda los coeficientes mediante poly >> r=[2 -1 1+0.5i 1-0.5i 0.5]; %raíces del polinomio >> poly(r) ans = 1.0000 -3.5000 2.7500 2.1250 -3.8750 1.2500 Obtenemos el polinomio p a partir de sus raíces 4.10. Factorización La función factor convierte un polinomio expresado en forma simbólica en factores >> syms x; %Declaramos variable simbólica >> p=x^3-6*x^2+11*x-6; >> factor(p) ans = (x - 3)*(x - 1)*(x - 2) 4.11. Expansión La función expand realiza operaciones con polinomios, por ejemplo, devuelve el polinomio p a partir de sus factores >> syms x; %Declaramos variable simbólica >> p=(x - 3)*(x - 1)*(x - 2); >> expand(p) ans = x^3 - 6*x^2 + 11*x - 6 >> p=(x-1)^3+2*(x+3)^2+x^2-2*x-2; >> expand(p) ans = x^3 + 13*x + 15 Guía de MATLAB – Para principiantes 49 5. GRAFICAS 3D EN MATLAB MATLAB tiene posibilidades de realizar varios tipos de gráficos 3D, muchas de ellas son simples generalizaciones de funciones disponibles para graficación en dos dimensiones. 5.1. Comando plot3 Crea una gráfica lineal tridimensional. Es similar a la función plot con la salvedad que plot3 acepta datos en tres dimensiones. Es decir el usuario debe proporcionar tres vectores: x, y y z. Ejemplo: >> x = linspace(0, 10*pi, 1000) ; y = cos(x); z = sin(x); plot3(x,y,z,'r','linewidth',3); grid on; xlabel('eje-X'), ylabel('eje-Y'), zlabel('eje-Z'); Guía de MATLAB – Para principiantes 50 5.2. Comando comet3 Genera una versión animada de plot3, genera una animación a partir de los puntos a graficar. Es similar a la función comet para dos dimensiones Ejemplo: >> t = 0:pi/50:10*pi; comet3(sin(t),cos(t),t); grid on; xlabel('eje-X'), ylabel('eje-Y'), zlabel('eje-Z'); 5.3. Comando mesh Crea una gráfica de superficie de malla. La función mesh puede dibujar una función de dos variables (z=f(x,y)) sobre un dominio rectangular. Ejemplo: >> z = [ 1 2 3 4 5 6 7 8 9 10; 2 4 6 8 10 12 14 16 18 20 ; 3 4 5 6 7 8 9 10 11 12]; mesh(z); grid on; xlabel('eje-X'), ylabel('eje-Y'), zlabel('eje-Z'); Guía de MATLAB – Para principiantes 51 Además se puede usar con tres argumentos mesh(x,y,z). Siendo la longitud del vector x igual al número de columnas de la matriz z, mientras que la longitud del vector y debe ser igual al número de filas. >> x=linspace(1,50,10); y=linspace(500,1000,3); z = [ 1 2 3 4 5 6 7 8 9 10; 2 4 6 8 10 12 14 16 18 20 ; 3 4 5 6 7 8 9 10 11 12] ; mesh(x,y,z), grid on; xlabel('eje-X'), ylabel('eje-Y'), zlabel('eje-Z'); Guía de MATLAB – Para principiantes 52 Meshgrid Con la función meshgrid se crean dos matrices X (cuyas filas son copias de x) y Y (cuyas columnas son copias de y). Estas matrices representan respectivamente las coordenadas x y y de todos los puntos de la retícula. Ejemplo: >> x = 1:3; y = 1:5; [X,Y] = meshgrid(x,y) X = 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 Y = 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 La matriz de valores Z se calcula a partir de las matrices de coordenadas X y Y. Finalmente se dibuja la matriz Z con la función mesh. Ejemplo: >> x= [-2:0.2:2]; y= [-2:0.2:2]; [X,Y]=meshgrid(x,y); Z= X.*exp(-X.^2 -Y.^2); mesh(X,Y,Z); grid on; xlabel('eje-X'), ylabel('eje-Y'), zlabel('eje-Z'); Guía de MATLAB – Para principiantes 53 5.4. Comando surf Las gráficas surf son similares a las mesh, pero con la diferencia que surf crea una superficie tridimensional colorida en lugar de una rejilla. Los colores de la superficie varía con el valor de z. Su sintaxis es la siguiente: • surf(Z) una sola entrada en cuyo caso usa los índices fila y columna se toman como coordenadas x y y. • surf(x,y,Z) un vector x de dimensión n, un vector y de dimensión m y una matriz Z de dimensión mxn. • surf(X,Y,Z) tres matrices donde X y Y se obtuvieron a partir del comando meshgrid. Ejemplo: >> x= [-2 :0.2: 2] ; y= [-2 :0.2: 2] ; [X,Y]=meshgrid(x,y) ; Z= X.*exp(-X.^2 -Y.^2); surf(X,Y,Z), grid on; xlabel('eje-X'), ylabel('eje-Y'), zlabel('eje-Z'); Guía de MATLAB – Para principiantes 54 Shading flat Elimina el mallado, asigna un color para cada región de la malla dependiendo de su altura. >> shading flat Guía de MATLAB – Para principiantes 55 Shading interp Sobreado interpolado, que elimina el mallado y difumina los cambios de color. >> shading interp Shading faceted Se muestra por defecto, la malla es de color negro y la superficie adopta un color para cada región dependiendo de su altura. >> shading faceted Guía de MATLAB – Para principiantes 56 Colormap Establece el mapa de la figura actual en uno de los colormaps predefinidos >> colormap jet Ejemplo: >> x = -10:0.5:10; y =x; [X,Y] = meshgrid(x,y);Z = sin (sqrt(X .^2 + Y .^2)) ./ sqrt(X .^ 2 + Y .^ 2 + 0.1); ax1=subplot(1,2,1); surf (X,Y,Z); colormap(ax1,jet) shading interp; ax2=subplot(1,2,2); surf (X,Y,Z); colormap(ax2,spring) shading interp; figure ax3=subplot(1,2,1); surf (X,Y,Z); colormap(ax3,hot) shading interp; ax4=subplot(1,2,2); surf (X,Y,Z); colormap(ax1,autumn) shading interp; Guía de MATLAB – Para principiantes 57 La siguiente tabla enumera los colormaps predefinidos: Nombre Escala de colores parula jet hsv hot cool spring summer autumn winter gray bone copper pink lines colorcube prism flag white Guía de MATLAB – Para principiantes 58 Comando contour Crea una gráfica de contorno 2-D. Ejemplo: >> x = -10:0.5:10; y =x; [X,Y] = meshgrid(x,y); Z = sin (sqrt(X .^2 + Y .^2)) ./ sqrt(X .^ 2 + Y .^ 2 + 0.1); contour(X,Y,Z); Comando pcolor Crea una matriz rectangular de celdas con colores determinados por MATLAB. Ejemplo: >> [x,y,z] = peaks; % La función peaks genera una superficie que parece una montaña subplot(1,2,1); pcolor(x,y,z); shading interp; subplot(1,2,2); pcolor(x,y,z); shading interp; hold on; contour(x,y,z,20,' k '); Guía de MATLAB – Para principiantes 59 Las gráficas en pseudo-color son similares a las gráficas de contorno, excepto que, en lugar de líneas que resaltan un contorno específico, se genera un mapa bidimensional sombreado sobre una retícula. Guía de MATLAB – Para principiantes 60 6. M-ARCHIVOS Existen dos tipos de M-archivo, es decir, de archivos con extensión *.m. Un tipo son los ficheros de comandos (es un archivo script) y el otro son la funciones. 6.1. Editor Para crear un nuevo archivo .m nos dirigimos al icono New y elegimos la opción correspondiente (Script, Function, etc.). Aparece entonces la ventana Editor donde podemos escribir las sentencias. Para trabajar con el editor se utilizan los comandos tradicionales de manejo de archivos (Archivo nuevo – Abrir archivo – Guardar archivo, etc.) El nombre del archivo puede formarse por caracteres alfanuméricos, sin embargo se debe tener en cuenta que: • El nombre de archivo no puede empezar con un número. • El nombre de archivo no puede tener espacios ni caracteres especiales. • El nombre de archivo no puede coincidir con el nombre de ninguna de las variables definidas en el script. • Es conveniente el uso de nombres cortos. 6.2. Script Un Script o fichero de comandos contiene simplemente un conjunto de comandos que se ejecutan sucesivamente cuando se teclea el nombre del fichero en la línea de comandos de MATLAB o se incluye dicho nombre en otro fichero *.m. Para crear el script, se escriben los datos de entrada en el Editor de esta manera: Guía de MATLAB – Para principiantes 61 variabledeentrada = input('Texto que sale en la pantalla') Después, se escribe los comandos deseados y para acabar, se escribe: disp('Texto que sale en la pantalla');variabledesalida Ejemplo: % ÁREA DE UN TRAPECIO % Pide al usuario las dimensiones de un trapecio b=input('Ingrese la base menor (m):'); B=input('Ingrese la base mayor (m):'); h=input('Ingrese la altura (m): '); %Calcula el área del trapecio A=h*(b+B)/2; %Muestra en pantalla el área del trapecio disp(['El área del trapecio es: ',num2str(A), 'm2 ']) Para ejecutar un script, se tienen diferentes alternativas: • Ejecutar el programa desde el editor mediante el ícono de ejecución. • Ejecutar el programa desde el editor presionando F%. • Ejecutar el programa desde la ventana de comandos ingresando el nombre del archivo (inmediatamente después del prompt y sin la extensión). En ocasiones aparecerá la siguiente ventana al ejecutar por primera vez un script: Guía de MATLAB – Para principiantes 62 Al seleccionar la primera opción se indica que el directorio actual de MATLAB sea el directorio en el que se ha guardado el archivo, de esta manera, si no hay errores de sintaxis, se ejecutarán secuencialmente todas las sentencias del script. 6.3. Funciones Las funciones permiten definir funciones análogas a las de MATLAB, con su nombre, argumentos y valores de salida. La primera línea que no sea comentario debe empezar por la palabra function, seguida por los valores de salida (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): function [a,b,c] = nombre_función (x,y,z) En las líneas siguientes escribimos los argumentos de salida a partir de los de entrada. El nombre de la función y el nombre del archivo deben ser idénticos y no empezar por cifra sino por letra. Todas las variables dentro de una función se aíslan del espacio de trabajo de MATLAB. Las únicas conexiones entre las variables dentro de una función y el espacio de trabajo de MATLAB son las variables de entrada y salida. El número de variables de entrada pasadas a una función está disponible dentro de la función en la variable nargin y el número de variables de salida solicitadas cuando una función es llamada, está disponible dentro de la función en la variable nargout. Debemos tener siempre en cuenta que los argumentos pueden ser vectores, luego si queremos que las operaciones se hagan elemento a elemento y no vectorialmente debemos usar el punto. Guía de MATLAB – Para principiantes 63 Ejemplo: En un M-archivo guardamos lo siguiente: function [suma,resta] = calculos (x,y) % la función se llama calculos suma = x + y; resta = x - y; Ahora si queremos usarlo, debemos escribir por ejemplo en la ventana de comandos: >> x = 1:10; >> y = 16:-2:-2; >> [a,b] = calculos (x,y) a = 17 16 15 14 13 12 11 10 9 8 b = -15 -12 -9 -6 -3 0 3 6 9 12 Guía de MATLAB – Para principiantes 64 7. DECISIONES y CICLOS Las decisiones son operaciones computacionales que permiten condicionar la ejecución de instrucciones dependiendo del resultado de una expresión cuyo resultado únicamente puede ser: verdadero o falso. Se utiliza la sentencia if. Los ciclos o bucles son estructuras de control que permiten repetir las mismas o análogas operaciones sobre datos distintos. MATLAB soporta dos tipos diferentes de bucles: el bucle for y el bucle while. 7.1. Sentencia condicional if Esta estructura de control se usa para condicionar la ejecución de un bloque de instrucciones utilizando como criterio el resultado de una condición. if Condición Instrucciones del bloque A end Al entrar en la estructura, se evalúa la condición. Si el resultado es verdadero (V) se ejecutarán las instrucciones en el bloque P caso contrario, si el resultado es falso (F) el bloque no será ejecutado. En ambos casos el algoritmo continúa abajo del bloque. Guía de MATLAB – Para principiantes 65 Operadores relacionales y lógicos Para escribir la expresión que condiciona la ejecución del bloque de instrucciones se pueden usar operadores relacionales y operadores lógicos. Para que una expresión pueda ser usada como una condición, las variables incluidas en la expresión deben tener asignado algún valor, caso contrario será un error pues la condición no podría evaluarse. En el lenguaje MATLAB las expresiones usan una simbología especial: Matemáticas MATLAB Operadores relacionales <, >, ≤, ≥, =, ≠ <, >, <=, >=, ==, ~= Los operadores lógicos sirven para comprobar la veracidad o falsedad de enunciados, normalmente formados por más de unasentencia o comparación. Se suelen utilizar junto a operadores relacionales. Operador lógico Descripción Ejemplo & (and) Verdadero sólo si las dos comparaciones son verdaderas >> x=5; >> (x>2)&(x<10) ans=1 | (or) Verdadero si al menos una de las comparaciones es verdadera >> x=8; >> (x>2)|(x<5) ans=1 ~ (not) Niega el resultado de la comparación. Verdadero si la comparación es falsa >> x=8; >> ~(x>10) ans=1 Ejemplo: Describa en notación algorítmica como reducir en 10% el valor almacenado en la variable p en caso de que su valor actual sea mayor a 40. if p > 40 p = 0.9*p; end Guía de MATLAB – Para principiantes 66 Ejemplo: Calcular el total debe pagar una persona en un almacén de llantas. Los datos son la cantidad de llantas compradas y el precio unitario. Si la cantidad comprada es mayor a 4 llantas, el precio unitario se reduce en el 10%. %Compra de llantas con descuento n=input('Cantidad de llantas') p=input('Precio unitario') if n > 4 p = 0.9*p; end t=n*p; disp('Valor a pagar'); disp(t); Guía de MATLAB – Para principiantes 67 7.2. Sentencia condicional if else Esta estructura de control del flujo del algoritmo chequea una condición y dependiendo del resultado realiza las instrucciones incluidas en una de las dos opciones if Condición Instrucciones del bloque A else Instrucciones del bloque B end Guía de MATLAB – Para principiantes 68 Al entrar a esta estructura, se evalúa la condición. Si el resultado es verdadero (V) se ejecutará el bloque P asociado al valor verdadero, caso contrario, si el resultado es falso (F) se ejecutará el bloque Q. El algoritmo continúa abajo, después de ejecutar alguno de los dos bloques. Ejemplo: Describa en notación algorítmica como asignar a la variable m el mayor entre dos valores almacenados respectivamente en las variables a y b . Guía de MATLAB – Para principiantes 69 Antes del bloque, las variables a y b tienen que haber sido asignadas algún valor, caso contrario sería un error Ejemplo: Describa en notación algorítmica una solución al siguiente problema. Para el pago semanal a un obrero se consideran los siguientes datos: horas trabajadas, tarifa por hora y descuentos. Si la cantidad de horas trabajadas en la semana es mayor a 40, se le debe pagar las horas en exceso de 40 con una bonificación de 50% adicional al pago normal. Variables c: Cantidad de horas trabajadas en la semana t: Tarifa por hora d: Descuentos que se aplican al pago semanal p: Pago que recibe el obrero %Pago semanal c=input('Horas trabajadas '); t=input('Tarifa por hora '); d=input('Descuentos '); if t <= 40 p=c*t - d; Guía de MATLAB – Para principiantes 70 else p=40*t + 1.5*t*(c - 40) - d; end disp('Valor a pagar'); disp(p); Ejemplo. Dado un número entero determinar si es un número par o impar. %Determinar si un número es para o impar x=input('Ingrese un numero '); r=mod(x, 2); %Devuelve el resto de la división de x entre 2 if r == 0 disp('Par'); else disp('Impar'); end Ejemplo. Dados dos números enteros, determinar si uno es múltiplo del otro. %Determinar si un número es múltiplo de otro a=input('Ingrese el primer número '); b=input('Ingrese el segundo número '); if mod(a,b) == 0 | mod(b,a) == 0 disp('son múltiplos'); else disp('no son múltiplos'); end 7.3. Sentencia if anidada Para describir la selección de una acción entre varias opciones posibles se pueden estructurar decisiones dentro de otras decisiones. Ejemplo: Suponga que un local vende llantas para cierto tipo de carro con la siguiente política: Cantidad Precio unitario Menos de 5 80 5 o 6 70 Más de 6 60 Lea el número de llantas de una compra y muestre el valor que debe pagar Guía de MATLAB – Para principiantes 71 Variables n: Cantidad de llantas compradas p: Precio unitario (80, 70, o 60) t: Valor de la compra Guía de MATLAB – Para principiantes 72 % Compra de llantas con descuento n=input('Cantidad de llantas '); if n<5 p=80; else if n==5 | n==6 p=70; else p=60; end end t=n*p disp('Valor a pagar '); disp(t); 7.4. Bucle for Esta estructura de control se usa para poder repetir un número especificado de veces determinada acción. for i=a:b:c Bloque de instrucciones que se repiten end Guía de MATLAB – Para principiantes 73 En donde i: Variable que toma los valores del conteo a: Valor inicial del conteo b: Valor con el que se incrementa el conteo c: Valor final del conteo Para usar esta estructura de control es necesario especificar el conteo de ciclos indicando el valor inicial del conteo, el incremento y el valor final. Al ejecutarse la estructura el valor de la variable del conteo cambiará siguiendo la especificación establecida. Al entrar a esta estructura, se inicia el conteo, si la variable del conteo no excede al valor final, se ejecuta el bloque, regresa nuevamente al inicio del ciclo y se incrementa la variable del conteo. Mientras el valor del conteo no exceda al valor final, el bloque será nuevamente ejecutado. Cuando el conteo exceda al valor final, la ejecución continuará después del bloque. Ejemplo: Dado un número entero positivo n calcular y mostrar la suma de los cubos de los primeros n números naturales. Variables n: Cantidad de números naturales s: Suma de los cubos i: Conteo de ciclos (sus valores son los números naturales) %Suma de cubos n=input('Ingrese el valor final '); s=0; for i=1:n s=s + i^3; end disp('La suma es'); disp(s); Guía de MATLAB – Para principiantes 74 Ejemplo. Dado un número entero, liste las raíces cuadradas de los enteros impares entre 1 y el dato dado. n=input('Ingrese el valor final '); for x = 1: 2: n r=sqrt(x); disp([x,r]); end Ejemplo. Suma de los cuadrados de los primeros n números naturales. n=input('Ingrese el valor final '); s=0; for i = 1: n c=i^2; s=s+c; end disp('La suma es'); Guía de MATLAB – Para principiantes 75 disp(s); Ejemplo. Muestre el promedio de n datos ingresados desde el teclado n=input('Cantidad de datos '); s=0; for i = 1: n x=input('Ingrese un dato '); s=s+x; end p=s/n; disp('El promedio es'); disp(p); 7.5. Bucle while Esta estructura de control nos permite repetir un determinado bloque de instrucciones cuando una condición es verdadera. while Condición Bloque de instrucciones que se repiten end Al entrar a esta estructura, se evalúa la condición. Si el resultado es verdadero (V) se ejecutará el bloque y regresará nuevamente a evaluar la condición. Mientras la condición mantenga el valor verdadero, el bloque de instrucciones seguirá ejecutándose. Esto significa que es necesario que en Guía de MATLAB – Para principiantes 76 algún ciclo la condición tenga el resultado falso (F) para salir de la estructura y continuar la ejecución después del bloque. Ejemplo: Dada una cantidad inicial de bacterias, determine en que día la cantidad de bacterias excede a un valor máximo sabiendo que cada día se duplica esta cantidad. %Crecimiento de la cantidad de bacterias x=input('Ingrese la cantidad inicial '); m=input('Ingrese la cantidad máxima '); d=0; while x <= m x=2*x; d=d+1; end disp('La cantidad excede al máximo en el día '); disp(d); Guía de MATLAB – Para principiantes 77 Ejemplo. Suma de los cuadrados de los primero n números naturales %Suma de cuadrados con WHILE n=input('Ingrese el valor final ');s=0; i=1; while i <= n c=i^2; s=s+c; i=i+1; end disp('La suma es'); disp(s); Ejemplo. Simular lanzamientos de un dado. Muestre el resultado en cada intento hasta que salga el 5. %Simular lanzamientos de un dado hasta que sale un número x=0; while x~=5 x=fix(rand*6)+1; %fix redondea al entero más cercano a cero, rand devuelve un número aleatorio entre 0 y 1 disp(x) end Ejemplo. Simular lanzamientos de un dado. Determinar la cantidad de lanzamientos que se realizaron hasta que se obtuvo el número 5. %Conteo de lanzamientos de un dado c=0; x=0; while x~=5 x=fix(rand*6)+1; %fix redondea al entero más cercano a cero, rand devuelve un número aleatorio entre 0 y 1 c=c+1; end disp('Cantidad de lanzamientos hasta que salió el 5'); disp(c); Guía de MATLAB – Para principiantes 78 8. INTERFAZ GRÁFICA DE USUARIO 8.1. Introducción GUIDE es un entorno de programación visual disponible en MATLAB para realizar y ejecutar programas que necesiten ingreso continuo de datos. Tiene las características básicas de todos los programas visuales como Visual Basic o Visual C++. 8.2. Inicio Para iniciar nuestro proyecto ejecutamos la siguiente instrucción en la ventana de comandos: >> guide Se presenta el siguiente cuadro de diálogo: Se presentan las siguientes opciones: • Blank GUI (Default): La opción de interfaz gráfica de usuario en blanco (viene predeterminada), nos presenta un formulario nuevo, en el cual podemos diseñar nuestro programa. Guía de MATLAB – Para principiantes 79 • GUI with Uicontrols: Esta opción presenta un ejemplo en el cual se calcula la masa, dada la densidad y el volumen, en alguno de los dos sistemas de unidades. Podemos ejecutar este ejemplo y obtener resultados. • GUI with Axes and Menu: Esta opción es otro ejemplo el cual con tiene el menú File con las opciones Open, Print y Close. En el formulario tiene un Popup menu, un push button y un objeto Axes, podemos ejecutar el programa eligiendo alguna de las seis opciones que se encuentran en el menú despegable y haciendo click en el botón de comando. • Modal Question Dialog: Con esta opción se muestra en la pantalla un cuadro de diálogo común, el cual consta de una pequeña imagen, una etiqueta y dos botones Yes y No, dependiendo del botón que se presione, el GUI retorna el texto seleccionado (la cadena de caracteres ‘Yes’ o ‘No’). Elegimos la primera opción, Blank GUI, y tenemos: Guía de MATLAB – Para principiantes 80 La interfaz gráfica cuenta con las siguientes herramientas: Alinear objetos Editor de menú Editor de orden de etiqueta Editor de barra de herramientas Editor del M-file Propiedades de objetos Navegador de objetos Grabar y ejecutar (ctrl. + T). La siguiente tabla muestra una descripción de los componentes: Control Valor de estilo Descripción Check box ‘checkbox’ Indica el estado de una opción o atributo Editable Text ‘edit’ Caja para editar texto Pop-up menú ‘popupmenu’ Provee una lista de opciones List Box ‘listbox’ Muestra una lista deslizable Push Button ‘pushbutton’ Invoca un evento inmediatamente Radio Button ‘radio’ Indica una opción que puede ser seleccionada Toggle Button ‘togglebutton’ Solo dos estados, “ on” o “off” Slider ‘slider’ Usado para representar un rango de valores Static Text ‘text’ Muestra un string de texto en una caja Panel button Agrupa botones como un grupo Button Group Permite exclusividad de selección con los radio button Cambio de preferencias para mostrar nombres Caso no nos aparezca la etiqueta de cada elemento de la paleta de componentes nos dirigimos a: File>>Preferentes y seleccionamos Show names in component palette. Guía de MATLAB – Para principiantes 81 Importante: • El editor permite construir interfaces arrastrando y soltando componentes en el área de diseño de la GUI • Todas las GUIs creadas con guide empiezan con una función inical (callback) que se invoca cuando se invoca la interfaz. • La operación automática de guardado (sabe) genera un fichero .m y un fichero .fig 8.3. Propiedades de los componentes Cada uno de los elementos de GUI, tiene un conjunto de opciones que podemos acceder con click derecho. La opción Property Inspector nos permite personalizar cada elemento. Guía de MATLAB – Para principiantes 82 Al hacer click derecho en el elemento ubicado en el área de diseño, una de las opciones más importantes es View Callbacks (Callbacks son funciones que realizan las acciones requeridas cuando un componente se activa), la cual, al ejecutarla, abre el archivo .m asociado a nuestro diseño y nos posiciona en la parte del programa que corresponde a la subrutina que se ejecutará cuando se realice una determinada acción sobre el elemento que estamos editando. Por ejemplo, al ejecutar View Callbacks>>Callbacks en el Push Button, nos ubicaremos en la parte del programa: function pushbutton1_Callback(hObject, eventdata, handles) %hObject handle to pushbutton1 (see GCBO) %eventdata reserved-to be defined in a future version of MATLAB Guía de MATLAB – Para principiantes 83 %handles structure with handles and user data (see GUIDATA) 8.4. Funcionamiento de una aplicación GUI Una aplicación GUIDE consta de dos archivos: .m y .fig. El archivo .m es el que contiene el código con las correspondencias de los botones de control de la interfaz y el archivo .fig contiene los elementos gráficos. Cada vez que se adicione un nuevo elemento en la interfaz gráfica, se genera automáticamente código en el archivo .m. Para ejecutar una Interfaz Gráfica, si la hemos etiquetado con el nombre curso.fig, simplemente ejecutamos en la ventana de comandos >> curso. O haciendo click derecho en el m-file y seleccionando la opción RUN. 8.5. Manejo de datos entre los elementos de la aplicación y el archivo .m Todos los valores de las propiedades de los elementos (color, valor, posición, string...) y los valores de las variables transitorias del programa se almacenan en una estructura, los cuales son accedidos mediante un único y mismo identificador para todos éstos. Tomando el programa listado anteriormente, el identificador se asigna en: handles.output = hObject; handles, es nuestro identificador a los datos de la aplicación. Esta definición de identificador es salvada con la siguiente instrucción: guidata(hObject, handles); guidata, es la sentencia para salvarlos datos de la aplicación. Nota: guidata es la función que guarda las variables y propiedades de los elementos en la estructura de datos de la aplicación, por lo tanto, como regla general, en cada subrutina se debe escribir en la última línea lo siguiente: guidata(hObject,handles); Guía de MATLAB – Para principiantes 84 Esta sentencia nos garantiza que cualquier cambio o asignación de propiedades o variables quede almacenado. Por ejemplo, si dentro de una subrutina una operación dio como resultado una variable luis para poder utilizarla desde el programa u otra subrutina debemos salvarla de la siguiente manera: handles.luis=luis; guidata(hObject,handles); La primera línea crea la variable luis a la estructura de datos de la aplicación apuntada por handles y la segunda graba el valor. 8.6. Sentencias GET Y SET La asignación u obtención de valores de los componentes se realiza mediante las sentencias get y set. Por ejemplo si queremos que la variable unt tenga el valor del Slider escribimos: unt= get(handles.slider1,'Value'); Notar que siempre se obtienen los datos a través de los identificadores handles. Para asignar el valor a la variable unt al statictext etiquetada como text1 escribimos:set(handles.text1,'String',utpl); %Escribe el valor del Slider...en static-text Ejemplo Calculadora de la presión de vapor para sustancias puras utilizando la Ecuación de Antoine. 𝑙𝑜𝑔𝑃𝑣𝑎𝑝 = 𝐴 − 𝐵 𝑇 + 𝐶 Los datos a ingresar son: la temperatura en °C, y las constantes A, B y C. El resultado dado es la presión de saturación en mmHg. Guía de MATLAB – Para principiantes 85 No. SUSTANCIA FORMULA A B C 1 carbon-tetrachloride CCL4 6.8941 1219.58 227.17 2 trichlorofluoromethane CCL3F 6.8843 1043.01 236.86 3 dichlorodifluoromethane CCL2F2 6.68619 782.072 235.377 4 chlorotrifluoromethane CCLF3 6.35109 522.061 231.677 Insertamos los componentes de la siguiente forma: Los Tag de los “Edit Text” serán temperatura, A, B y C respectivamente, y el Tag del “Static Text” en el cuál se visualizara la respuesta será Pvap. Los Tag restantes son irrelevantes pues no participan en el código. El “Push Button” llevará por Tag pushbutton2. Una vez realizado damos en guardar y nos dirigimos al archivo .m creado. Guía de MATLAB – Para principiantes 86 Justo debajo de function A_Callback(hObject, eventdata, handles)y de los comentarios correspondientes, escribimos el siguiente código: Val=get(hObject,'String'); %Almacenar valor ingresado NewVal = str2double(Val); %Transformar a formato double handles.A=NewVal; %Almacenar en identificador guidata(hObject,handles); %Salvar datos de la aplicación Recuérdese que la instrucción get la usamos para obtener datos ingresados por el usuario. Así, la línea Val=get(hObject,'String') almacena en Val el valor ingresado en formato String. La sentencia NewVal = str2double(Val) realiza la transformación de string a double, o de palabra a número. La sentencia handles.edit1=NewVal almacena NewVal en el identificador handles.A. Por último, salvamos los datos de la aplicación con la sentencia guidata(hObject,handles). Repetimos las mismas sentencias justo debajo de: function B_Callback(hObject, eventdata, handles) function C_Callback(hObject, eventdata, handles) function temperatura_Callback(hObject, eventdata, handles) Pero usando el identificador handles.B=NewVal, handles.C=NewVal y handles.temperatura=NewVal, según sea el caso. Finalmente debajo de function pushbutton2_Callback(hObject, eventdata, handles), y de los comentarios correspondientes, editamos el siguiente código: A=handles.A; B=handles.B; C=handles.C; T=handles.temperatura; Pv=10^(A-B/(T+C)); set(handles.Pvap,'String',Pv); La cuarta línea contiene la instrucción set, con la cual establecemos un valor string al componente Pvap (Static text), con el identificador handles.Pvap. Guía de MATLAB – Para principiantes 87 8.7. Radio Button, Button Group Gracias a este panel Button Group, los radio button que se encuentren dentro del panel podrán seleccionarse solamente uno a la vez haciéndolo muy útil para los casos en los cuales e necesitan presentar una de varias opciones en la GUI. Además este sencillo programa a través de un botón muestra en un static text la opción que se ha seleccionado. Guía de MATLAB – Para principiantes 88 Para poder determinar si algún radio button especifico esta seleccionado o no, se aplica la siguiente sentencia: Ejecutar View Callbacks>>Callbacks en el Push Button, nos ubicaremos en la parte del programa: function pushbutton_Callback(hObject, eventdata, handles) % hObject handle to pushbutton (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) Justo debajo escribimos el siguiente código estado = get(handles.radiobt1,'Value'); if estado==1 set(handles.txtSalida,'String', 'Opcion 1'); Guía de MATLAB – Para principiantes 89 end estado = get(handles.radiobt2,'Value'); if estado==1 set(handles.txtSalida,'String', 'Opcion 2'); end estado = get(handles.radiobt3,'Value'); if estado==1 set(handles.txtSalida,'String', 'Opcion 3'); end estado = get(handles.radiobt4,'Value'); if estado==1 set(handles.txtSalida,'String', 'Opcion 4'); end Recuerde que radiobt1 es el nombre del primer radio button sobre la GUI, con el código estado = get(handles.radiobt1,'Value'); guardamos en la variable estado el estado del radio button, siendo 1 para seleccionado y 0 para no seleccionado. De igual modo se repite la acción para los radio button siguientes, radiobt2, radiobt3 y radiobt4. if estado==1 set(handles.txtSalida,'String', 'Opcion 2'); end Determina el String del Static text con nombre de txtSalida, según el valor de la variable estado. Guía de MATLAB – Para principiantes 90 8.8. ListBox Creamos un nuevo GUI etiquetado como Listbox. Añadimos al diseño un listbox y un par de statictext y los ordenamos como muestra la figura. Guía de MATLAB – Para principiantes 91 Haciendo doble-click en listbox editamos los elementos de la lista. Puedes colocar los nombres que desees. Con un click derecho en el listbox, nos ubicamos en View Callbacks>>Callbacks. Esto nos lleva a la m-file donde se encuentra la subrutina del listbox. Editamos el siguiente código: inf=get(hObject,'Value'); gos=get(hObject,'String'); switch inf case 1 set(handles.text1,'string','Opción 1 seleccionada'); case 2 set(handles.text1,'string','Opción 2 seleccionada'); case 3 set(handles.text1,'string','Opción 3 seleccionada'); Guía de MATLAB – Para principiantes 92 case 4 set(handles.text1,'string','Opción 4 seleccionada'); case 5 set(handles.text1,'string','Opción 5 seleccionada'); case 6 set(handles.text1,'string','Opción 6 seleccionada'); case 7 set(handles.text1,'string','Opción 7 seleccionada'); case 8 set(handles.text1,'string','Opción 8 seleccionada'); end Recuérdese que podemos cambiar la sentencia switch por un if-elseif-else. Guía de MATLAB – Para principiantes 93 9. BIBLIOGRAFIA - MATLAB Programming, MATLAB The Language of Technical Computing, 2004, The MathWorks, Inc.
Compartir