[tutorial matlab]

29
pág. 1 El siguiente es un tutorial de los comandos de MATLAB. 1.1.1 Antes de iniciar los cálculos En Windows, pulse sobre el menú Inicio y dentro de Programas busque la carpeta Matlab y ejecute el programa MATLAB. El procedimiento para salir de MATLAB es similar al que se sigue para salir de cualquier otra aplicación en Windows. Nota: Matlab distingue entre mayúsculas y minúsculas, tanto para los nombres de variables como para los comandos. Ayuda: si no entiende bien el significado de un comando, teclee help y el nombre del comando en cuestión. El comando help presenta una explicación concisa pero precisa de los comandos; tal vez no resulte útil para los principiantes, pero será uno de los comandos que utilice con mayor frecuencia. Por ejemplo, he aquí una traducción de las respuestas a help quit y a help help: » help quit QUIT Terminar MATLAB. QUIT termina MATLAB. » help help HELP Documentación en linea. HELP, sin más, presenta una lista de todos los temas de ayuda primarios. Cada tema primario corresponde a un nombre de directorio en MATLABPATH. "HELP tema” proporciona ayuda sobre el tema especificado. El tema puede ser el nombre de un comando o de un directorio; en el primer caso, HELP exhibe información acerca de ese comando; en el segundo caso, HELP muestra la Tabla de contenido del directorio especificado. No es necesario proporcionar el nombre de camino completo del directorio; basta con el último componente o algunos de los últimos componentes. Por ejemplo, tanto “help general” y “help matlab/general” exhiben la Tabla de Contenido del directorio toolbox/matlab/general. HELP FUN presenta la ayuda para la función FUN. T = HELP('tópico') retorna el texto de ayuda en una cadena de caracteres separada por '\n'. LOOKFOR XYZ busca la cadena XYZ en la primera línea de comentario Asignatura: Señales y sistemas discretos. Tema: Tutorial de Matlab.

Upload: joaquin-martinez

Post on 18-Aug-2015

269 views

Category:

Documents


0 download

DESCRIPTION

Tutorial de Matlab

TRANSCRIPT

pg. 1 El siguiente es un tutorial de los comandos de MATLAB. 1.1.1 Antes de iniciar los clculos EnWindows,pulsesobreelmenInicioydentrodeProgramasbusquelacarpetaMatlaby ejecute el programa MATLAB. El procedimiento para salir de MATLAB es similar al que se sigue para salir de cualquier otra aplicacin en Windows. Nota:Matlabdistingueentremaysculasyminsculas,tantoparalosnombresdevariablescomo para los comandos. Ayuda:sinoentiendebienelsignificadodeuncomando,tecleehelp y elnombredel comandoencuestin.Elcomandohelp presentaunaexplicacinconcisaperoprecisadelos comandos; talvezno resultetilpara losprincipiantes,pero serunode loscomandosque utilice conmayorfrecuencia.Porejemplo,heaquunatraduccindelasrespuestasahelp quitya help help: help quit QUITTerminar MATLAB. QUIT termina MATLAB. help help HELPDocumentacin en linea. HELP, sin ms, presenta una lista de todos los temas de ayuda primarios. Cada tema primario corresponde a un nombre de directorio en MATLABPATH. "HELP tema proporciona ayuda sobre el tema especificado. El tema puede ser el nombre de un comando o de un directorio; en el primer caso, HELP exhibe informacin acerca de ese comando; en el segundo caso, HELP muestra la Tabla de contenido del directorio especificado. No es necesario proporcionar el nombre de camino completo del directorio; basta con el ltimo componente o algunos de los ltimos componentes. Por ejemplo, tanto help general y help matlab/general exhiben la Tabla de Contenido del directorio toolbox/matlab/general. HELP FUN presenta la ayuda para la funcin FUN.

