TUTORIAL DE MATLAB
Transcripción
TUTORIAL DE MATLAB
TUTORIAL DE MATLAB M. en C. Erika Vilches ๏ Toda línea que comience con >> es utilizada para denotar la línea de comando de Matlab, donde se insertan los comando. ๏ Casi todos los comandos básicos de Matlab giran en torno al uso de vectores. VECTORES ๏ Un vector se define poniendo una secuencia de números dentro de corchetes. >> v = [3 1] v = 3 ๏ Esto ๏ El 1 crea un nuevo vector que tiene la etiqueta “v” primer elemento del vector es un 3 y el segundo un 1 ๏ Matlab imprime una copia del vector después del enter ✴ Si se desea suprimir el resultado, poner un punto y coma al final de la línea >> v = [3 1]; >> ๏ Si se desea ver un vector, escribir el nombre de su etiqueta: >> v v = 3 1 ๏ De esta forma, se puede definir un vector de cualquier tamaño. >> v = [3 1 7 -21 5 6] v = 3 ๏ Note 1 7 -21 5 6 que esto produce un vector en forma de fila ✴ Si se desea crear un vector en forma de columna, se necesita utilizar la transpuesta de un vector de fila. ‣ Una transpuesta se define utilizando un apóstrofe “‘“ >> v = [3 1 7 -21 5 6]' v = 3 1 7 -21 5 6 ๏ Crear un vector con una secuencia de números con un incremento común → Utilizar dos puntos “ : “ >> v = [1:8] v = 1 ๏ Para 2 3 4 5 6 7 8 utilizar un incremento distinto a uno, definir el número de inicio, el valor del incremento y el último número. >> v = [2:.25:4] v = Columns 1 through 7 2.0000 2.2500 3.2500 3.5000 Columns 8 through 9 3.7500 4.0000 2.5000 2.7500 3.0000 ๏ Acceder elementos individuales en un vector: >> v(1) ans = 2 ๏ Este ๏ Se ✴ comando imprime el elemento 1 del vector. ha creado la nueva variable “ans” Siempre que se lleva a cabo una accion que no incluye una asignación, Matlab pondrá la etiqueta “ans” en el resultado. ๏ Matlab lleva un registro del último resultado ✴ Ej: Una vez que se creó la variable “ans”, si quisiéramos ver una transpuesta del resultado: >> [0:2:8] ans = 0 >> ans' ans = 0 2 4 6 8 2 4 6 8 ๏ Matlab permite ver partes específicas del vector. >> v = [0:2:8] v = 0 >> v(1:3) ans = 0 2 0 4 6 8 ← Se puede utilizar la misma notación que para crear el vector 2 >> v(1:2:4)' ans = 4 4 ๏ Una vez dominada la notación, podemos realizar otras operaciones: >> v(1:3)-v(2:4) ans = -2 ๏ En -2 -2 su mayoría, Matlab utiliza la notación estándar utilizada en álgebra lineal. ๏ Ejemplo: Definir un nuevo vector con los números de 0 a -4 en pasos de -1. >> u = [0:-1:-4] u = 0 ๏ Sumar -1 -2 -3 -4 u con v del modo estándar: >> u+v ans = 0 1 2 3 4 ๏ La multiplicación y división escalar se definen del modo estándar. >> -2*u ans = 0 2 4 6 8 >> v/3 ans = 0 0.6667 1.3333 2.0000 2.6667 ๏ Con estas definiciones las combinaciones lineales de vectores pueden ser definidas fácilmente y las operaciones básicas combinadas. ✴ Nota: Ojo con la precedencia de operadores. >> -2*u+v/3 ans = 0 2.6667 5.3333 8.0000 10.6667 ๏ Estas operaciones solamente pueden ser llevadas a cabo cuando las dimensiones de los vectores lo permitan. ๏ Ejemplo: Sumar dos vectores cuyas dimensiones son diferentes: >> u+v' ??? Error using ==> plus Matrix dimensions must agree. MATRICES ๏ Definir una matriz es similar a definir un vector. ๏ Para definir una matriz, se le puede tratar como una columna de vectores de fila: >> A = [ 1 2 3; 3 4 5; 6 7 8] A = 1 3 6 2 4 7 3 5 8 ๏ También se le puede tratar como una fila de vectores de columna (Es importante incluir los espacios): >> B = [ [1 2 3]' [2 4 7]' [3 5 8]'] B = 1 2 3 2 4 7 3 5 8 ๏ Si pierde la noción de qué variables ha definido, el comando whos le permitirá conocer todas las variables que tiene en su workspace. >> whos Name Size A B ans u v 3x3 3x3 1x5 1x5 1x5 Bytes 72 72 40 40 40 Class double double double double double Attributes ๏ La multiplicación matriz-vector puede hacerse facilmente. ✴ Es importante tener en cuidado de que las matrices y vectores tengan en tamaño adecuado. >> v = [0:2:8] v = 0 2 4 6 8 >> A*v(1:3) ??? Error using ==> * Inner matrix dimensions must agree. >> A*v(1:3)' ans = 16 28 46 ๏ Es posible trabajar con diferentes partes de una matriz, del mismo modo que es posible hacerlo con vectores. >> A(1:2,3:4) ??? Index exceeds matrix dimensions. >> A(1:2,2:3) ans = 2 4 3 5 >> A(1:2,2:3)' ans = 2 3 4 5 FUNCIONES DE MATRICES ๏ Una vez que pueda crear y manipular matrices, puede llevar a cabo muchas operaciones estándar sobre ellas. ✴ Ej: Encontrar el inverso de una matriz >> inv(A) Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 3.469447e-18. ans = 1.0e+15 * -2.7022 5.4043 -2.7022 4.5036 -9.0072 4.5036 -1.8014 3.6029 -1.8014 ๏ Matlab es case sensitive. >> inv(a) ??? Undefined function or variable a. ๏ Otras posibles operaciones incluyen encontrar una aproximación de los eigen valores de una matriz. Hay dos versiones de esta rutina: ✴ Una ✴ La sólo encuentra los eigen valores otra encuentra ambos, los eigen valores y los eigen vectores ✴ Si olvida cual es cual, puede obtener más información escribiendo help eig en el prompt ‣ Para obtener información de cualquier función: help nom_func >> eig(A) ans = 14.0664 -1.0664 0.0000 >> [v,e] = eig(A) v = -0.2656 -0.4912 -0.8295 0.7444 0.1907 -0.6399 -0.4082 0.8165 -0.4082 0 -1.0664 0 0 0 0.0000 e = 14.0664 0 0 ๏ Ej: Obteniendo >> diag(A) ans = 1 4 8 la diagonal de una matriz: ๏ Para limpiar todos los datos y comenzar de nuevo, utilizar el comando clear. ✴ Nota: No pregunta si tienes una segunda opinión y sus resultados son FINALES. >> clear >> whos FUNCIONES DE VECTORES ๏ Sumas y restas de vectores. ✴ Ej: Definiremos dos vectores y los sumaremos y restaremos. ๏ Definiendo los dos vectores: >> v = [1 2 3]' v = 1 2 3 >> b = [2 4 6]' b = 2 4 6 ๏ Sumándolos >> v+b ans = 3 6 9 >> v-b ans = -1 -2 -3 y restándolos: ๏ Las multiplicaciones y sumas de vectores y matrices deben seguir reglas estrictas. ✴ Ej: No es posible sumar un vector de fila a un vector de columna. ✴ Ej: En una multiplicación el número de columnas de la matriz a la izquierda debe ser igual al numero de filas de la matriz de la derecha. >> v*b ??? Error using ==> * Inner matrix dimensions must agree. >> v*b' ans = 2 4 6 >> v'*b ans = 28 4 8 12 6 12 18 ๏ Matlab permite hacer operaciones a cada elemento de una matriz. ✴ Ej: Multiplicar cada elemento en el vector v con su correspondiente entrada en el vector b → Utilizar el símbolo “ .* “ ‣ Es posible colocar un punto delante de cada símbolo matemático para indicarle a Matlab que se desea que la operación se haga en cada entrada del vector. >> v.*b ans = 2 8 18 >> v./b ans = 0.5000 0.5000 0.5000 ๏ Si se pasa un vector a una función matemática predefinida, regresará un vector del mismo tamaño, donde cada entrada es encontrada realizando la operación especificada en la entrada correspondiente del vector original. >> sin(v) ans = 0.8415 0.9093 0.1411 >> log(v) ans = 0 0.6931 1.0986 ๏ Ej: Podemos definir y manipular vectores de gran tamaño del mismo modo que hemos trabajado vectores pequeños. >> x = [0:0.1:100] x = Columns 1 through 7 0 0.5000 0.1000 0.6000 0.2000 0.3000 0.4000 99.7000 99.8000 [stuff deleted] Columns 995 through 1001 99.4000 99.5000 99.9000 100.0000 99.6000 >> y = sin(x).*x./(1+cos(x)); ๏A través de esta misma simple manipulación de vectores, Matlab permite graficar los resultados. >> plot(x,y) ๏A través de esta misma simple manipulación de vectores, Matlab permite graficar los resultados. >> plot(x,y,'rx') ๏ Para conocer más de la función plot: help plot >> help plot PLOT Linear plot. PLOT(X,Y) plots vector Y versus vector X. If X or Y is a matrix, then the vector is plotted versus the rows or columns of the matrix, whichever line up. If X is a scalar and Y is a vector, length(Y) disconnected points are plotted. PLOT(Y) plots the columns of Y versus their index. If Y is complex, PLOT(Y) is equivalent to PLOT(real(Y),imag(Y)). In all other uses of PLOT, the imaginary part is ignored. Various line types, plot symbols and colors may be obtained with PLOT(X,Y,S) where S is a character string made from one element from any or all the following 3 columns: b g r c m y k blue green red cyan magenta yellow black . o x + * s d point circle x-mark plus star square diamond : -. -- solid dotted dashdot dashed v ^ < > p h triangle (down) triangle (up) triangle (left) triangle (right) pentagram hexagram For example, PLOT(X,Y,'c+:') plots a cyan dotted line with a plus at each data point; PLOT(X,Y,'bd') plots blue diamond at each data point but does not draw any line. PLOT(X1,Y1,S1,X2,Y2,S2,X3,Y3,S3,...) combines the plots defined by the (X,Y,S) triples, where the X's and Y's are vectors or matrices and the S's are strings. For example, PLOT(X,Y,'y-',X,Y,'go') plots the data twice, with a solid yellow line interpolating green circles at the data points. The PLOT command, if no color is specified, makes automatic use of the colors specified by the axes ColorOrder property. The default ColorOrder is listed in the table above for color systems where the default is blue for one line, and for multiple lines, to cycle through the first six colors in the table. For monochrome systems, PLOT cycles over the axes LineStyleOrder property. PLOT returns a column vector of handles to LINE objects, one handle per line. The X,Y pairs, or X,Y,S triples, can be followed by parameter/value pairs to specify additional properties of the lines. See also SEMILOGX, SEMILOGY, LOGLOG, PLOTYY, GRID, CLF, CLC, TITLE, XLABEL, YLABEL, AXIS, AXES, HOLD, COLORDEF, LEGEND, SUBPLOT, STEM. Overloaded methods help idmodel/plot.m help iddata/plot.m >> plot(x,y,'y',x,y,'go') >> plot(x,y,'y',x,y,'go',x,exp(x+1),'m--') ๏ Crear una matriz cuadrada de 5x5 de ceros: >> a = zeros(5) a = 0 0 0 0 0 ๏ Crear 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 una matriz de ceros de 2x3: >> a = zeros(2, 3) a = 0 0 0 0 0 0 0 0 0 0 0 CICLOS ๏ Nos permiten repetir ciertos comandos ๏ Todas las estructuras de ciclos en Matlab se inician con palabras clave como “for” o “while” y terminan con la palabra “end” ๏ Ciclos ✴ Para for: indicar a Matlab cuando iniciar y cuando parar, se da un vector en el enunciado for y Matlab recorrerá cada valor en el vector ๏ Ej: Un ciclo simple se ejecutará cuatro veces, cambiando cada vez una variable j en el ciclo. >> for j=1:4, j end j = 1 j = 2 j = 3 j = 4 ๏ Cuando ๏j Matlab lee el enunciado “for” construye un vector, [1:4] toma cada valor dentro del vector, en orden ๏ Cada vuelta, el enunciado for actualizará el valor de j y repetirá los enunciados que se encuentren dentro del ciclo. ๏ Ej: Definiendo un vector y cambiando su contenido posteriormente. >> v = [1:3:10] v = 1 4 7 10 3 4 >> for j=1:4, v(j) = j; end >> v v = 1 2 ๏ Ej: Realizar operaciones en las filas de una matriz. Iniciar en la segunda fila de la matriz y substraer la fila previa de la matriz y repetir esta operación en las siguientes filas. >> A = [ [1 2 3]' [3 2 1]' [2 1 3]'] A = 1 2 3 >> B = A; 3 2 1 2 1 3 >> for j=2:3, A(j,:) = A(j,:) - A(j-1,:) end A = 1 1 3 3 -1 1 2 -1 3 1 1 2 3 -1 2 2 -1 4 A = ๏ Ciclo while: ✴ Repite una secuencia de comandos mientras una condición se cumpla. >> n = 1 n = 1 >> while n < 3 n = n+1 end n = 2 n = 3 PLOTTEANDO EN MATLAB ๏ El comando plot es utilizado para generar plots en Matlab ๏ Acepta una gran variedad de argumentos ✴ Ej: Si solo queremos un plot, le damos el rango, el dominio y el formato >> plot(x,y,'go') ๏ Si queremos plottear mas de una gráfica en una sola imágen utilizamos el comando subplot. ✴ Matlab tratara a la ventana como un arreglo de plots. ๏ Ej: Una >> >> >> >> ventana con una fila y dos columnas, dándonos 2 plots. subplot(1,2,1); plot(x,y,'go',x,true) subplot(1,2,2); plot(x,abs(true-y),'mx') ๏ El comando clf nos permite limpiar completamente la figura actual. ๏ Para darle un título a nuestro plot, utilizamos la función title. ๏ Para darle una etiqueta al eje x utilizamos la función xlabel. ๏ Para darle una etiqueta al eje y utilizamos la función ylabel. ✴ Ej: plot(x1,y1,'go',x1,true1) plot(x1,abs(true1-y1),'mx') subplot(1,2,1); plot(x,abs(true-y),'mx') subplot(1,2,2); plot(x1,abs(true1-y1),'mx') title('Errors for h=1/32') xlabel('x'); ylabel('|Error|'); subplot(1,2,1); xlabel('x'); ylabel('|Error|'); title('Errors for h=1/16') ๏ Para imprimir un archivo postscript del plot actual se utiliza el comando print. ✴ Ej: Crear un archivo postscript llamado error.ps que resida en el directorio actual print -dps error.ps ✴ Si pasamos error.ps a PDF, vemos lo siguiente: ARCHIVOS EJECUTABLES ๏ Primero, necesitamos ✴ El crear un archivo. mejor editor es utilizar el editor integrado de Matlab. ‣ Permite hacer manipulaciones sencillas del archivo ‣ Editor muy simple y fácil de iniciar. ‣ No es un editor muy avanzado. ๏ Los archivos ejecutables de Matlab tienen la extensión *.m ✴ En este ejemplo crearemos el archivo rectangle_area.m ✴A continuación, Matlab buscara en el directorio actual por el archivo “rectangle_area”, leera el archivo y ejecutará los comandos en él ✴ Si Matlab no puede encontrar el archivo, lanzará el mensaje de error: ??? Undefined function or variable 'rectangle_area' ‣ En este caso, se escribió mal el nombre del programa, el nombre del programa es erroneo o el archivo se encuentra en un directorio que Matlab no conoce • En el último caso, se debe indicar a Matlab en qué directorio buscar • La lista de directorios en los que se buscan archivos se llama path ๏ Para desplegar el path de búsqueda, escribir path >> path MATLABPATH /Applications/MATLAB74/toolbox/matlab/general /Applications/MATLAB74/toolbox/matlab/ops /Applications/MATLAB74/toolbox/matlab/lang /Applications/MATLAB74/toolbox/matlab/elmat /Applications/MATLAB74/toolbox/matlab/elfun /Applications/MATLAB74/toolbox/matlab/specfun /Applications/MATLAB74/toolbox/matlab/matfun /Applications/MATLAB74/toolbox/matlab/datafun /Applications/MATLAB74/toolbox/matlab/polyfun /Applications/MATLAB74/toolbox/matlab/funfun /Applications/MATLAB74/toolbox/matlab/sparfun /Applications/MATLAB74/toolbox/matlab/scribe /Applications/MATLAB74/toolbox/matlab/graph2d ... etc ๏ Para agregar un nuevo directorio al path de búsqueda en plataformas Windows: path(path,'c:\documents and settings\erika\desktop') ๏ Para agregar un nuevo directorio al path de búsqueda en plataformas UNIX: path(path,'/Users/erika/Desktop') ๏ Para remover directorios del path de búsqueda utilizamos la función rmpath: rmpath('/Users/erika/Desktop') ๏ Para utilizar el editor de Matlab para crear el archivo, escribir: >> edit rectangle_area.m Matlab nos preguntara si deseamos crear el archivo, a lo que indicaremos que si: ๏ Una vez que el editor aparezca en la pantalla, typear lo siguiente: % file: rectangle_area.m % This matlab file will find the area of a rectangle % % A = b * h % % % To run this file you will first need to specify % the following: % b : the base size % h : the height size % % The routine will mutiply the given base times the % heigth and will store the area of the rectangle in A. % % If you haven't guessed, you can use the percent sign % to add comments =). % A = b * h; ๏ Salvar el archivo e ir a la ventana de comandos y mandar llamar el archivo escribiendo el nombre del mismo: >> rectangle_area ๏ En este momento, deberemos obtener el siguiente error: >> rectangle_area ??? Undefined function or variable 'b'. Error in ==> rectangle_area at 20 A = b * h; ๏ Si se trata de llamar el archivo sin haber definido primero las variables b y h, se obtendrá un mensaje de error. ๏ Es importante antes de mandar llamar el archivo, definir todas las variables que no estén definidas dentro del mismo. >> >> >> >> b = 5; h = 4; rectangle_area who Your variables are: A b h >> whos Name A b h Size 1x1 1x1 1x1 >> A A = 20 Bytes 8 8 8 Class double double double Attributes ๏ Una vez que las variables necesarias se han definido, se puede typear el comando rectangle_area ✴ Matlab buscara en el directorio actual por un archivo llamado rectangle_area.m ✴ Una vez que encuentre el archivo, lo lee y ejecuta los comandos como si hubieran sido escritos desde el teclado. SUBRUTINAS EN MATLAB ๏ En ocasiones, se desea repetir una secuencia de comandos pero se desea poder hacerlo con distintos vectores y matrices. ๏ Una forma de poder hacerlo es utilizando subrutinas. ✴ Las subrutinas son como los archivos ejecutables pero se le pueden “pasar” distintos vectores y matrices a utilizar. function [A] = rectangle_area(b, h) % file: rectangle_area.m % This matlab file will find the area of a rectangle % % A = b * h % % % To run this file you will first need to specify % the following: % b : the base size % h : the height size % % The routine will mutiply the given base times the heigth % and will return the area of the rectangle. % % ex: [A] = rectangle_area(5, 4) A = b * h; end ๏ Para mandar llamar la subrutina: >> A = rectangle_area(5,4) A = 20 >> rectangle_area(5,4) ans = 20 ๏ Si deseamos devolver más de un resultado, podemos hacerlo indicando la lista de resultados a devolver de la siguiente forma: function [A, V] = rectangle_area_volume(b, h, a) A = b * h; V = A * a; end ๏ De este modo, podemos mandar llamar nuestra función devolviendo solamente un resultado (el área en este ejemplo) o ambos (tanto el área como el volumen) >> A = rectangle_area_volume(5,8,3) A = 40 >> [A, V] = rectangle_area_volume(5,8,3) A = 40 V = 120 ๏ Cuando se colocan comentarios en la segunda línea, actúan como “help file” >> help rectangle_area file: rectangle_area.m This matlab file will find the area of a rectangle A = b * h To run this file you will first need to specify the following: b : the base size h : the height size The routine will mutiply the given base times the heigth and will return the area of the rectangle. ex: [A] = rectangle_area(5, 4) EL ENUNCIADO IF ๏ En algunas ocasiones queremos que ciertas partes de nuestro programa sean ejecutadas únicamente bajo ciertas circunstancias ๏ La forma de hacer esto es utilizar un enunciado if, cuya estructura básica vemos a continuación: if end (condition statement) (matlab commands) ๏ Una if estructura condicional mas complicada: (condition statement) (matlab commands) elseif (condition statement) (matlab commands) elseif (condition statement) (matlab commands) . . . else (matlab commands) end ๏ Las condiciones son enunciados booleanos y se pueden hacer comparaciones estándar. ๏ Las comparaciones válidas incluyen: ✴< - Menor que ✴> - Mayor que ✴ <= - Menor igual que ✴ >= - Mayor igual que ✴ == - Igual ✴ ˜= - No es igual ๏ Ej: Hacer que la variable j sea igual a -1 si a es menor que b >> a = 2; >> b = 3; >> if a<b j = -1; end ๏ Ej: Hacer que la variable j sea igual a -1 si a es menor que b y 2 si es mayor que b >> a = 4; >> b = 3; >> if (a<b) j = -1; elseif (a>b) j = 2; end ๏ Ej: Hacer que la variable j sea igual a 3 si no se cumple ninguna condición >> a = 4; >> b = 4; >> f (a<b) j = -1; elseif (a>b) j = 2; else j = 3 end ๏ Se pueden comprobar múltiples expresiones booleanas utilizando los operadores estándar "&" (and), ¦ (or) y ˜ (not). if (a < b) & (b >= c) Matlab commands end ARCHIVOS ๏ Conforme se trabaja en una sesión, se generan matrices y vectores ๏ El comando utilizado para guardar TODOS los datos de una sesión es save. ๏ El comando utilizado para traer el conjunto de datos guardado en un archivo a la sesión es load. ๏ Ej: Guardar todos los datos presentes en la sesión en un archivo llamado todo.mat (*.mat es la extensión para los datos Matlab) >> u = [1 3 -4]; >> v = [2 -1 7]; >> whos Name Size u v 1x3 1x3 Bytes 24 24 Class Attributes double double >> save todo.mat >> ls todo.mat es el comando para listar todos los archivos en el directorio actual. ✴ ls ✴ En este caso hemos creado el archivo todo.mat que contiene a los vectores u y v. ๏ Ej: Los datos pueden ser cargados de nuevo en Matlab con el comando load. >> clear >> whos >> load todo.mat >> whos Name Size u v Bytes 1x3 1x3 24 24 Class Attributes double double >> u + v ans = 3 ๏ En 2 3 este ejemplo, el espacio de datos es limpiado de todas las variables. El contenido de todo el archivo todo.mat es posteriormente cargado a memoria. ๏ No es necesario cargar el total del contenido de un archivo a la memoria. ๏ Después de que se especifica el nombre del archivo es posible listar las variables que se desea cargar separadas por espacios ๏ Ej: Solamente cargar la variable u en la memoria. >> clear >> whos >> load todo.mat u >> whos Name Size u 1x3 24 >> u u = 1 3 Bytes -4 Class double Attributes ๏ El comando save funciona exáctamente de la misma forma ✴ Si solamente se desea guardar un par de variables, se enlistan dichas variables después del nombre del archivo separadas por espacios ๏ Para conocer más información sobre save, escribir help save ✴ Hay varias opciones para formato del archivo, etc. ๏ Matlab permite guardar los datos generados en una sesión utilizando el comando diary. ✴ No quedan guardados para poder ser ejecutados como un archivo ejecutable ✴ Es ๏ El útil para entregar tareas o para tomar notas. diario de una sesión: ✴ Es iniciado con el comando diary seguido del nombre del archivo en donde se guardara el texto. ✴ Seguido ✴ Al de todos los comandos que formarán el diario finalizar, escribir el comando diary solo, lo que escribirá una copia exacta de la sesión en el archivo y lo cerrará. ๏ Ej: Generar un diario en el archivo diario.txt >> diary diario.txt >> a = [1 2 3] a = 1 2 3 >> b = [4 5 6] b = 4 5 6 7 9 >> a + b ans = 5 >> diary ๏ El contenido del archivo diario.txt es el siguiente: DOCUMENTACIÓN ๏ Para ver la ayuda de las funciones disponibles en Matlab de un modo más visual que el texto plano que ofrece la función help utilizamos la función: >> doc nombre_de_la_funcion ๏ Lo que nos despliega una ventana con la información que solicitamos como la que podemos ver en la siguiente diapositiva. EJERCICIO ๏ Realice un programa en Matlab que le permita conocer las raíces de una ecuación de segundo grado. ๏ Dispone de 30 minutos. ๏ Solución: function [x1, x2] = raices (a, b, c) x1 = (-b+sqrt((b^2)-4*a*c))/(2*a); x2 = (-b-sqrt((b^2)-4*a*c))/(2*a); end ๏ Corriendo el programa: >> [x1, x2] = raices(1,3,1) x1 = -0.3820 x2 = -2.6180 ๏ Si nuestro código tuviera una indentación incorrecta y queremos que Matlab la corrija por nosotros: ✴ Seleccionamos ✴ Click el código a corregir derecho → Smart Indent ✴ Nuestro código queda correctamente indentado. ๏ Si queremos conocer el número de argumentos que nos envió el usuario, utilizamos la función nargin ๏ Si queremos conocer el número de resultados que espera obtener el usuario, utilizamos la función nargout ๏ Para enviar un mensaje de error y terminar el programa, utilizamos la función error ๏ Ej: Validar que el usuario nos haya enviado 3 argumentos y terminar el programa en caso contrario function [x1, x2] = raices (a, b, c) if nargin ~= 3 error ('Faltan datos') end x1 = (-b+sqrt((b^2)-4*a*c))/(2*a); x2 = (-b-sqrt((b^2)-4*a*c))/(2*a); end ๏ Si mandamos llamar el programa con un número distinto de argumentos, el programa mostrará el mensaje de error y terminará. >> [x1, x2] = raices(1,3) ??? Error using ==> raices at 3 Faltan datos ๏ Si deseamos desplegar un mensaje durante la ejecución de nuestro programa, utilizamos la función disp ๏ Ej: Indicar si las raices resultantes son reales o complejas function [x1, x2] = raices (a, b, c) if nargin ~= 3 error ('Faltan datos') end x1 = (-b+sqrt((b^2)-4*a*c))/(2*a); x2 = (-b-sqrt((b^2)-4*a*c))/(2*a); if isreal(x1) disp('Raices reales') else disp('Raices complejas') end end ๏ Al ejecutar nuestro programa, nos indica el tipo de raices en un mensaje >> [x1, x2] = raices(1,3,1) Raices reales >> [x1, x2] = raices(1,3,6) Raices complejas x1 = x1 = -0.3820 x2 = -2.6180 -1.5000 + 1.9365i x2 = -1.5000 - 1.9365i ๏ Para limpiar de comandos nuestra ventana Command Window, utilizamos la función clc → DEBUGGER ๏ Para utilizar el debugger, debemos colocar breakpoints ✴ Click en la raya ubicada a la izquerda de la línea donde quiero colocar mi breakpoint ✴ Si tengo ediciones sin guardar, el breakpoint se verá gris, al momento de guardar el archivo, se verá rojo. → ๏ Para iniciar el debugger, ir a la ventana Command Window y correr la función, en este caso: ๏ Esto nos llevará automáticamente a la ventana del editor y detendrá la ejecución en el breakpoint. ๏ Para controlar la ejecución de nuestro programa, utilizamos los botones “Set/clear breakpoint”, “Clear breakpoints in all files”, “Step”, “Step in”, “Step out”, “Continue” y “Exit debug mode” ๏ Para colocar breakpoints condicionales ✴ Dar click derecho sobre la línea en la que se coloca el breakpoint y seleccionar “Set conditional breakpoint” ✴ Indicar ✴ Correr la condición y presionar el botón “OK” el programa desde el Command Window, la ejecución se detendrá justo en el punto indicado, cuando la condición indicada se haya cumplido. ↓ ↓ ๏ Para evaluar un área específica de nuestro código en lugar de evaluar todo nuestro programa ✴ Seleccionar ✴ Click ✴ Los el área que se desea evaluar derecho, seleccionar “Evaluate Selection” resultados aparecerán en el Command Window ↓ → TIPOS DE DATOS ๏ Enteros ๏ Strings ๏ Booleanos ๏ Celdas ๏ Estructuras ๏ Variables ๏ Objetos Simbólicas ๏ Conversiones entre tipos de datos: GENERACIÓN DE REPORTES ๏ Una vez que terminamos nuestro programa, en ocasiones deseamos generar un reporte del mismo ya sea en HTML, Word, PPT, LaTeX, etc... ๏ Matlab provee ayuda para realizar este tipo de reportes. ๏ El script sobre el que queremos hacer nuestro reporte: clc, clear all a = 1; b = 2; c = 2; x1 = (-b+sqrt((b^2)-4*a*c))/(2*a); x2 = (-b-sqrt((b^2)-4*a*c))/(2*a); if isreal(x1) disp('Raices reales') else disp('Raices complejas') end ๏ Ir al menú Cell dar click en Enable Cell Mode ๏ Para colocar el título utilizar “%% “ lo que automáticamente cambia el color de fondo identificando la celda ๏ Posteriormente, con “%” indicamos ๏ Para la descripción. crear otra celda “%% “ ✴ Colocaremos este script. de este modo la descripción de cada etapa de ๏ Una vez que ya escribimos todas las descripciones, dar click en la flecha que aparece al lado del icono lo que nos lleva al editor de configuración de las publicaciones. ✴ Ahí encontramos los distintos formatos de salida y características de ellos. ๏ Al momento de realizar la publicación hace correr el script también. Ej: Publicación en HTML ๏ Para el caso de HTML, si se desea utilizar: ✴ Negritas ✴ Italicas → Colocar el texto entre asteriscos *texto* → Colocar el texto entre guiones bajos _texto_ ↓ ๏ Para insertar una ecuación ✴ Click derecho ✴ “Insert Text Markup” ✴ “Tex Equation” ๏ Nos despliega una ecuación default ๏ Para conocer las opciones que tenemos para editar las ecuaciones Tex: ✴ En la documentación escribir “text properties” ✴ Seleccionar ✴ Bajar la segunda opción hasta encontrar las opciones para Tex ๏ Generando el código LaTeX para la publicación: >> syms a b c x >> ec = a * (x^2) + b * x + c; >> raices = solve(ec) raices = -1/2*(b-(b^2-4*a*c)^(1/2))/a -1/2*(b+(b^2-4*a*c)^(1/2))/a >> latex(raices(1)) ans = -1/2\,{\frac {b-\sqrt {{b}^{2}-4\,ac}}{a}} >> latex(raices(2)) ans = -1/2\,{\frac {b+\sqrt {{b}^{2}-4\,ac}}{a}} ๏ Copiando los resultados de las fórmulas en LaTeX en el lugar donde se coloca la ecuación en nuestro script nos queda: ๏ Al publicar, las fórmulas se ven así: ๏ Asimismo, podemos elegir publicar nuestro reporte en LaTeX, lo que nos devuelve lo siguiente: ... etc