Download matlabpara principiantes - cfata-unam
Document related concepts
Transcript
MATLAB para principiantes MATLAB PARA PRINCIPIANTES 1 MATLAB para principiantes Universidad Nacional Autónoma de México Centro de Física Aplicada y Tecnología Avanzada 2 MATLAB para principiantes MATLAB PARA PRINCIPIANTES Rafael Quintero Torres Rafael Quintero Bermúdez Centro de Física Aplicada y Tecnología Avanzada Juriquilla Querétaro Universidad Nacional Autónoma de México Universidad Nacional Autónoma de México 3 MATLAB para principiantes 4 Matlab para principiantes D.R. © 2012 Universidad Nacional Autónoma de México Av. Universidad 3000 Ciudad Universitaria, Delegación Coyoacán, 04510, México ,D. F. Centro de Física Aplicada y Tecnología Avanzada Boulevard Juriquilla 3001 76230 Juriquilla, Querétaro ISBN: 978-607-02-3578-8 Diseño de cubierta: D.G. Anahit Indra Ortiz Molina Edición a cargo de: Jit Press, S.A. de C.V. General Santana 253 Col. M. Carrera 07070 México, D.F., Tel. (55) 5794 5198 DERECHOS RESERVADOS Queda prohibida la reproducción o transmisión total o parcial del texto o las ilustraciones de la presente obra bajo cualesquiera formas, electrónicas o mecánicas, incluyendo fotocopiado, almacenamiento en algún sistema de recuperación de información, dispositivo de memoria digital o grabado sin el consentimiento previo y por escrito del editor. Impreso y hecho en México Printed in México MATLAB para principiantes 5 Emprendemos la redaccion de este texto como resultado de que el alfabetismo en MATLAB en las universidades continúa siendo muy bajo y de que la necesidad de emplear las buenas herramientas de cómputo matemático de manera más extendida esté presente. El material aquí contenido está pensado para estudiantes que desconocen MATLAB, pero que les gustaría introducirse en él de manera autodidácta. También puede ser de utilidad para estudiantes de computación y métodos numéricos ya que los ejemplos y el interés principal es el control de las acciones de la máquina por medio de la sintaxis de MATLAB. Suponemos que existe un genuino interés o una necesidad en introducirse en esta temática, que se tiene un conocimiento básico de álgebra y que se aceptan los retos con singular alegría. MATLAB para principiantes 6 Prólogo En las primeras palabras del material se evidencia la intención: ayudar a que herramientas como MATLAB sean empleadas por los estudiantes de licenciatura. Que este libro bosqueje un camino por el cual se pueda migrar de las calculadoras al cómputo científico; no se pretende que este material acompañe a los lectores hasta el final del camino, sino sólo que encienda el fuego de la curiosidad y que pueda guiar los primeros pasos y que permita que esta exploración continúe mucho más de lo aquí planteado. Una buena conclusión preliminar es que las opcines de ayuda incluidas en MATLAB son una fuente muy valiosa para reproducir lo que ya sabemos hacer con otras herramientas y aprender otras alternativas de resolver problemas. Este material sólo trata de poner orden en los primeros pasos, esperamos que muchos más sean dados a lo largo de los estudios de licenciatura y deseablemente se conviertan en una herramienta indispensable para el trabajo profesional. Si bien esperamos que este material pueda ser cubierto de manera autocontenida, la experiencia de uno de nosotros (RQT) nos obliga a advertir que la utilidad plena se dará como parte de un curso formal. Creemos que una de las virtudes de la formación universitaria es la estructura que se desarrolla en los individuos al estar expuestos al orden de las matemáticas, que también se puede obtener con las reglas de juegos y con la programación. La sinergia de la disponibilidad de computadoras, de buenas herramientas de programación y solución de problemas, podrían conducir a una mejor formación universitaria. Esperamos que disfruten su experiencia con MATLAB, y que esta sea el principio de un camino lleno de satisfacciones y placer para su formación. Agradecemos el tiempo, los comentarios y las correcciones de los revisores, en particular a los académicos del CFATA, Dr. Miguel de Icaza Herrera y Dr. José Luis Aragón Vera, al académico de la UAM-Azcapotzalco, Dr. Ernesto Rodrigo Vázquez Cerón y a la física Rosa Elena López Escalera Romano. De la misma manera, agradecemos las opiniones de los alumnos de la Licenciatura en Tecnología de la UNAM, generaciones 2009 a 2011. Todos sus comentarios disminuyeron los errores y enriquecieron el texto, pero los que permanecen son sólo nuestra responsabilidad. MATLAB para principiantes 7 Tabla de contenido 1 2 3 4 5 6 7 Introducción..................................................................................................................9 1.1 MATLAB por primera vez .................................................................................9 1.2 Uso elemental de MATLAB ............................................................................ 11 1.3 La ayuda en MATLAB .................................................................................... 13 1.4 Definición de variables..................................................................................... 14 1.5 Exhibición de resultados .................................................................................. 15 1.6 Representación de números en MATLAB...................................................... 15 1.7 Guardar el trabajo ............................................................................................. 19 1.8 Ejercicios........................................................................................................... 20 Arreglos y matrices................................................................................................... 21 2.1 Construcción de arreglos de números ............................................................. 22 2.2 Manipulación de los números en los arreglos................................................. 28 2.3 Operaciones con matrices ................................................................................ 31 2.4 Operaciones con arreglos ................................................................................. 36 2.5 Ejercicios........................................................................................................... 38 Programas (scripts) y funciones (functions)............................................................ 40 3.1 Programas (Scripts) .......................................................................................... 40 3.2 Funciones (Functions)...................................................................................... 41 3.3 Trabajo y mejora de programas (scripts) ........................................................ 43 3.4 Funciones de funciones .................................................................................... 45 3.5 Ejercicios........................................................................................................... 49 Control de flujo de programa ................................................................................... 50 4.1 Uso fundamental............................................................................................... 50 4.2 Ejemplo: Autómatas unidimensionales........................................................... 52 4.3 Ejemplo: Autómatas bidimensionales ............................................................. 54 4.4 Ejercicios........................................................................................................... 57 Métodos numéricos................................................................................................... 63 5.1 Mínimos cuadrados, modelo lineal.................................................................. 63 5.2 Promedio y desviación estándar ...................................................................... 68 5.3 Algoritmo simplex............................................................................................ 71 5.4 Método indirecto de solución de ecuaciones simultáneas ............................. 75 5.5 Raíces de polinomios (Método de Laguerre).................................................. 78 5.6 Runge Kutta ...................................................................................................... 81 5.7 Descomposición de LU .................................................................................... 86 5.8 Interpolación suave (splines) ........................................................................... 90 Gráficos ..................................................................................................................... 95 6.1 Dos dimensiones............................................................................................... 95 6.2 Tres dimensiones .............................................................................................. 98 6.3 Guardar imágenes ............................................................................................. 99 6.4 Ejercicios........................................................................................................... 99 Prácticas de buena programación........................................................................... 102 7.1 Elegir vectores en lugar de bucles. ................................................................ 102 7.2 Evitar que los arreglos crezcan mientras se corre el programa. .................. 105 7.3 Escritura de MEX-File cuando los bucles son inevitables........................... 105 7.4 Evitar variables que cambian de tamaño en gráficas activas ....................... 105 MATLAB para principiantes 8 7.5 Acceso a archivos ........................................................................................... 106 7.6 Otras consideraciones..................................................................................... 108 7.7 Ejercicios......................................................................................................... 108 8 GUI .......................................................................................................................... 110 8.1 Ejemplo de script para FFT ........................................................................... 110 8.2 Ejemplo de function para FFT ....................................................................... 111 8.3 Ejemplo de GUI para FFT ............................................................................. 112 8.4 Construcción del archivo ejecutable.............................................................. 115 8.5 Ejercicios......................................................................................................... 116 9 Conexión con C....................................................................................................... 119 9.1 MATLAB Coder ............................................................................................ 119 9.2 MATLAB Compiler ....................................................................................... 124 10 Simulink .............................................................................................................. 126 10.1 Simulink y solución de ecuaciones algebraicas............................................ 126 10.2 Simulink y solución de ecuaciones diferenciales ......................................... 128 10.3 Simulink y solución de sistemas de ecuaciones diferenciales ..................... 129 11 SimMechanics ..................................................................................................... 133 Apéndice A. control de accesorios de PC...................................................................... 137 A.1 Instrucciones para el control de un micrófono................................................... 137 A.2 Instrucciones para el control de una cámara ...................................................... 139 MATLAB para principiantes 9 1 Introducción MATLAB es un software para computación en ingeniería y ciencias. Nos ofrece un poderoso lenguaje de programación, una posibilidad de realizar y manipular gráficas con facilidad, además de reunir conocimiento acumulado en estas áreas de manera estructurada y útil. MATLAB se centra en el cómputo y no en las matemáticas, así que las expresiones y la manipulación simbólica no son su fuerte, a excepción de las empleadas con la herramienta symbolic o con el programa MuPAD. Las soluciones son numéricas e inexactas, asociadas a los artificios del redondeo. Esto puede verse desde dos puntos de vista, como un problema, al evidenciar el riesgo de errores ocultos en los resultados y como una ventaja, ya que permite el cálculo numérico con un conjunto de números diferente al de los números reales. Comparado con otros lenguajes de programación numéricos como C++ o FORTRAN, MATLAB es mucho más fácil de usar y está integrado con una biblioteca formada de una gran cantidad de información, módulos, programas, subrutinas, relacionadas con el cómputo numérico. La única comparación donde MATLAB queda en desventaja con respecto a C++ o FORTRAN es en el rubro de velocidad de ejecución, pero puede ser menos drástica con buenas prácticas de programación, como veremos aquí. MATLAB no es la herramienta de elección para cómputo de alto desempeño (aunque probablemente sí lo sea en el futuro cercano) pero es una plataforma inmejorable para proyectos desde elementales hasta intermedios y en muchos casos para probar lo que en otros lenguajes sería código muy elaborado o que requiere de demasiado tiempo de elaboración. MATLAB permite obtener una respuesta numérica a una expresión algebraica, de manera similar a una calculadora, también permite obtener una aproximación numérica a algunos problemas donde la sustitución no es posible, por ejemplo, el valor de E en la expresión E02 E E tan E . Lo que consideramos como la solución enfrenta dos dificultades; 1) que MATLAB entienda una cosa diferente de lo que estamos pensando, en virtud de la falta de dominio de la herramienta y 2) que el procedimiento emprendido sea adecuado para alcanzar la solución. Espero que este escrito ayude a aminorar el primer problema, el segundo se logra con el dominio de los métodos numéricos y de la experiencia. No se espera que MATLAB pueda resolver un problema que no se pueda resolver con papel, lápiz y tiempo. En general se es más exitoso, si antes de expresar el problema en MATLAB, se ha expresado en papel y lápiz. 1.1 MATLAB por primera vez Al iniciar MATLAB aparece el escritorio, Multipaneled desktop, con diversas áreas de trabajo, que se puede modificar al gusto de cada usuario, acción que no es necesaria en un principio. La figura 1.1 ilustra las áreas de trabajo, Command Window (elipse punteada) MATLAB para principiantes 10 donde se escriben los comandos, inmediatamente frente al prompt >> (rectángulo punteado) y donde aparecen las respuestas numéricas. prompt Start Figura 1.1 Multipaneled desktop en MATLAB. MATLAB es un lenguaje de programación que interpreta las instrucciones línea por línea, a diferencia de otros lenguajes de programación que compilan el programa total. Esta es una afirmación correcta en parte, ya que como veremos existen las funciones que no se interpretan o incluso programas completos en MATLAB que pueden ser ejecutables. Esta parte se aclarará al ver MEX files y GUI en los capítulos 7 y 8. Workspace (elipse continua) muestra las variables definidas e información al respecto; en un principio está vacía, pero al definir variables o realizar operaciones se acumulan y se pueden editar. Al hacer doble clic sobre la variable inicia un editor que permite su visualización y edición, siempre que sea menor a 65 536 renglones o columnas. En esta misma área se puede visualizar la carpeta en la que se está trabajando al seleccionar la pestaña correspondiente a Current Directory, MATLAB solo ve el contenido de la carpeta que está seleccionada. Para cambiar el directorio se emplea el acceso rápido (circulo segmentado, arriba al centro). Command History (rectángulo continuo) lista las acciones solicitadas en Command Window, de la más reciente a la más antigua y se pueden pasar a la zona de trabajo navegando por medio de las flecha en el teclado (arriba y abajo) o haciendo doble clic en la línea histórica deseada. Start (rectángulo segmentado) es el puerto de entrada a muchas de las funciones de MATLAB, herramientas de trabajo, ayudas y más. Usualmente debe estar preparado para pasar horas de sano entretenimiento en los ejemplos y guías de uso. Cuando se le ha pedido a MATLAB que realice una actividad que toma tiempo, desaparece el prompt y a la derecha de Start aparece la leyenda Busy, que indica la necesidad de tener paciencia. Si MATLAB para principiantes 11 se desea cancelar el proceso se puede hacer presionando al mismo tiempo las teclas ctrl-c restableciendo el prompt y aparece la leyenda Ready a la derecha de Start. En cálculo numérico elemental, un camino trivialmente simplista es usar una calculadora cuando la tarea es muy simple, después utilizar Excel si se requiere de gráficas más elaboradas y finalmente C++ cuando se tienen en mente acciones no desarrollas por un programa particular. El salto de una herramienta a la otra puede ser intimidante e incluso limitante. Si quisiéramos que MATLAB estuviera presente en esta evolución, igualmente puede ser una alternativa a cualquiera de las herramientas anteriores. Una de las limitaciones para iniciar a usar MATLAB como calculadora (inicialmente y después el cielo es el límite) es que no se parece a una. Superando esta diferencia, se puede fácilmente superar las ventajas de Excel como hoja de cálculo y de ahí pasar a usar MATLAB con más provecho. 1.2 Uso elemental de MATLAB Si se escribe una expresión válida en el área de Command Window, la respuesta aparece de manera inmediata. >> 5*3 (presionar la tecla de cambio de línea, enter, ) ans = 15 >> La multiplicación de dos números se realiza y el resultado se guarda en la variable ans. El prompt indica que está listo para nuevas instrucciones. >> 3^3 ans = 27 >> La potencia es igualmente evidente, el resultado se escribe en la variable ans, sustituyendo cualquier valor o contenido que tuviera anteriormente. >> 1/0 Warning: Divide by zero. ans = Inf >> Aquí Inf es la manera de representar ∞, que indica un número más grande que cualquiera que puede ser escrito y que en este caso resulto de intentar dividir el número uno entre cero. >> cos(pi/4) MATLAB para principiantes 12 ans = 0.7071 >> Aquí la función trigonométrica está en radianes, pi representa el símbolo , medida del perímetro del círculo en función del diámetro. La misma función trigonométrica en grados donde el círculo tiene 360 grados se escribe cosd. >> exp(i*pi/4) ans = 0.7071 + 0.7071i >> Aquí i (también puede ser 1i, “uno-i”, que evita confusiones con la variable i) representa a la raíz cuadrada de menos uno 1 , unidad de los números imaginarios. i puede ser también una variable, así que no está de más tener precauciones para no cometer errores. En cuanto a la notación exp(x) es la representación de e x , donde e es el número de Euler cuyo valor aproximadamente es 2.718281828. >> 0/0 Warning: Divide by zero. ans = NaN >> Aquí NaN representa a un resultado indefinido, se formó de Not a Number, no es un número y aquí surge de intentar dividir cero entre cero. >> (3-exp(log(3)))/3 ans = 1.4803e-016 >> Aquí la respuesta algebraica esperada es cero, pero en virtud de que la aritmética de punto flotante realiza por aproximaciones los cálculos, en su lugar aparece un número muy pequeño, 1.4803 10-16 (1.4803e-016=1.4803E-016); los cálculos en la computadora producen errores, estos con la ventaja del punto flotante (notación exponencial) son muy pequeños. eps representa el valor del error máximo aritmético para el número uno en una máquina típica que describe los números en punto flotante con 64 bits y que es 2.2204 10-16; cualquier número mas pequeño que eps es indistinguible del uno. Dicho de otra manera el siguiente número mayor que uno y distinguible de uno en la máquina es 1+eps. >> eps MATLAB para principiantes 13 ans = 2.2204e-016 >> Algunas reservadas log(x) palabras es logaritmo natural deenxMATLAB log(x) es el logaritmo natural log10(x) es el logaritmo base de 10xde x log10(x) logaritmo base 10cuya de x tangente es x atan(x) eseselelángulo en radianes atan(x) en radianes sinh(x) es el ángulo seno hiperbólico decuya x tangente es x sinh(x) es el seno hiperbólico de x sqrt(x) raíz cuadrada de x sqrt(x) es la raíz cuadrada de x 1.3 La ayuda en MATLAB MATLAB contiene un enorme material que es imposible dominarlo todo y menos aún recordarlo todo, por lo que es importante aprenda a aprender y recordar de manera eficiente. No es por accidente que al iniciar el programa, la primera línea invite a explorar el material de ayuda que contiene: To get started, select MATLAB Help or Demos from the Help menu. >> El texto subrayado es una liga directa a la ayuda en MATLAB, que abre una ventana como la mostrada en la figura 1.2. En la figura 1.2 se ve la ventana de ayuda; en el panel izquierdo está el navegador, en el que se puede explorar por contenido, por índice, hacer búsquedas o explorar las demostraciones. Aquí se muestra el navegador por contenido (elipse continua), el libro de MATLAB (elipse segmentada), las funciones por categoría (elipse punteada) y las funciones matemáticas elementales. En el panel derecho se ve la lista de funciones exponenciales, haga doble clic en cualquier nombre en azul para ver la ayuda preparada en cuanto a su definición y uso. MATLAB para principiantes 14 Figura 1.2 Ventana de ayuda de MATLAB. Muchas veces no se recuerda o conoce el nombre de la función que hace lo que buscamos, para esas ocasiones la búsqueda alfabética de funciones puede ser útil. Si recordamos el nombre de la función pero no su uso, podemos emplear Command Window y teclear help y el comando del que requiere ayuda, por ejemplo help log y aparece en el Command Window la ayuda al respecto, usualmente simplificada. 1.4 Definición de variables Se pueden almacenar las variables usadas en el cálculo de las expresiones >> a=exp(1) a = 2.7183 >> Aquí a tiene el valor de la constante de Euler. >> c=a*b ??? Undefined function or variable 'b'. >> Aquí intentamos guardar en la variable c el resultado de multiplicar el número de Euler (a) por el contenido de b. Como no habíamos definido previamente el valor de b se nos indica. El prompt regresa en espera de una instrucción válida. La multiplicación a*b tiene la notación correcta, (a)(b) no es aceptable como multiplicación, como tampoco MATLAB para principiantes 15 lo es ab ni a.b; estos dos últimos casos corresponden a otras variables, la variable ab y la componente b del objeto a (a.b). A continuación aparecen algunas convenciones útiles que hay que tener en cuenta: los comentarios que ignora el intérprete de MATLAB, la asignación de caracteres alfanuméricos a las variables y la continuación de comandos en varias líneas. Los caracteres que hay después del símbolo de porcentaje (%) son comentarios y aparecen en color verde en el editor de MATLAB además de que no son interpretados. En el libro los comentarios aprarecen en tono gris. >> % este es un comentario, no hay ejecución >> x=a^2; % ; al final de la instrucción evita resultado en Command Window >> y='letreros';% los apostrofes (') definen alfanuméricos >> z=1+2+3+... 4+5+6 % ... es una continuación de línea que los aparezca el caracteres z = 21 >> 1.5 Exhibición de resultados Los resultados numéricos aparecen con cuatro decimales, pero se pueden exhibir con 15 decimales (format long), en forma fraccional aproximada (format rat) o en formato hexadecimal (format hex). La palabra format sin argumento regresa a la forma predeterminada. >> P= pi P = 3.1416 >> format long >> P P = 3.141592653589793 >> format rat >> P P = 355/113 >> format >> 1.6 Representación de números en MATLAB La representación de números en base decimal se basa en escribirlos como una suma de potencias de 10. Por ejemplo, para el número 273.375 MATLAB para principiantes 16 273.375 2x10 2 7 x101 3x10 0 3x10 1 7 x10 2 5x10 3 Esta representación es tan común e intuitiva que no abundaremos en ella, pero la representación de este mismo número en base binaria y hexadecimal es interesante de recordar. 273.375 D 100010001.011B 1x 28 1x 2 4 1x 2 0 0 x 2 1 1x 2 2 1x 2 3 o 273.375 D 111.6 H 1x16 2 1x161 1x16 0 6 x16 1 Donde los subíndices D, B y H se refieren a decimal, binario y hexadecimal, respectivamente. Binario y hexadecimal son intercambiados fácilmente si agrupamos los binarios en 4 números, partiendo del punto. En este ejemplo: 0001 0001 0001.0110B, que son 1 1 1.6H Decimal 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 Binario 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 Hexadecimal 0 1 2 3 4 5 6 7 8 9 a b c d e f MATLAB tiene una representación de los números en notación binaria de 64 bits que cumple la norma IEEE 754 y que es: (1)s 2( 1022 ) ( f ) , si e = 0 (1) s 2 ( e1023 ) (1 f ) , si e = [1, 2046] Representación especial, si e = 2047 donde s representa al signo del número y se representa con un bit 0 o 1. e representa al exponente del número y se define con 11 bits que cubre del entero decimal 1 al 2046, en cuyo caso se llaman números normales. En caso de que e sea cero su MATLAB para principiantes 17 representación se denomina número subnormal y en tal caso el término (1+f) se sustituye sólo por f. En caso de que e sea 2047 se reserva para representaciones especiales tales como NaN o inf. f representa a la mantisa del número y está formada por 52 bits, lo que produce números 52 desde el número decimal 2 52 al número 2 n ; también puede ser cero y en tal caso el n 1 número es una potencia de 2. La siguiente tabla ilustra los números en MATLAB de acuerdo con la norma IEEE 754, en particular los valores para s, e y f. Nombre Decimal aproximado Hexadecimal s e f -inf -realmax= (-)(2^1023)(1+ 2^-1+2^-2+…) (-)(2^1023)(1) -1=(-)(2^0)(1) -realmin=(-)(2^1022)(1) 0 eps(0)=(+) (2^-1022)(2^-52) realmin=2^-1022 realmin+ eps(realmin) 1=(+)(2^0)(1) 3=(+)(2^1)(1+.5) --------------------1.797693134862316e+308 fff 0000000000000 ffe fffffffffffff 1 1 2047 2046 0 pi (+)(2^1023)(1) realmax= (+)(2^1023)(1+ 2^-1+2^-2+…) Inf=realmax+ eps(realmax) NaN 3.141592653589793 8.988465674311580e+307 1.797693134862316e+308 52 2 n n 1 -8.988465674311580e+307 -1 -2.225073858507201e-308 ffe 0000000000000 bff 0000000000000 801 0000000000000 1 1 1 2046 1023 1 0 0 0 0 000 0000000000000 000 0000000000001 0 0 0 0 0 4.940656458412465e-324 2.225073858507201e-308 2.225073858507202e-308 001 0000000000000 001 0000000000001 0 0 1 1 0 1 3 3ff 0000000000000 400 8000000000000 0 0 1023 1024 0 1024 2046 2046 0.57079… 0 400 921fb54442d18 7fe 0000000000000 7fe fffffffffffff 0 0 0 2 52 2 52 2 1 52 2 n 1 --------------------- 7ff 0000000000000 0 2047 0 --------------------- fff 8000000000000 1 2047 .5 Los números reales son necesarios para las operaciones aritméticas; y acceder a ellos permite disponer de un continuo de números, que se pueden visualizar como cualquier punto de la recta numérica, no así el conjunto de números que se puede representar en MATLAB, que es diferente en dos aspectos fundamentales: 1. Existen vacíos entre los números; qué tan grande es este vacío depende del número en cuestión. 2. No es posible representar de manera exacta a todos los números reales. Por ejemplo los números reales entre 72057594037927932 y 72057594037927944 se representan por el mismo número en MATLAB (4370000000000000H) = n MATLAB para principiantes (+)2^(416^2+316+7-1023)(1+0), 72057594037927936. 18 que sólo es correcto para el número En el siguiente ejemplo, al que se puede regresar después de cubrir el capítulo 3, permite obtener la representación binaria de cualquier número real en notación extendida, y se basa en la división sucesiva de potencias de 2. Enseguida crea un vector para almacenar las potencias y exhibe el número. La línea con la instrucción (KKKL(a(a>=0)+1)=1;) indica que el vector KKKL en su posición x tomará el valor 1, donde x es el valor que tiene el vector a sumándole 1, sólo cuando a es mayor igual a 0. En las posiciones donde a<0 se deja el valor que KKKL ya tenía, en este caso cero. % Representación binaria de un número % % Formato: [bina]=detobi(número, resolución) % % Ejemplo: A=detobi(73.02,20) % % Se busca el binario de 73.02 con una representación de 20 % bits function [bina]=detobi(numero,representacion) m=1; while numero>2^-representacion; a(m)=floor(log(numero)/log(2)); numero=numero-2^a(m); m=m+1; end if max(a)>0 ndi1=max(a)+1; else ndi1=0; end if min(a)<0 ndi2=min(a); else ndi2=0; end KKKL=zeros(1,ndi1);KKKR=zeros(1,abs(ndi2)); KKKL(a(a>=0)+1)=1;KKKR(abs(a(a<0)))=1; resss=[num2str(KKKL),'.',num2str(KKKR)] format long bina=sum(10.^a); Un ejemplo vívido de la importancia del orden de las operaciones y de la representación numérica en MATLAB se puede ver en siguiente ejemplo. Hallar los valores de n tales que MATLAB para principiantes 19 n 1 f (n ) 1 n 1 0 1.1 n El problema es que si desarrollamos el paréntesis, resulta que f(n) es cero para cualquier valor de n. MATLAB, sin embargo, realiza las operaciones en el orden de su prioridad, primero potencia, después multiplicación y división y finalmente suma y resta, (los paréntesis tienen preferencia sobre el orden de prioridad). En este caso se sumará n+1 antes de dividir entre n, después se resta el uno, y todo se multiplica por n, y lo que resulte se resta al uno. Como resultado, entonces, de este orden de operaciones y de la representación numérica, f(n) no vale cero para toda n. En MATLAB el código para ilustrar la función anterior es el siguiente, donde eps se emplea para aumentar y normalizar la diferencia con el cero. n=1:500; f=(1-n.*((n+1)./n-1))./eps(n); plot(n,f,'*') Figura 1.3 Diferencia artificialmente introducida por MATLAB por el orden de las operaciones, solo las n que son potencias de 2 dan cero para la función f(n). 1.7 Guardar el trabajo Si se desea guardar las variables se procede por File-Save workspace as y se guarda con el nombre deseado. Para guardar la historia de comandos se procede a seleccionarlos en el panel de Command History y con el botón derecho del ratón se selecciona Create MFile y aparece otra ventana con la historia de los comandos y ahí se puede guardar su contenido en un archivo. Más adelante se verá cómo generar las figuras, las cuales se pueden guardar en formatos muy diversos. *.fig es el formato nativo de MATLAB, es modificable y es el más conveniente ya que guarda los valores que lo generaron. *.eps es postscript y se pueden anexar a documentos Word y la calidad no cambia al cambiar el tamaño. *.jpg es el más común pero la calidad es muy limitada y disminuye rápidamente al cambiar de tamaño. Este comentario se basa en que las imágenes bitmap (como las jpg) fundamentan su calidad en el tamaño del pixel. Las imágenes vectoriales basan su calidad en fórmulas que describen los objetos así que se pueden ampliar o reducir sin alterar la calidad. MATLAB para principiantes 1.8 Ejercicios 1. Evalúe las siguientes expresiones en MATLAB. e a) A e e 1 b) B cos 1 3 c) C log e 7 d) determine qué número del conjunto es primo {0,1,2,3,4,5,6,7,8,9,10,97,99} Respuestas: a) A=3.8143e+006 b) B=1.9106 [rad] c) C=0.1718 d) [2, 3, 5, 7, 97] 20