T = HELP('tpico') retorna el texto de ayuda en una cadena de caracteres separada por '\n'. LOOKFOR XYZ busca la cadena XYZ en la primera lnea de comentario Asignatura: Seales y sistemas discretos. Tema: Tutorial de Matlab. pg. 2 del texto de HELP de todos los archivos M que se encuentren en MATLABPATH. Para todos los archivos en los que se encuentre la cadena, LOOKFOR exhibir las lneas en las que se encontr. MORE ON hace que HELP haga una pausa despus de cada pantalla si el texto de ayuda ocupa varias pantallas. Vase tambin LOOKFOR, WHAT, WHICH, DIR, MORE. Versin: Lo primero que el usuario debe saber acerca del software de MATLAB es qu versin est usando. Para obtener esta informacin, teclee version. Qu: El comando what produce una lista de los archivos M-, MAT- y MEX- presentes en el directoriodetrabajoactual1.Elcomandowhatnombredirectoriolistalosarchivosdel directorionombredirectorio enelmatlabpath. Noesnecesarioespecificarelnombre completo de la ruta del directorio; basta con el o los ltimos componentes. Por ejemplo, tanto what generalcomowhatmatlab/generallistanlosarchivosM-deldirectorio toolbox/matlab/general. Quin: El comando who produce una lista de las variables del espacio de trabajo actual; whos exhibeInformacinadicionalacercadecadavariable;who global y whos global listan las variables del espacio de trabajo global. Reloj: El comando clock exhibe nmeros como ans = l.0e+03 * 1.9970 0.0030 0.0050 0.01500.01400.0091 El primer nmero, 1.0e+03, es un multiplicador; los nmeros de la segunda lnea tienen el siguiente significado: [ao, mes, da, hora, minuto, segundo] Se puede exhibir la misma informacin en formato entero con fix(clock) . La respuesta es ans = 199735151956 loqueindicaquelafechafueelao1997,tercermes,quintoda,15horas,19minutosy56 segundos,aproximadamenteseisminutosdespusde queseimprimiel primerejemplode clock. Podemosmedirconclockeltiempoquetardaunaejecucin.Porejemploasignet_0=clock antesdequeseinicieunclculoyt_1=clock cuandosehayacompletado;entonces,t_1 - t_0 nos dar el tiempo transcurrido durante el clculo. Tambin podemos usar tic y toc para medir el tiempo transcurrido. El comando date proporciona informacin similar, pero en un formato ms breve: 1 Archivo M: un archivo de guin o funcin (su formato es nombrearchivo.m) Archivo MAT: un archivo que contiene datos binarios (su formato es nombrearchivo.mat) Archivo MEX: un archivo MATLAB ejecutable compilado a partir de Fortran o C (su formato es nombrearchivo.mex) pg. 3 ans = 5-Mar-97 Camino:ElcomandopathimprimelarutadebsquedavigentedeMATLAB.El comando p = path devuelve una cadena p que contiene la ruta. El comando path(p0)cambia la ruta a p0, que es una cadena que contiene la nueva ruta. El comando path (pl,p2) cambia la rutaalaconcatenacindelasdoscadenasderutap1yp2.Portanto,path(path,p3) anexarundirectorionuevop3alarutavigenteypath(p3,path)antepondrunaruta nueva. Obtenerentorno:Elcomandogetenv(PATH)muestralasrutasdeMATLAB vigentes (se usan comillas simples). Diario:Elcomandodiary on escribetodoloqueseintroduceporelteclado,as comolamayorpartedeloqueseenvaalapantalla,aunarchivollamadodiary y diary off termina la escritura. Si ya existe el archivo diary, las salidas de la pantalla se anexarn a esearchivo.Sepuedeespecificarunnombredearchivodistintodediaryescribindolo despus de la palabra diary. Si no se incluyen las palabras on u off, el comando diary solo alternarentrediary onydiary off.Elarchivopuedeimprimirseenpapeloeditarse posteriormente. Escape:Elsigno!eseloperadorquesirveparasalirtemporalmentedeMATLAB.Con estesigno,setieneaccesoaldirectoriofueradeMATLAB.Porejemplo,supongaqueabri MATLABdesdeunshelldeUnix;entonces,podremitiruncomandodeUnixdesdedentrode MATLABescribiendodichocomandodespusdelsignodeescape.Porejemplo,esposibleabrir desdeMATLABsoftwaredeedicindetextoscomoeleditorvitecleando:!vi nombrearchivo. Podemos utilizar el escape de forma anloga en una PC para los comandos de DOS,oinclusoenunaMacparaunnmerolimitadodecomandos.Porejemplo,podemosdar formato a un disquete desde MATLAB en una PC con ! format a:. Sin embargo, la ejecucin deprogramasmedianteestemecanismo,sobretodosisetratadesoftwaregrficoode comunicaciones, puede echar a perder el entorno de computacin. Demostracin:Elcomandodemoguaalusuarioparaquepuedaejecutardiversas demostracionesqueseeligendeunmen.Elcontenidodealgunasdemostracionesnoesfcilde entender a la primera, pero puede estudiarse en varias ocasiones si se tiene inters. 1.1.2 Cmo iniciar los clculos Clculos con una sola variable: Cuando se abre una ventana de comandos, aparece la indicacin EDU>> (en la versin estudiantil y >> en la versin profesional) en la esquina superior izquierda de laventana.Podemosescribircualquiercomandoadelantedelaindicacin.Ennuestras explicaciones de los comandos, omitiremos la indicacin por sencillez. Como ejemplo sencillo, evaluemos: Volumen =433r, con r = 2 Los comandos que debemos teclear son: pg. 4 Listado 1.1a r = 2; vol = (4/3)*pi*r^3; donde pi = en MATLAB. Cada lnea se teclea adelante de la indicacin EDU>> y se oprime la tecla return (o intro o Enter) al final de la lnea. Observe que en el guin anterior cada lnea es un comando y termina con un signo de punto y coma. El circunflejo ^ despus de r es el operador de exponente. Cuando trabajamos en la ventana de comandos, la computadora calcula la respuesta de cada comando inmediatamente despus de pulsarse la tecla return. Por tanto, el valor de vol ya est en la computadora; cmo podemos hacer que aparezca en la pantalla? Laformamsfcilde exhibir el resultadoes teclear volypulsarreturn.Lacomputadora exhibir vol = 33.510 Otra forma de imprimir el valor de vol es omitir el signo de punto y coma al final del segundo comando: Listado 1.1b r = 2; vol = (4/3)*pi*r^3 Sifaltaelpuntoycoma,elresultadoseimprimirinmediatamentedespusdecalcularse.Sin embargo,comocasinuncaresultacmodoirimprimiendotodoslosresultados,porlogeneralse coloca un punto y coma despus de cada comando. Podemos escribir varios comandos en una misma lnea separndolas con signos de punto y coma. Si necesita imprimir los resultados de cada comando que se ejecute, separe los comandos con comas y termine la lnea con o sin una coma. Por ejemplo, si escribe r = 2, vol = (4/3)*pi*r^3 se imprimirn los valores de r y de vol, pero si escribe r = 2; vol = (4/3)*pi*r^3; no se imprimirn resultados. Es posible dividir un comando largo en varias lneas.En MATLAB, la marca de continuacin es ... y se coloca al final de la lnea que se desea continuar; por ejemplo, Listado 1.2 r = 2; vol = (4/3)*3.14159 ... *r^3; la indicacin EDU> no aparecer en la lnea que siga a la marca de continuacin. Operadoresaritmticos: Losoperadoresaritmticoscomo+,-,*y/sonlosmismosque losdelenguajesdeprogramacintradicionalescomoFortranyC,ysonrespectivamente,ms, menos,multiplicarydividir.MATLABempleaunoperadornotradicional,\,quepuedellamarse pg. 5 divisininversa.Este operadorproduceel recproco deladivisin;osea,a\b produceb/a.Por ejemplo, c = 3\1 c = 0.3333 No es conveniente utilizar este operador en clculos ordinarios, pero adquirir importancia cuando tratemos el lgebra lineal. Enunciado if: El enunciado if siempre debe terminar con un enunciado end; por ejemplo, Listado 1.3 r = 2; if r>0, vol = (4/3)*3.14159*r^3; end ObsrvesetambinquealescribirelguinanteriorlaindicacinEDU>noaparecesino hasta despus de teclearse end. Si el enunciado matemtico requiere un igual despus de if, utilice == para indicar igualdad de 2 trminos, como en el lenguaje C; por ejemplo, Listado 1.4 r = 2; if r==2, vol = (4/3)*pi*r^3 end El operador diferente de se escribe ~=; por ejemplo, Listado 1.5 r = 2; if r ~= 3, vol = (4/3)*pi*r^3; end Los operadores mayor que, menor que, igual o mayor que e igual o menor que son, respectivamente, > < >= 3 o g < 0, entonces a = 6 se escribe if g>3 | g 3 y c < 0, b = 19 se expresa como if a>3 & c2*i, break, end end end Otro ejemplo es Listado 1.11 r=0 while r 10elciclowhile terminar.Enseccionesposterioresseexplicarnconmayordetalleinputy fprintf. En un lenguaje de programacin sin orden de corte, se utilizara goto para romper un ciclo. MATLAB no cuenta con la orden goto. Ciclo infinito: Hay ocasiones en que conviene utilizar un ciclo infinito que pueda romperse cuandosesatisfagaciertacondicin.Enelsiguienteejemplosemuestrauncicloinfinitoquese rompe slo si se satisface la condicin x > xlimit: while 1 . . if x > xlimit, break; end . . end Cmoborrarvariables:Alejecutarseloscomandos,MATLABmemorizalasvariables utilizadas.SusvalorespermanecenenlamemoriahastaquesesaledeMATLABohastaquese borranlasvariables,locualsehaceconelcomandoclear.Sislosedeseaborraralgunas variables, sus nombres se indican despus de la palabra clear; por ejemplo, clear x y z Cmo borrar la ventana de comandos: si desea borrar la ventana, utilice el comando clc 1.1.3 Lectura y escritura Hay varias formas de pasar datos a y de MATLAB. Los mtodos pueden agruparse en tres clases: pg. 10 (a) Operacin interactiva mediante teclado o el ratn (b) Lectura de o escritura en un archivo de datos (c) Empleo de save o load Enelrestodeestasubseccinslopresentaremosinformacinmnimaenlotocantealecturay escritura. Se proporcionar mayor informacin en la seccin 1.8. Lectura de entradas de un teclado: MATLAB puede aceptar datos de entrada a travs del teclado mediante el comando input. Si se desea leer un nmero, un enunciado bsico sera: z = input('Teclee el radio:') La parte Teclee el radio: es un mensaje de solicitud que se exhibe en la pantalla. Cuando se tecleeelvalordelradioysepulselateclareturn(intro),eldatoseguardarenz.Tambines posible introducir cadenas desde el teclado. Un enunciado bsico sera: z = input('Indique su nombre: ','s') Elsegundoargumento,s,indicaquelaentradadeltecladoesunacadena.Lavariablezse convertirenunavariabledearreglo(vectordefila)amenosquelacadenaslocontengaun carcter. Se puede introducir una cadena con input sin s si la cadena se teclea encerrada entre apstrofes. En este caso, el mensaje de solicitud podra ser: z = input('Indique su nombre (encerrado en apstrofes): ') Formatodesalida:Esposibleimprimirmensajesynmerosconformatosiseutiliza fprintf; por ejemplo, fprintf('El volumen de la esfera es %12.5f.\n', vol) Aquseincluyentrelosapstrofoslacadenaquesevaaexhibir,elformatodeunnmeroyel operador de nueva lnea. El estilo del formato debe ser familiar para quienes conocen el lenguaje C: El volumen de la esfera es la cadena que se exhibir, %12.5f es el formato y es similar a F12.5 en Fortran, y \n es el operador de nueva lnea que avanza en una lnea la posicin en la pantalla.Eloperadordenuevalneasepuedecolocar encualquierlugardelacadena.Porltimo, vol es la variable que se imprimir en el formato %12.5f. Si se omite \n, lo que se imprima en seguida aparecer en la misma lnea. El enunciado fprintf('formato_e: %12.5e\n', 12345.2) exhibir formato e: 1.23452e+04 Siseescribenconsecutivamentedosenunciadosdeimpresinsin\nenelprimer enunciado, por ejemplo, fprintf('formato_e: %12.5e', 12345.2) fprintf('formato_f: %12.3f\n', 7.23462) pg. 11 toda la salida se imprimir en una sola lnea, as: formato_e: 1.23452e+04 formato f: 7.235 Sepuedeteclearunvalorenteroempleandoelmismoformato,sloqueseponeun0 despus del punto decimal; por ejemplo, fprintf('formato_f: %12.0f\n', 93) produce formato_f: 93 Sisedeseaimprimirvariosnmerosenunamismalnea,puedeutilizarsevariasveces fprintf sin \n, excepto en el ltimo enunciado. Escrituraenunarchivoespecfico:Esposibleutilizarelenunciadofprintfpara escribirsalidasconformatoenunarchivo.Paraello,seincluyeelnombredelarchivoenel argumento; por ejemplo, fprintf('archivo_x', 'Volumen = %12.5f\n', vol) escribirlasalidaenelarchivodenombrearchivo_x.Sinoexisteelarchivo,secrearuno nuevo; si existe, la salida se anexar al final de su contenido. Si ya existe archivo_x, es posible eliminarlo con!erase archivo_x en Windows. Se puede tener un mejor control de los archivos con fopen y fclose. Si desea mayores detalles consulte la gua de usuario de MATLAB. 1.2 VARIABLES DE ARREGLO Variables de arreglo unidimensional: Las variables de arreglo unidimensional tienen forma de fila o columna y estn ntimamente relacionadas con los vectores y las matrices. En MATLAB, arreglo de fila es lo mismo que vector de fila y arreglo de columna es lo mismo que vector de columna. La variable x puede definirse como vector de fila especificando sus elementos; por ejemplo: x = [0, 0.1, 0.2, 0.3, 0.4, 0.5]; Si desea imprimir un elemento en particular, teclee x con su subndice. Por ejemplo, si teclea x(3) como un comando se exhibir: ans = 0.2 Una forma equivalente de definir la misma x es for i=1:6 x(i) = (i-1)*0.1; end pg. 12 Eltamaodeunvectornotienequedeclararsepreviamente,puesseajustaautomticamente.El nmero de elementos de x puede incrementarse definiendo elementos adicionales, por ejemplo, x(7) = 0.6; Otra forma de escribir una variable de arreglo de fila con un incremento o decremento fijo es: x = 2:-0.4:-2 que produce x = 2.0000 1.6000 1.2000 0.8000 0.4000 -0.0000 La definicin de un arreglo de columna es similar a la de un arreglo de fila excepto que los elementos se separan mediante signos de punto y coma; por ejemplo, z = [0; 0.1; 0.2; 0.3; 0.4; 0.5]; Una alternativa para definir esto mismo es agregar un apstrofo a un arreglo de fila: z = [0, 0.1, 0.2, 0.3, 0.4, 0.5]'; El operador apstrofo equivale al operador de transposicin en el lgebra de matrices y vectores, as queconviertevectoresdecolumnaenvectoresdefilayviceversa.Sisetecleazcomoordense obtiene: z = 0 0.1 0.2 0.3 0.4 0.5 Si se define un solo elemento de un arreglo c, por ejemplo, c(8) = 11; se supondr c(i) = 0 para i=1 hasta 7. Por tanto, si teclea c como comando obtendr c = 0 0 0 0 0 0 0 11 Cuandoyyxtienenlamismalongitudylamismaforma(filaocolumna),losvectoresyyxse pueden sumar, restar, multiplicar y dividir empleando los operadores aritmticos de arreglos: z = x + y z = x - y z = x .* y pg. 13 z = x ./ y que equivalen respectivamente a Listado 1.12 for i=1:6; z(i) = x(i) + y(i); end for i=1:6; z(i) = x(i) - y(i); end for i=l:6; z(i) = x(i) *y(i); end for i=1:6; z(i) = x(i) /y(i); end Las reglas para la suma y la resta son las mismas que para los vectores en el lgebra lineal. Encambio,.*y./sonoperadoresnombradosparalamultiplicacinyladivisindearreglos, respectivamente, y son distintos de la multiplicacin y divisin de matrices y vectores. Si se omite el punto de .* o ./, el significado cambia totalmente. El operador de potenciacin de arreglos se puede ilustrar con g = z.^1.2; donde z es un vector de longitud 6, se coloca un punto antes del operador ^ y g se convierte en un vector de la misma longitud. El enunciado anterior equivale a fori=1:6; g(i) = z(i)^1.2; end donde el operador ^ no lleva antepuesto un punto. Eltamaodeunarreglopuedeincrementarseanexndoleunelementoounvector(o vectores). Por ejemplo, suponga x = 2 3 El comando que sigue anexa 5 a x y hace que su longitud sea 3: x = [x, 5] lo que devuelve x = 2 3 5 Podemosanexarunnmero,unvector ovariosvectores aunvectordecolumna.Suponga que y es un vector de columna, y = 2 3 entonces y = [y; 7] produce pg. 14 y = 2 3 7 Aqu,7 se aadealfinaldelvector decolumna.Observeque se utilizaun signodepuntoycoma paraanexaraunvectordecolumna.Tambinsepuedeanteponerunelementoaunvector;por ejemplo, x = [9, x] produce x = 9 2 3 5 donde x del lado derecho se defini previamente. De forma similar, [-1; y] produce y = -1 2 3 7 Un procedimiento inverso consiste en extraer una parte de un vector. Con la y anterior, w = y(3:4) define a w que equivale al tercer y cuarto elementos de y, a saber: w = 3 7 Si no recuerda el tamao de un vector, pregntelo a la computadora. Para un vector x = [9, 2, 3, 5] la consulta length (x) recibe la respuesta ans = 4 Larespuestaeslamismaparaunarreglodecolumna.Definamosy = [9, 2, 3 ]'; entonces,length (y)devolverans = 3.Porotrolado,siademsdelalongitudsedesea saber si el vector es de columna o de fila, se debe usar size. por ejemplo, size(y) devolver ans = 3 1 donde la primera cifra es el nmero de filas y la segunda es el nmero de columnas. Esta respuesta nosdicequeyesunaarreglode3por1,esdecir,unvectordecolumnadelongitud3.Paraz= [9, 2, 3, 5], size (z) devolver pg. 15 ans = 1 4 es decir, z es un vector de longitud 4. Variablesdecadena:Lasvariablesdecadenasonarreglos.Porejemplo,unavariablede cadena v definida por v = 'glaciar' equivale a v = ['g', 'l', 'a', 'c', 'i', 'a', 'r'] La variable v puede convertirse en una cadena de columna con v = v' que es g l a c i a r Variablesdearreglobidimensional:unarreglobidimensional,queeslomismoqueuna matriz en MATLAB, se puede definir especificando sus elementos. Por ejemplo, un arreglo de 3 por 3 se puede definir mediante m = [0.1, 0.2, 0.3; 0.4, 0.5, 0.6; 0.7, 0.8, 0.9]; Observe que los elementos de una fila terminan con un signo de punto y coma. Desde luego, todas las filas deben tener el mismo nmero de elementos; si no es as, la definicin no ser aceptada. El enunciado anterior equivale a escribir Listado 1.13 m(1,1) =0.1; m(1,2) =0.2; m(1,3) =0.3; m(2,1) =0.4; m(2,2) =0.5; m(2,3) =0.6; m(3,1) =0.7; m(3,2) =0.8; m(3,3) =0.9; pg. 16 Si tecleamos m como un comando obtenemos m = 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 Podemosexpresarunacolumnaounafilacompletadeunarreglobidimensionalempleandoun signo de dos puntos. Por ejemplo, m(1,:) y m(:,3) son la primera fila de m y la tercera columna de m, respectivamente, y se tratan como vectores. Por ejemplo, c(1,:) = m(3,:); c(2,:) = m(2,:); c(3,:) = m(l,:); producen c = 0.7000 0.8000 0.9000 0.4000 0.5000 0.6000 0.1000 0.2000 0.3000 Losarreglosbidimensionalessepuedensumar,restar,multiplicarydividirconlosoperadores aritmticos de arreglos: Listado 1.14a c = a + b c = a - b c = a .* b c = a ./ b Aqu, a y b son arreglos bidimensionales del mismo tamao. Los enunciados anteriores equivalen a, respectivamente, Listado 1.14b for i=1:3 for j=1:3 c(i,j) = a(i,j) + b(i,j); end end for i=1:3 for j=1:3 c(i,j) = a(i,j) - b(i,j); end end for i=1:3 for j=1:3 c(i,j) = a(i,j) * b(i,j); end end for i=1:3 pg. 17 for j=1:3 c(i,j) = a(i,j) / b(i,j); end end Observe que las expresiones del listado 1.14a son mucho ms compactas y claras que las del listado 1.14b. El enunciado con el operador de potenciacin de arreglos, g = a.^3 equivale a for i=l:3 for j=l:3 g(i,j) = a(i,j)^3; end end Los vectores de columna y los de fila son casos especiales de matrices; por tanto, los operadores de arreglosfuncionanigualconlosvectoresqueconlasmatrices.Elempleodelosoperadores aritmticosdearreglostienedosventajas.Enprimerlugar,losprogramassonmscortos.En segundo lugar, la eficiencia computacional de MATLAB es mayor con la forma corta que cuando se escribe lo mismo empleando ciclos. Enunciados if que comparan arreglos: Las variables de arreglos pueden compararse en un enunciado if. Si suponemos que a y b son matrices del mismo tamao: (a) if a==b slo se satisface si a(i,j)==b(i,j) para todos los elementos. (b) if a>=b slo se satisface si a(i,j)>=b(i,j) para todos los elementos. (c) if a~=b se satisface si a(i,j)~=b(i,j) para al menos un elemento. Si se comparan dos variables de cadena de diferente longitud en un enunciado if, ocurrir un error aritmtico, porque los dos arreglos deben tener la misma longitud. Para poder comparar variables de cadenaenenunciadosif,serprecisoajustartodaslasvariablesaunalongitudpredeterminada anexando espacios en blando. Por ejemplo, en lugar de a = 'equidna' b = 'tapir' c = 'albatross' d = 'petrel' debemos escribir a = 'equidna' b = 'tapir' c = 'albatross' d = 'petrel ' Con esto ya podremos comparar a, b y c en enunciados if. Sinembargo,unaformamsfcilderealizarlatareaesconstr2mat.Porejemplo, supongamos que las variables de cadena estn dadas por pg. 18 t1 = 'digitalis' t2 = 'nicotiana' t3 = 'basilicum' t4 = 'lychnis' t5 = 'chrysantemum' Entonces, podemos organizar las variables en una sola matriz de cadenas con s = str2mat(tl, t2, t3, t4, t5) Laprimerafiladesseconvierteent1,lasegundaent2yassucesivamente,conlongitudes idnticas porque se aaden espacios en blanco a las cadenas ms cortas. 1.3 ASPECTO SINGULAR DE LOS NMEROS EN MATLAB Enloslenguajesdeprogramacinordinarios,losnmerosseclasificanenvariascategorascomo sencillos, dobles, reales, enteros y complejos. En MATLAB, todas las variables se tratan igualmente condobleprecisin.Nohaydistincinentrevariablesenterasyreales,nientrevariablesrealesy complejas. La forma como se asigna un valor a una variable depende exclusivamente del usuario. Si una variable se va a utilizar como entero, simplemente se le asigna un valor entero. Los enteros se reconocen a partir de la mantisa y el exponente en la memoria. La falta de distincin entre variables reales y complejas es exclusiva de MATLAB, pero ofrece muchas ventajas. Como ejemplo sencillo, consideremos las races de un polinomio cuadrtico ax bx c20 + + = la solucin puede escribirse como xb b aca= 242 En Fortran o C, hay que separar las soluciones en dos casos: (i) b ac24 , aac b b= x242 (ii)b ac24 < ,xb i ac ba= 422 donde i es igual a 1y las soluciones en el segundo caso son valores complejos. En MATLAB, encambio,nohaynecesidaddeseparaciones;seacualseaelsignodelvalordentrodelaraz cuadrada, las races se calcularn con x1 = (-b + sqrt(b^2 - 4*a*c))/(2*a) x2 = (-b - sqrt(b^2 - 4*a*c))/(2*a) pg. 19 Silasracessoncomplejas,MATLABtratarlasvariablesautomticamentecomocomplejas.La exactituddelosclculosdependedelaformaenqueseregistranyprocesanlosnmeros.Los parmetros clave que indican la exactitud de los nmeros en un lenguaje de programacin son Nmero positivo ms pequeo: realmin Nmero positivo ms grande: realmax Presicin relativa: eps TABLA 1.2 Comparacin del intervalo numrico y el psilon de la mquina Precisin de software MATLAB (estacin de trabajo) Fortran (estacin de trabajo) sencilla (doble) Fortran (Cray) realmim4.5e-3242.9e-39 (misma)4.6e-2476 realmax9.9e+3071.7e+38 (misma)5.4e+2465 eps2.2e-161.2e-7 (2.8e-17)1.3e-29 Enlatabla1.2secomparanestostresnmerosenMATLABconsuscontrapartesen Fortran en unas cuantas computadoras representativas. Latabla1.2muestraqueelpsilonenMATLABesequivalentealdedobleprecisinde Fortran en estaciones de trabajo tpicas. MATLAB trata todos los nmeros como si fueran de doble precisin.ElrealmindeMATLABessignificativamentemenorqueeldeFortranenVAXy realmaxessignificativamentemayor.Dehecho,realminyx_realmaxocupanelsegundolugar despusdelosdelaCray.ElampliointervalonumricoenMATLABciertamenteconstituyeuna ventaja significativa cuando se calculan funciones exponenciales o funciones con singularidades. Siellectordeseadeterminarrealmin,realmaxyepsensupropiacomputadora,puede ejecutar los siguientes guiones (el ltimo nmero que aparece en la pantalla es la respuesta): Listado 1.15 % Para obtener realmin x=1; while x>0, x=x/2, end Listado1.16 % Para obtener realmax x=1; while x0,x=x/2;ex = x*0.98 + 1;ex=ex - 1; if ex > 0, ex, end end Siunvalorsevuelvemayorquex_max,elnmerosetrata(enMATLAB)comodenotadopor inf. Si teclea inf en la ventana de comandos, la respuesta ser ans = inf Si teclea x = 1/inf obtendr ans = pg. 20 0 Sinembargo,haycasosenlosquelarespuestaesNaN,loquesignificanoesunnmero.Por ejemplo, si trata de calcular i*inf, la respuesta en MATLAB es ans = NaN 1.4 FUNCIONES MATEMTICAS EN MATLAB Aligualqueotroslenguajesdeprogramacin,MATLABtienenumerosasfuncionesmatemticas, desdelaselementaleshastalasdealtonivel.Lasfuncioneselementalespuedenagruparseentres categoras: (a) Funciones trigonomtricas (b) Otras funciones elementales (c) Funciones que realizan tareas En la tabla 1.3 se muestran las funciones de las primeras dos categoras; las funciones de la tercera seexplicanenlaseccin1.5.LasfuncionesmatemticasenMATLABpresentandosnotables diferencias respecto de las de otros lenguajes de programacin como Fortran o C: (1) las funciones matemticasfuncionanconvariablescomplejassindiscriminacinalgunay(2)lasfunciones matemticas funcionan con argumentos vectoriales y matriciales. Argumentos complejos: Para ilustrar la forma en que las funciones de MATLAB trabajan con variables imaginarias o complejas, probemos cos(2 + 3*i) donde i es el nmero imaginario unitario, equivalente a la raz cuadrada de -1. La respuesta es ans = -4.1896 - 9.1092i Enotroejemplo,consideremoslafuncinarcocoseno,queeselinversodelafuncincoseno definido por y = acos(x) = cos-1(x) El comando acos(0.5) produce ans = 1.0472 TABLA 1.3 Funciones matemticas elementales Funciones trigonomtricas Comentarios sin(x) cos (x) tan(x) asin(x) acos(x) pg. 21 atan(x) -/2 atan(x) /2 atan2(y,x) Igualqueatan(y/x)(veael manual) - atan(y, x) sinh(x) cosh(x) tanh(x) asinh(x) acosh(x) atanh(x) Otras funciones matemticas elementales Comentarios abs(x)Valor absoluto de x angle(x)Angulo de fase de un valor complejo: Si x = real, ngulo = 0 S x = 1 , ngulo = /2 sqrt(x)Raz cuadrada de x real(x)Parte real del valor complejo x imag(x)Parte imaginaria del valor complejo x conj(x)Conjugado complejo x round(x)Redondear al entero ms cercano fix(x)Redondear un valor real hacia cero floor(x) Redondear hacia - ceil(x) Redondear x hacia + sign(x)+1 si x > 0; -l si x < 0 rem(x,y)Residuo al dividir: x - y*fix(x/y) exp(x)Base exponencial e log(x)Logaritmo base e log10(x)Logaritmo base 10 El argumento x de acos(x) normalmente est limitado al intervalo -1 x 1 (as es como trabaja la funcinacosenFortran).EnMATLAB,encambio,acosaceptacualquiervaloren-