Manual Matlab

download Manual Matlab

of 63

Transcript of Manual Matlab

  • Manual de Introduccion a Funciones Basicas con

    MATLAB

    M.C. Daniel S. Martnez Ramrez

    Agosto de 2004

  • 2

  • Captulo 1

    Introduccion

    1.1. Acerca de MATLAB

    El nombre de MATLAB proviene de la contraccion de MATrix LABoratory. MATLAB es consideradocomo un lenguaje de alto nivel que maneja datos de tipo matricial. Por lo tanto, las matrices y arreglosconstituyen la espina dorsal de MATLAB.

    Cabe mencionar, que MATLAB al ser considerado un lenguaje de alto nivel puede pensarse que puedehacer obsoletos a ciertos lenguajes de programacion ampliamente utilizados en la actualidad. Esta aseveraciones erronea debido a que esos lenguajes siguen siendo importantes para la computacion de alto rendimientoque requiere abundante memoria o un tiempo de computo largo. En cambio, la velocidad de computo deMATLAB paga un elevado precio debido a sus caractersticas particulares.

    1.2. Caractersticas importantes de MATLAB

    La razon por la cual MATLAB puede considerarse como un lenguaje es debido a que ofrece caractersticasde programacion similares a otros lenguajes de programacion como FORTRAN o C. A continuacion algunasde sus caractersticas mas notables son mencionadas:

    La programacion es mucho mas sencilla.

    Manipulacion de conjunto de datos en una amplia variedad mas rapidamente.

    Biblioteca matematica amplia.

    Proporciona herramientas de interfaz grafica de usuario (GUI) que permite a MATLAB ser utilizadocomo una herramienta de desarrollo de aplicacion.

    Abundantes herramientas graficas.

    Capacidad de vincularse con otros lenguajes de programacion.

    Transportabilidad.

    La combinacion de estructuras de datos de arreglos, caractersticas de programacion y herramientasGUI permiten que MATLAB sea una poderosa herramienta para resolver problemas en muchos campos.

    3

  • 4

  • Captulo 2

    Caractersticas basicas

    2.1. Operaciones Aritmeticas Basicas

    Las operaciones aritmeticas basicas pueden ser llevadas a cabo con MATLAB de manera analoga a lascalculadoras. Estas operaciones aritmeticas basicas son las siguientes:

    Operacion Smbolo Ejemplo

    adicion, a + b + 5 + 45

    substraccion, a - b - 100 - 55

    multiplicacion, a b * 3.14 * 0.90division, a b /o\ 3/4 = 4 \ 3exponenciacion, ab 216

    La evaluacion de estos operadores son llevadas a cabo por las reglas usuales de precedencia de operadores,resumidas aqu.

    Las expresiones son evaluadas de izquierda a derecha con la operacion deexponenciacion teniendo la mayor precedencia, seguida por la multiplicaciony division teniendo la misma procedencia, seguida por la suma y substraccionteniendo la misma precedencia.

    2.2. Espacio de Trabajo

    El entorno de trabajo en donde el usuario trabaja es llamado espacio de trabajo. El espacio de trabajopuede grabar los comandos ingresados por el usuario as como los valores de cualquier vaiable creada por elmismo. Por esa razon, estos comandos y variables residen en el espacio de trabajo de MATLAB o espacio detrabajo basico y pueden ser rellamados cada vez que se desee.

    Ejemplo:

    )) record=3.5878789

    record =

    3.5879

    )) record

    record =

    5

  • 3.5879))

    Para conocer el nombre de una variable en el espacio de trabajo de MATLAB se utiliza el comando who.

    Ejemplo:

    )) a=445.126+129.75

    a =

    574.8760

    )) b=a-100.25

    b =

    474.6260

    )) c=a*b

    c =

    2.7285e+005

    )) d=c/37.5

    d =

    7.2760e+003

    )) e=37.5\c

    e =

    7.2760e+003

    )) e=c\37.5

    e =

    1.3744e-004

    )) f1=2^5

    f1 =

    32

    )) who

    6

  • Your variables are:

    a c eb d f1))

    Para obtener una informacion mas detallada de esa variable utilizamos el comando whos.

    Ejemplo:

    )) whosName Size Bytes Class

    a 1x1 8 double arrayb 1x1 8 double arrayc 1x1 8 double arrayd 1x1 8 double arraye 1x1 8 double arrayf1 1x1 8 double array

    Grand total is 6 elements using 48 bytes

    ))

    En cambio, para borrar variables utilizamos el comando clear.

    Ejemplo:

    )) clear a b)) who

    Your variables are:

    c ed f1

    En este ejemplo borramos las variables a y b. A continuacion, mostramos las opciones del comando cleara traves del comando help.

    )) help clear

    CLEAR Clear variables and functions from memory.CLEAR removes all variables from the workspace.CLEAR VARIABLES does the same thing.CLEAR GLOBAL removes all global variables.CLEAR FUNCTIONS removes all compiled M-functions.CLEAR MEX removes all links to MEX-files and all M-functions.CLEAR ALL removes all variables, globals, functions and MEX links.

    7

  • CLEAR CLASSES is the same as CLEAR ALL except that class definitionsare also cleared. If any objects exist outside the workspace (say inuserdata or persistent in a locked m-file) a warning will be issuedand the class definition will not be cleared. CLEAR CLASSES must beused if the number or names of fields in a class are changed.

    CLEAR VAR1 VAR2 ... clears the variables specified. The wildcardcharacter * can be used to clear variables that match a pattern.For instance, CLEAR X* clears all the variables in the currentworkspace that start with X.

    If X is global, CLEAR X removes X from the current workspace,but leaves it accessible to any functions declaring it global.CLEAR GLOBAL X completely removes the global variable X.

    CLEAR FUN clears the function specified. If FUN has been lockedby MLOCK it will remain in memory. Use a partial path (seePARTIALPATH) to distiguish between different overloaded versions ofFUN. For instance, clear inline/display clears only the INLINEmethod for DISPLAY, leaving any other implementations in memory.

    CLEAR ALL, CLEAR FUN, or CLEAR MEX also has the side effects ofremoving debugging breakpoints and reinitializing persistent variablessince the breakpoints for a function and persistent variables arecleared whenever the m-file changes or is cleared.

    Use the functional form of CLEAR, such as CLEAR(name),when the variable name or function name is stored in a string.

    See also WHO, WHOS, MLOCK, MUNLOCK, PERSISTENT.

    8

  • 2.3. Formato de display numerico

    Cuando MATLAB despliega los resultados numericos, esto sigue algunas reglas. Por default, si un resul-tado es un entero, MATLAB lo despliega como tal. Por otro lado, si el numero es real, MATLAB lo despliegacon cuatro dgitos a la derecha del punto decimal. Si los dgitos significativos en el resultado estan fuera deese rango, MATLAB despliega el resultado en notacion cientfica. A continuacion, los comandos de MATLABpara formato numerico son mostrados.

    Comando de MATLAB pi Comentario

    format short 3.1416 5 dgitos

    format long 3.14159265358979 16 dgitos

    format short e 3.1416e+000 5 dgitos mas exponente

    format long e 3.141592653589793e+000 16 dgitos mas exponente

    format short g 3.1416 mejora de format short o format short e

    format long g 3.14159265358979 mejora de format long o format long e

    format hex 400921fb54442d18 punto flotante hexadecimal

    format bank 3.14 dgitos de 2 decimas

    format + + positivo, negativo o cero

    format rat 355/113 aproximacion racional

    2.4. Control de ventanas de control

    MATLAB proporciona algunos comandos para administrar la ventana de comando. Estos comandos sonlos siguientes.

    Comandos Descripcion

    clc Limpia la ventana de comandos moviendo el cursor a la esquina superior izquierda.

    home Mueve el cursor a la esquina superior izquierda.

    more Paginacion de la ventana de comandos.

    2.5. Informacion del sistema

    Desde la lnea de comandos podemos obtener informacion acerca de la plataforma de la computadora enla cual MATLAB esta corriendo as como informacion de las aplicaciones de MATLAB.

    El comando computer regresa un caracter describiendo la computadora en la cual MATLAB esta corrien-do.

    )) computer

    ans =

    PCWIN

    En este caso, MATLAB esta corriendo en una computadora bajo Windows. Utilizan el comando helpvemos los diferentes tipos de sistemas que MATLAB puede correr.

    )) help computer

    COMPUTER Computer type.COMPUTER returns a string containing the name of the computeron which MATLAB is executing. Possibilities are:

    9

  • PCWIN - MS-WindowsMAC2 - MacintoshSUN4 - Sun SPARCSOL2 - Solaris 2HP700 - HP 9000/700SGI - Silicon GraphicsSGI64 - Silicon Graphics R8000IBM_RS - IBM RS6000ALPHA - Dec AlphaAXP_VMSG - Alpha VMS G_floatAXP_VMSIEEE - Alpha VMS IEEELNX86 - Linux IntelVAX_VMSG - VAX/VMS G_floatVAX_VMSD - VAX/VMS D_float

    [C,MAXSIZE] = COMPUTER returns also integer MAXSIZE whichcontains the maximum number of elements allowed in a matrixon this version of MATLAB.

    See also ISIEEE, ISPPC, ISUNIX, ISVMS.

    El comando isieee retorna 1 si el sistema utiliza aritmetica de la IEEE, 0 en caso contrario.

    )) isieee

    ans =

    1

    De acuerdo a este comando, la computadora maneja aritmetica de la IEEE.Para saber la version de MATLAB que actualmente maneja el sistema, empleamos el comando version.

    )) version

    ans =

    5.3.0.10183 (R11)

    Para una informacion mas detallada de nuestra version de MATLAB usamos el comando ver:

    10

  • )) ver--------------------------------------------------MATLAB Version 5.3.0.10183 (R11) on PCWINMATLAB License Number: 76297--------------------------------------------------MATLAB Toolbox Version 5.3 (R11) 15-Jan-1999MATLAB Runtime Server Development Kit Version 5.3 (R11) 05-Oct-1998Real Time Windows Target Version 1.0 (R11) 10-Jul-1998Data Acquisition Toolbox Version 1.0 (R11) Beta 2.0 07-Jan-1999Dials & Gauges Blockset Version 1.0 (R11) Beta 3 09-Jan-1999Simulink Report Generator Version 1.0 (R11) 05-Dec-1998MATLAB Report Generator Version 1.0 (R11) 05-Dec-1998Database Toolbox Version 1.0 (R11) 01-Aug-1998Power System Blockset Version 1.1 (R11) 10-Aug-1998MATLAB Compiler (and Compiler 1.2.1) Version 2.0 (R11) 08-Dec-1998Communications Toolbox Version 1.4 (R11) 10-Jul-1998Symbolic Math Toolbox Version 2.1 (R11) 11-Sep-1998NAG Foundation Toolbox - Numerical ... Version 1.0.3 (R11) 06-Jun-1998Mapping Toolbox Version 1.1 (R11) 04-Sep-1998Wavelet Toolbox Version 1.2 (R11) 10-Jul-1998Partial Differential Equation Toolbox Version 1.0.3 (R11) 21-Nov-1997Financial Toolbox Version 2.0.1 (R11) 14-Aug-1998LMI Control Toolbox Version 1.0.5 (R11) 09-Sep-1998QFT Control Design Toolbox Version 1.0.3 (R11) 21-Nov-1997Fixed-Point Blockset Version 2.0 (R11) 10-Jul-1998DSP Blockset Version 3.0 (R11) 10-Jul-1998Fuzzy Logic Toolbox Version 2.0.1 (R11) 16-Sep-1998Model Predictive Control Toolbox Version 1.0.4 (R11) 03-Sep-1998Frequency Domain Identification Too... Version 2.0.3 (R11) 29-Sep-1998Higher-Order Spectral Analysis Toolbox Version 2.0.3 (R11) 10-Jul-1998Statistics Toolbox Version 2.2 (R11) 24-Jul-1998Nonlinear Control Design Blockset Version 1.1.3 (R11) 10-Aug-1998Image Processing Toolbox Version 2.2 (R11) 05-Aug-1998Neural Network Toolbox Version 3.0.1 (R11) 01-Jul-1998Mu-Analysis and Synthesis Toolbox Version 3.0.4 (R11) 10-Apr-1998Signal Processing Toolbox Version 4.2 (R11) 10-Jul-1998Spline Toolbox Version 2.0.1 (R11) 14-Aug-1998Optimization Toolbox Version 2.0 (R11) 09-Oct-1998Robust Control Toolbox Version 2.0.6 (R11) 10-Apr-1998System Identification Toolbox Version 4.0.5 (R11) 10-Apr-1998Control System Toolbox Version 4.2 (R11) 15-Jul-1998Real-Time Workshop Version 3.0.0 (R11) 13-Oct-1998SystemBuild to Simulink Translator Version 2.0 (R11) 10-Aug-1998Stateflow Version 2.0 (R11) 16-Jan-1999Simulink Version 3.0 (R11) 01-Sep-1998

    11

  • 2.6. Variables

    Como en cualquier lenguaje de programacion, MATLAB tiene reglas para los nombres de variables, acontinuacion dichas reglas son mencionadas.

    Reglas de asignacion de nombres Comentarios/Ejemplos

    Los nombres de variables son sensibles. Suma, suma, SUMA son variables distintas

    Los nombres de variables pueden contener hasta 31 caracteres. howaboutthisvariablename123

    Los nombres de variables comienzan con letra a1, position1, x1, x2

    Los caracteres de puntuacion no son permitidos com.1, position.2, x.2

    Los nombres pueden llevar guion bajo com 1, position 2, x 2

    Aparte de estas reglas para nombres. MATLAB tiene algunas variables especiales. Y son las siguientes:

    Variables Especiales Descripcion

    ans Utilizada para resultados.

    pi pi

    eps Epsilon de la maquina

    flops Conteo de operaciones de punto flotante

    inf NaN (o) nan No numero

    i (y) j i = j =1

    nargin Numero de argumentos de entrada de una funcion

    nargout Numero de argumentos de salida de una funcion

    realmin Numero entero real mas pequeno utilizable

    realmax Numero entero real mas grande utilizable

    2.7. Comentarios, puntuacion e interrupcion de ejecucion

    En la lnea de comandos podemos escribir al final un punto y coma (;) para no imprimir los resultadoscalculados.

    Ejemplo:

    )) erasers=6;)) pads=5;)) tape=4;)) items=erasers+pads+tape;)) cost=erasers*25+pads*52+tape*99;)) average_cost=cost/items

    average_cost =

    53.7333

    De acuerdo a este ejemplo, los resultados intermedios no fueron desplegados debido a que se utilizo elpunto y coma al final de los comandos que fueron definidos.

    Aparte del punto y coma, podemos usar otros caracteres de puntuacion tambien. Todo texto que precededel signo% es tomado como un comentario.

    Ejemplo:

    12

  • )) items=200 % Numero total de objetos (items)

    items =

    200

    En este caso, a la variable items se le asigna el valor de 200 pero MATLAB simplemente ignora el signo%y todo el texto que va despues del mismo.

    Tambien, multiples comandos pueden estar en una sola lnea si estan separados por comas (,) o puntosy coma.

    Ejemplo:

    )) erasers=6, pads=6; tape=2

    erasers =

    6

    tape =

    2

    Nota! El procesamiento en MATLAB puede ser interrumpido en cualquier momento presionando Ctrl-C.

    2.8. Numeros Complejos

    Una de las caractersticas mas poderosas de MATLAB es que no requiere de manipulaciones especialespara numeros complejos. Los numeros complejos en MATLAB son formados de varias maneras.

    Ejemplo:

    )) c1=1-2i % 2i significa la parte imaginaria

    c1 =

    1.0000 - 2.0000i

    )) c1=1-2j % 2j significa la parte imaginaria

    c1 =

    1.0000 - 2.0000i

    )) c2=3*(2-sqrt(-1)*3)

    c2 =

    13

  • 6.0000 - 9.0000i

    )) c3=sqrt(-2)

    c3 =

    0 + 1.4142i

    )) c4=6+sin(.5)*i

    c4 =

    6.0000 + 0.4794i

    )) c5=6+sin(.5)*j

    c5 =

    6.0000 + 0.4794i

    Cabe mencionar, que las operaciones matematicas con numeros complejos pueden ser escritas de la mismaforma para los numeros reales.

    Ejemplo:

    )) c6=(c1+c2)/c3

    c6 =

    -7.7782 - 4.9497i

    )) c6r=real(c6)

    c6r =

    -7.7782

    )) c6r=imag(c6)

    c6r =

    -4.9497

    )) check_it_out=i^2 % sqrt(-1) elevado al cuadrado debe ser -1.

    check_it_out =

    -1

    En MATLAB, la conversion entre formas polar y rectangular se lleva a cabo con las funciones real, imag,abs, y angle:

    14

  • )) c1

    c1 =

    1.0000 - 2.0000i

    )) mag_c1=abs(c1) %magnitud

    mag_c1 =

    2.2361

    )) angle_c1=angle(c1) %angulo en radianes

    angle_c1 =

    -1.1071

    )) deg_c1=angle_c1*180/pi % angulo en grados

    deg_c1 =

    -63.4349

    )) real_c1=real(c1) %parte real

    real_c1 =

    1

    )) imag_c1=imag(c1) %parte imaginaria

    imag_c1 =

    -2

    15

  • 2.9. Funciones matematicas

    Las listas de las funciones que MATLAB soporta son mostradas en las siguientes tablas. Muchas de estasfunciones son utilizadas en la misma forma que seran escritas matematicamente.

    Funciones trigonometricas Descripcion

    acos Coseno inverso.

    acosh Coseno hiperbolico inverso.

    acot Cotangente inversa.

    acoth Cotangente hiperbolico inverso.

    acsc Cosecante inversa.

    acsch Cosecante hiperbolica inversa.

    asec Secante inversa.

    asech Secante hiperbolica inversa.

    asin Seno inverso.

    asinh Seno inverso hiperbolico.

    atan Tangente inversa.

    atan2 Tangente inversa de cuarto cuadrante.

    atanh Tangente inversa hiperbolica.

    cos Coseno.

    cosh Coseno hiperbolico.

    cot Cotangente.

    coth Cotangente hiperbolica.

    csc Cosecante.

    csch Cosecante hiperbolica.

    sec Secante.

    sech Secante hiperbolica.

    sin Seno.

    sinh Seno hiperbolico.

    tan Tagente.

    tanh Tagente hiperbolica.

    Funciones exponenciales Descripcion

    exp Exponencial.

    log Logaritmo natural.

    log10 Logaritmo base 10.

    log2 Logaritmo base 2 y diseccion en punto flotante.

    pow2 Potencia base 2 y escalamiento en punto flotante.

    sqrt Raz cuadrada.

    nextpow2 Potencia de 2 superior inmediata.

    Funciones complejas Descripcion

    abs Valor absoluto o magnitud.

    angle Angulo de fase en radianes.

    conj Conjugado complejo.

    imag Parte imaginaria compleja.

    real Parte real compleja.

    unwrap Angulo de fase.

    isreal Verdaddero para arreglos reales.

    cplxpair Vector de ordenacion en pares conjugados complejos.

    16

  • Funciones de redondeo y residuo Descripcion

    fix Redondeo hacia cero.

    floor Redondeo hacia el entero inferior.

    ceil Redondeo hacia el entero superior.

    round Redondeo hacia el entero mas proximo.

    mod Residuo con signo.

    rem Residuo despues de la division.

    sign Funcion signo.

    Transformacion de coordenadas Descripcion

    cart2sph Cartesianas a esfericas.

    cart2pol Cartesianas a polares o cilndricas.

    pol2cart Polar a cartesianas.

    sph2cart Esfericas a cartesianas.

    Teora de numeros Descripcion

    factor Factores primos.

    isprime Determina si un numero es primo.

    primes Genera lista de numeros primos.

    gcd Maximo comun divisor.

    lcm Mnimo comun divisor.

    rat Aproximacion racional.

    rats Salida racional.

    perms Todas las posibles combinaciones.

    nchoosek Todas las combinaciones de N elementos tomados K a la vez.

    Funciones matematicas especializadas Descripcion

    airy Funciones de Airy.

    besselj Funcion de Bessel del primer tipo.

    bessely Funcion de Bessel del segundo tipo.

    besselh Funcion de Bessel del tercer tipo.

    besseli Funcion de Bessel modificada del primer tipo.

    besselk Funcion de Bessel modificada del segundo tipo.

    beta Funcion Beta.

    betainc Funcion Beta incompleta.

    betaln Lograitmo de funcion Beta.

    17

  • Funciones matematicas especializadas Descripcion

    airy Funciones de Airy.

    besselj Funcion de Bessel del primer tipo.

    bessely Funcion de Bessel del segundo tipo.

    besselh Funcion de Bessel del tercer tipo.

    besseli Funcion de Bessel modificada del primer tipo.

    besselk Funcion de Bessel modificada del segundo tipo.

    beta Funcion Beta.

    betainc Funcion Beta incompleta.

    betaln Logaritmo de funcion Beta.

    ellipj Funciones elpticas de Jacobi.

    ellipke Integral elptica completa.

    erf Funcion de error.

    erfc Funcion de error complementaria.

    erfcx Funcion de error complementaria escalada.

    erfinv Funcion de error inversa.

    expint Funcion de error exponencial.

    gamma Funcion gamma.

    gammainc Funcion gamma incompleta.

    gammaln Logaritmo de la funcion gamma.

    legendre Funcion asociada de Legendre.

    cross Producto cruz vectorial.

    dot Producto punto.

    2.10. Archivos M script

    Para problemas sencillos, el ingreso de datos puede ser sencillo y rapido por medio de la lnea de comandos.Sin embargo, conforme aumenta el numero de comandos o cuando se desea cambiar el valor de una o masvariables y reevaluar un numero de comandos, eso podra convertirse en algo tedioso. La solucion a esto esmover los comandos de MATLAB en un archivo de texto simple. Este tipo de archivos son llamados archivosscript o simplemente archivos tipo M.

    Ejemplo: Archivo script ejemplo1.m:

    % script archivo M ejemplo1.m

    erasers=4; % numero de cada itempads=6;tape=2;

    items=erasers+pads+tapecost=erasers*25+pads*52+tape*99average_cost=cost/items

    Corriendo este archivo en la lnea de comandos produce lo siguiente

    )) ejemplo1items =

    12

    18

  • cost =

    610

    average_cost =

    50.8333

    MATLAB proporciona algunas funciones que son particularmente utiles cuando son utilizadas en archivosM; y son las siguientes:

    Funcion Descripcion

    disp(variable) Despliega resultados sin identificar los nombres de variable.

    echo Controla la venta de comando permitiendo ver los comandos del archivo script.

    input Entrada de datos de usuario.

    keyboard Proporciona control al teclado temporalmente.

    pause Pausa hasta que el usuario presiona cualquier tecla.

    pause(n) Pausa por n segundos, entonces continua.

    waitforbuttonpress Pausa hasta que el usuario presiona una tecla o un boton de mouse.

    A continuacion, se hara una demostracion de cada uno de estos comandos.

    Ejemplo: Empleando el comando input.

    Archivo script heron.m:

    % script archivo-M heron.m

    %Este programa determina el area de un triangulo a partir del valor%de sus lados y su semipermetro.

    a=input(lado a: );b=input(lado b: );c=input(lado c: );

    %Calculo del semipermetros=(a+b+c)/2

    %Calculo del areaA=sqrt(s*(s-a)*(s-b)*(s-c))

    Ejecutando este programa, tenemos lo siguiente:

    )) heronlado a: 17lado b: 35lado c: 42

    19

  • s =

    47

    A =

    290.8608

    Ejemplo: Empleando el comando echo.

    Archivo script heron.m:

    % script archivo-M heron.m

    %Este programa determina el area de un triangulo a partir del valor%de sus lados y su semipermetro.

    echo ona=input(lado a: );b=input(lado b: );c=input(lado c: );

    %Calculo del semipermetros=(a+b+c)/2

    %Calculo del areaA=sqrt(s*(s-a)*(s-b)*(s-c))echo off

    Ejecutando este programa tenemos lo siguiente:

    )) herona=input(lado a: );lado a: 17b=input(lado b: );ladob: 35c=input(lado c: );lado c: 42

    %Calculo del semipermetros=(a+b+c)/2

    s =

    47

    %Calculo del areaA=sqrt(s*(s-a)*(s-b)*(s-c))

    20

  • A =

    290.8608

    echo off

    Como se ve en este ejemplo, este comando puede resultar muy tedioso para leer. Una ventaja importantedel comando echo es su utilidad en la depuracion archivos script mas complicados.

    2.11. Funciones de usuario

    En MATLAB podemos crear funciones que se guardan como archivos M, debemos recordar que equivalena la subrutinas y funciones de otros lenguajes de programacion. La ventaja del manejo de funciones es quepermite una mayor versatilidad en la programacion con solo invocar el nombre de la funcion.

    Una funcion basicamente se compone de uno o mas parametros de entrada, y entrega una o mas variablesde salida.

    Una funcion en MATLAB basicamente tiene la siguiente sintaxis:

    function[var1, var2, . . . , varn]=nombre_funcion(par1, par2, . . . , parn)% Comentariossentencia1sentencia2...sentencian% Variables de salidavar1var2...varn

    Donde par1, par2, . . . , parn son los parametros de entrada de una funcion y var1, var2, . . . , varn son lasvariables de salida que la funcion entrega al ser invocada.

    Tambien, podemos comentar la funcion con el fin de que proporcione informacion acerca de la misma alescribir el nombre de la funcion precedida del comando help.

    Ejemplo: Crear la siguiente funcion.

    f(x) =2x3 + 7x2 + 3x 1x2 3x+ 5ex

    Archivo funcionx.m:

    function[fx]=funcionx(x)%Evalua una funcion de la forma% f(x)=(2*x^3+7*x^2+3*x-1)/(x^2-3*x+5*exp(-x))

    fx=(2*x^3+7*x^2+3*x-1)/(x^2-3*x+5*exp(-x));

    Podemos por medio del comando help saber acerca de esta funcion as como su evaluacion.

    21

  • )) help funcionx

    Evalua una funcion de la formaf(x)=(2*x^3+7*x^2+3*x-1)/(x^2-3*x+5*exp(-x))

    )) y=funcionx(3)

    y =

    502.1384

    De acuerdo a la sintaxis anterior, una funcion puede devolver mas de una variable.

    Ejemplo: Crear una funcion que obtenga la media varianza y desviacion estandar de un grupo demuestras de poblacion.

    Archivo estadisticos.m:

    function[media,varianza,dvstd]=estadisticos(X)%estadisticos entrega la media, varianza y desviacion estandar%de un vector de muestras X%Sintaxis:%estadisticos(X)%Cuyas variables de salida son almacenadas en las variables:%media, varianza y dvstd

    n=length(X);media=sum(X)/n;varianza=sum(X.^2)/n-media.^2;dvstd=sqrt(varianza);

    Evaluando esta funcion, observamos lo siguiente en la ventana de comandos:

    )) help estadisticos

    estadisticos entrega la media, varianza y desviacion estandarde un vector de muestras XSintaxis:estadisticos(X)Cuyas variables de salida son almacenadas en las variables:media, varianza y dvstd

    )) x=[1 5 3 4 6 5 8 9 2 4];)) [m, v, d]=estadisticos(x)

    m =

    4.7000

    v =

    22

  • 5.6100

    d =

    2.3685

    Cabe mencionar, que al emplear esta funcion, el miembro de la derecha debe ser un vectoe; en el ladoizquierdo un vector tambien.

    Tambien es posible que una funcion utiliza otra funcion, el argumento de una funcion puede ser el nombrede otra funcion.

    Ejemplo: Crear una funcion que evalua la media ponderada de una funcion en tres puntos de la forma:

    fav =f(a) + 2f(b) + f(c)

    4

    Evalue con la funcion funcionx.m y con los valores de a = 1, b = 2 y c = 3.

    Archivo f_av.m:

    function[mp]=f_av(nombre_func, a, b, c)%Evalua la media ponderada de una funcion f(x)%dada una funcion y tres puntos%Sintaxis:%f_av(nombre_funcion,a , b, c)

    mp=(feval(nombre_func,a)+2*feval(nombre_func,b)+feval(nombre_func,c))/4;

    Evaluando en la lnea de comandos tenemos lo siguiente.

    )) help f_av

    Evalua la media ponderada de una funcion f(x)dada una funcion y tres puntosSintaxis:f_av(nombre_funcion,a , b, c)

    )) help funcionx

    Evalua una funcion de la formaf(x)=(2*x^3+7*x^2+3*x-1)/(x^2-3*x+5*exp(-x))

    )) f_av(funcionx,1,2,3)

    ans =

    89.8976

    De este ejemplo, observamos que nombre_func es el nombre de una funcion f(x). Donde f(x) puede seruna funcion predefinida en MATLAB o creada por el usuario. El comando feval(nombre_func,x) evalua lafuncion llamada nombre_func para el argumento x. Ejemplo, si y=feval(sin(x),x) equivale a y=sin(x).

    23

  • 24

  • Captulo 3

    Flujo de Control

    MATLAB ofrece cuatro estructuras para control de flujo y toma de decision que son: Ciclos For, CiclosWhile, If-Else-End, y Switch-Case. Estas estructuras son descritas y explicadas a continuacion.

    3.1. Ciclos FOR

    Los ciclos For permiten a un grupo de comandos o sentencias ser repetidos un numero fijo o predetermi-nado de veces. La forma general para los ciclos For es la siguiente.

    for variable= expresionsentencia 1sentencia 2

    ...

    sentencia nend

    Cada sentencia entre los enunciados for y end son ejecutados una vez en cada valor que va tomando laexpresion (iteracion).

    Ejemplo: Calculo de interes compuesto.Una persona invierte $1000,00 en una cuenta de ahorros, que reditua un interes del 5%. Suponiendo que

    todo el interes se queda en deposito dentro de la cuenta, calcular y desplegar la cantidad de dinero en lacuenta, al final de cada ano, durante un periodo de 10 anos. Tip: Utilizar la formula siguiente:

    a = p(1 + r)n

    Donde

    p es la cantidad original invertida.

    r tasa anual de interes.

    n numero de anos.

    a cantidad en deposito al final del ano n.

    Archivo script interes.m:

    25

  • % script archivo-M interes.m

    % Este programa calcula el interes compuesto, donde% p es la cantidad original invertida (principal).% r tasa anual de interes (rate).% n numero de a~nos (years).% a cantidad en deposito al final del a~no n (amount).

    principal=input(p: );rate=input(r (%): );years=input(n: );

    rate=rate*0.01;disp(sprintf(\n\n %4s %21s\n, a~no:, deposito:))

    for n=1:yearsamount=principal*(1+rate)^n;disp(sprintf(%4d %21.2f\n, n, amount))

    end

    Corriendo este programa, obtenemos los siguientes resultados.

    )) interesp: 1000r (%): 5n: 10

    a~no: deposito:

    1 1050.00

    2 1102.50

    3 1157.63

    4 1215.51

    5 1276.28

    6 1340.10

    7 1407.10

    8 1477.46

    9 1551.33

    10 1628.89

    De acuerdo con el ejemplo anterior. En el archivo interes.m, el enunciado for n=1:years significa quela variable de control n ira tomando valores de 1 a 10, en incrementos de 1. Es decir, ejecuta 10 veces las

    26

  • sentencias dentro del ciclo; en este caso la formula de interes y el desplegado en pantalla de la informacion.Los ciclos For pueden ser anidados; es decir utilizando ciclos internos y externos.

    Ejemplo: Calculo de interes compuesto.Una persona invierte $15000,00 en una cuenta de ahorros, que reditua un interes del 4%. Suponiendo

    que todo el interes se queda en deposito dentro de la cuenta, calcular y desplegar la cantidad de dinero en lacuenta, al final de cada ano, durante un periodo de 3 anos. Realizar el mismo calculo si utilizamos un interesdel 4% al 6%.

    Archivo script interes2.m:

    % script archivo-M interes2.m

    % Este programa calcula el interes compuesto desde% una cierta tasa de interes a otra, donde% p es la cantidad original invertida (principal).% r tasa anual de interes variable (variable rate).% n numero de a~nos (years).% a cantidad en deposito al final del a~no n (amount).

    clc principal=input(p: );rate1=input(r0 (%): );rate2=input(rn (%): );years=input(n: ); rate=0.01.*(rate1:rate2); b=size(rate);

    for i=1:b(2)disp(sprintf(%6s %21s %15s %4.2f\n, a~no:, deposito:, interes (%):, 100*rate(i)))for n=1:years

    amount=principal*(1.+rate(i))^n;disp(sprintf(%4d %21.2f\n, n, amount))

    endend

    Corriendo este script, se obtiene lo siguiente:

    p: 15000r0 (%): 4rn (%): 6n: 3

    a~no: deposito: interes (%): 4.00

    1 15600.00

    2 16224.00

    3 16872.96

    a~no: deposito: interes (%): 5.00

    1 15750.00

    27

  • 2 16537.50

    3 17364.38

    a~no: deposito: interes (%): 6.00

    1 15900.00

    2 16854.00

    3 17865.24

    De acuerdo con el ejemplo anterior. En el archivo interes2.m, el ciclo interno for n=1:years significaque la variable de control n ira tomando valores de 1 a 3, en incrementos de 1. Este ciclo interno es ejecutadodesde 4 a 6 por el ciclo externo for i=1:b(2).

    3.2. Ciclos WHILE

    Los ciclos While evaluan un grupo de comandos o sentencias un numero indefinido de veces. La formageneral de un ciclo While es:

    while expresionsentencia 1sentencia 2

    ...

    sentencia nend

    Las sentencias entre while y end son ejecutados mientras expresion es verdadera. En caso de queexpresion sea falsa, el ciclo while termina de ejecutarse.

    Ejemplo: Considerar el ejemplo siguiente.

    % archivo aprox.mnum=0; EPS=1;

    clc while (1+EPS)>1EPS=EPS/2;num=num+1;

    end

    num2*EPS

    Ejecutando este archivo script, tenemos lo siguiente:

    28

  • num =

    53

    ans =

    2.2204e-016

    Este ejemplo realiza el calculo de la variable especial de MATLAB eps, el cual es el numero mas pequenoque puede ser sumado a 1 tal que el resultado es mayor que 1 utilizando precision finita.

    En el ejemplo, tenemos la variable EPS para que la variable especial eps no sea sobreescrita. EPS esinicializada a 1. Conforme (1+EPS)>1 es verdadero (no zero), las sentencias dentro del ciclo While sonevaluados. Donde EPS es continuamente dividida en dos, EPS eventualmente va haciendose tan pequeno quesumandole EPS a 1 no llega a ser mayor que 1. En este punto, (1+EPS)>1 es falso (cero) y el ciclo Whiletermina. Finalmente, EPS es multiplicado por 2 debido a que la ultima division por 2 lo hizo muy pequenopor un factor de 2. La variable num es un contador de cuantas iteraciones se tuvieron que realizar.

    3.3. Estructuras IF-ELSE-END

    En muchas ocasiones, las secuencias de comados deben estar condicionalmente evaluadas basadas en untest relacional. Esta logica es proporcionada por la estructura If-Else-End. Las construccion If-Else-Endmas simple tiene la siguiente forma:

    if expresion(sentencias)end

    Las sentencias entre los enunciados if y end son evaluados si todos los elementos de expresion sonverdadero (no cero). En aquellos casos en que expresion involucra algunas subexpresiones logicas, solo elmnimo numero requerido para determinar el estado logico final son evaluados.

    Por ejemplo, si expresion es expresion1 expresion2, entonces expresion2 es solo evaluada siexpresion2 es falsa. Similarmente, si expresion es (expresion1 & expresion2), entonces expresion2no es evaluada si expresion1 es falsa.

    Ejemplo: En una tienda con ventas al mayoreo, se venden ciertos artculos. La tienda realiza un descuentodel 25% a partir de la compra de 20 artculos, en caso contrario, se aplicara el costo por el numero deartculos. Hacer un programa que lea el numero de artculos a comprar y el costo por unidad y realize estasconsideraciones.

    Archivo script interes.m:

    29

  • %archivo script descuento.m%Venta al mayoreo

    articles=input(numero de articulos: );cost1=input(costo unitario: );cost=articles*cost1;

    disp(sprintf(Costo original: %21.2f, cost))if articles>20 %a partir de 20 articulos.

    cost=(1-25/100)*cost; %aplicar el 25% de descuentoend

    disp(sprintf(Costo mayoreo: %21.2f, cost))

    Ejecutando este codigo, para un numero de artculos de 100 a un costo unitario de 25$. Tenemos losiguiente:

    )) mayoreonumero de articulos: 100costo unitario: 25Costo original: 2500.00Costo mayoreo: 1875.00

    En casos donde existan dos alternativas, la estructura If-Else-End toma esta forma:

    if expresion(sentencias evaluadas si expresion es verdadera)

    else(sentencias evaluadas si expresion es falsa)

    end

    En casos cuando existan tres o mas alternativas, la estructura If-Else-End es la siguiente:

    if expresion1(sentencias evaluadas si expresion1 es verdadera)

    elseif expresion2(sentencias evaluadas si expresion2 es verdadera)

    elseif expresion3(sentencias evaluadas si expresion3 es verdadera)

    elseif expresion4(sentencias evaluadas si expresion4 es verdadera)

    elseif ...

    ...

    else(sentencias evaluadas si ninguna expresion es verdadera)

    end

    30

  • En esta ultima forma solo los comandos asociados con la primera expresion verdadera encontrada son eval-uados; asegurando que las expresiones relacionales no sean probadas y el resto de la estructura If-Else-Endes pasada por alto. El comando else puede o no aparecer.

    Manejando estructuras condicionales podemos realizar formas de salto o interrupcion de ciclos For yciclos While:

    Ejemplo: Aproximacion.

    Archivo script interes.m:

    % archivo aprox2.mclcEPS=1;for num=1:1000

    EPS=EPS/2;if(1+EPS)

  • 3.4. Estructuras SWITCH-CASE

    Cuando las secuencias de comandos deben ser evaluados en base al uso repetido de prueba de igualdad.Esto es llevado a cabo de manera mucho mas facil empleando las estructuras Switch-Case y son de lasiguiente forma:

    switch expresioncase test_expresion1(sentencias1)case {test_expresion2,test_expresion3,test_expresion4}(sentencias2)othewise(sentencias3)

    end

    Aqu expresion debe ser un escalar o una cadena de caracter. Si expresion es un escalar, expresion==test_expresionNes probada por cada enunciado case. Si expresion es una cadena de caracter, expresion es comparado contest_expresion1 en el primer enunciado. Si son iguales, sentencias1 son evaluadas y el resto de los enunci-ados antes del end son pasados por alto. Si la primera comparacion es falsa, la segunda opcion es considerada(segundo case). Si todas las comparaciones son falsas, (sentencias3) son ejecutadas despues del enunciadootherwise.

    Nota! La implementacion de Switch-Case permite al menos que uno del grupo de sentencias sea ejecutada.

    Ejemplo: Crear un programa que convierta una medida lineal a una unidad por default (en este caso,centmetros). Ingresar la magnitud y la unidad.

    Archivo script interes.m:

    32

  • %archivo script medidas.m

    %Este archivo realiza la conversion de un numero%en medidas lineales a centmetros.

    x=input(cantidad: );units=input(unidades: );

    switch units %convierte x a centmetroscase {inch, in}

    y=x*2.54;case {feet, ft}

    y=x*2.54*12;case {meter, m}

    y=x/100;case {millimeter, mm}

    y=x/10;case {centimeter, cm}

    y=x;otherwise

    disp([Unidades desconocidas: units])y=nan;

    end

    disp(sprintf(%21.5f %3s, y, cm))

    Ejecutando este programa con varios ejemplos, tenemos los siguientes resultados en pantalla.

    )) cantidad: 2.7 unidades: m0.02700 cm

    )) cantidad: 1 unidades: in2.54000 cm

    )) cantidad: 5 unidades: ft152.40000 cm

    )) cantidad: 3 unidades: mm0.30000 cm

    33

  • 34

  • Captulo 4

    Arreglos y operaciones con arreglos

    4.1. Direccionamiento de arreglos

    En MATLAB, los datos necesarios para operaciones son almacenados y procesados en forma de arreglos.Los elementos de un arreglo son accesados a traves de subndices (este subndice representa una direccion endonde se localiza un elemento en particular).

    Ejemplo: Utilizando arreglos evaluar la siguiente funcion utilizando pasos de 0,1pi y realizar la graficacorrespondiente.

    f(x) = sin(x) para 0 x 2pi

    Escribiendo el archivo correspondiente llamado seno.m:

    % script archivo-M seno.m

    %Este programa evalua la funcion seno desde 0 hasta 2*pi%y obtiene su grafica

    x=0:0.1*pi:2*pi %vector desde 0 hasta 2*pi en pasos de 0.1*pi

    y=sin(x) %vector que contiene el valor del seno de x

    plot(x,y) %obtiene la grafica de la funcion senogrid

    Corriendo este archivo script (ya sea desde la lnea de comandos o desde el editor de MATLAB), vemosen la ventana de comandos los valores correspondientes de x y el valor de la funcion seno (arreglo y) .

    )) seno

    x =

    Columns 1 through 7

    0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850

    35

  • Columns 8 through 14

    2.1991 2.5133 2.8274 3.1416 3.4558 3.7699 4.0841

    Columns 15 through 21

    4.3982 4.7124 5.0265 5.3407 5.6549 5.9690 6.2832

    y =

    Columns 1 through 7

    0 0.3090 0.5878 0.8090 0.9511 1.0000 0.9511

    Columns 8 through 14

    0.8090 0.5878 0.3090 0.0000 -0.3090 -0.5878 -0.8090

    Columns 15 through 21

    -0.9511 -1.0000 -0.9511 -0.8090 -0.5878 -0.3090 -0.0000

    0 1 2 3 4 5 61

    0.8

    0.6

    0.4

    0.2

    0

    0.2

    0.4

    0.6

    0.8

    1

    Figura 4.1: Grafica de la funcion seno.

    Como vemos en la Figura 6.10, la grafica de la funcion seno esta formada por los arreglos x (la variableindependiente) y el arreglo y (la variable dependiente).

    Nota! Los arreglos involucrados para la graficacion deben de ser del mismo tamano o dimension.

    36

  • 4.2. Construccion de arreglos

    MATLAB maneja basicamente dos tipos de arreglo que son:

    Unidimensionales: Existen dos tipos y podemos verlos como vectores:

    Tipo fila: Tamano (dimension) 1 n, donde n es el numero de columnas. Tipo columna: Tamano (dimension) n 1, donde n es el numero de filas.

    Bidimensionales: Son aquellos que tienen cierta cantidad de filas y columnas (podemos considerarloscomo matrices). En MATLAB se pueden definir con solo especificar sus dimensiones.

    Matriz de tamano n n (matriz cuadrada), donde n es el numero de filas y columnas. Matriz de tamano n m (matriz rectangular), donde n es el numero de filas y m el numero decolumnas.

    En MATLAB, para crear un vector fila; los elementos deben estar separados por espacioso comas especificando diferentes columnas. De manera analoga, para un vector columna,cada elemento esta separado por punto y coma especificando diferentes filas.Para construir matrices, especificamos las columnas separando cada elemento por medio deespacios o coma y con punto y coma las filas.

    Las tecnicas y comandos empleados para la construccion de arreglos unidimensionales se muestran acontinuacion:

    Tecnicas de construccion Descripcion

    x=[ 2 2*pi sqrt(2) 2-3j] con elementos especficos.y=[ 2;2*pi;sqrt(2);2-3j] con elementos especficos.x=first:last first hasta last.x=first:step:last first hasta last con incrementos (step).x=linspace(first,last,n) first hasta last, teniendo n elementos (puntos).x=logspace(first,last,n) logartmicamente espaciado desde 10first hasta 10last teniendo n elementos (puntos).

    Crean un vector fila x.Crea un vector columna y.

    Podemos pasar de vector fila a columna o viceversa, esto es llevado a cabo realizando una transpuestaal vector fila o columna y se denota con el operador ().

    Ejemplo:

    )) a=1:.5:5

    a =

    Columns 1 through 7

    1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000

    Columns 8 through 9

    4.5000 5.0000

    )) b=a

    37

  • b =

    1.00001.50002.00002.50003.00003.50004.00004.50005.0000

    Cuando se manejan vectores o matrices con elementos complejos, si empleamos el operador () obtenemosla transpuesta pero con sus elementos conjugados. MATLAB ofrece el operador punto transpuesta (.); ladiferencia del primero con el segundo con respecto al segundo radica en que el operador (.) entrega latranspuesta con sus elementos sin alterar.

    Ejemplo:

    )) c=a+i*a

    c =

    Columns 1 through 4

    1.0000 + 1.0000i 1.5000 + 1.5000i 2.0000 + 2.0000i 2.5000 + 2.5000i

    Columns 5 through 8

    3.0000 + 3.0000i 3.5000 + 3.5000i 4.0000 + 4.0000i 4.5000 + 4.5000i

    Column 9

    5.0000 + 5.0000i

    )) c.

    ans =

    1.0000 + 1.0000i1.5000 + 1.5000i2.0000 + 2.0000i2.5000 + 2.5000i3.0000 + 3.0000i3.5000 + 3.5000i4.0000 + 4.0000i4.5000 + 4.5000i5.0000 + 5.0000i

    )) c

    ans =

    1.0000 - 1.0000i

    38

  • 1.5000 - 1.5000i2.0000 - 2.0000i2.5000 - 2.5000i3.0000 - 3.0000i3.5000 - 3.5000i4.0000 - 4.0000i4.5000 - 4.5000i5.0000 - 5.0000i

    Tambien podemos construir matrices y realizar operaciones matematicas; las matrices en MATLABconsisten en arreglos con multiples filas y columnas. A continuacion, tenemos algunos ejemplos de contruccionde matrices.

    Ejemplo: Construccion de matrices

    )) g=[1 2 3 4;5 6 7 8]

    g =

    1 2 3 45 6 7 8

    )) h=[1 2 3 4; 5 6 7 8; 9 10 11 12]

    h =

    1 2 3 45 6 7 89 10 11 12

    )) A=[-1 0 7 5;2 -4 10 8;6 4 -12 0;4 -2 5 7]

    A =

    -1 0 7 52 -4 10 86 4 -12 04 -2 5 7

    )) B=[1 -3 10 -5;8 -10 11 3;8 16 -12 1;18 -1 9 3]

    B =

    1 -3 10 -58 -10 11 38 16 -12 118 -1 9 3

    4.3. Operaciones matematicas con arreglos

    Operaciones matematicas matriciales y vectoriales pueden ser llevadas a cabo en MATLAB.A continuacion, en la siguiente tabla resumimos las operaciones realizadas con matrices y vectores en

    MATLAB.

    39

  • Operaciones matriciales Descripcion

    Donde A, B son matrices y c un escalar

    Suma escalar Utilizada para resultados.

    pi pi

    eps Epsilon de la maquina

    flops Conteo de operaciones de punto flotante

    inf NaN (o) nan No numero

    i (y) j i = j =1

    nargin Numero de argumentos de entrada de una funcion

    nargout Numero de argumentos de salida de una funcion

    realmin Numero entero real mas pequeno utilizable

    realmax Numero entero real mas grande utilizable

    Ejemplo: Operaciones matematicas con matrices en MATLAB.

    )) A

    A =

    -1 0 7 52 -4 10 86 4 -12 04 -2 5 7

    )) B

    B =

    1 -3 10 -58 -10 11 38 16 -12 118 -1 9 3

    )) A+B %suma de las matrices A+B

    ans =

    0 -3 17 010 -14 21 1114 20 -24 122 -3 14 10

    )) 2*A %multiplicacion del escalar 2 por la matriz A

    ans =

    -2 0 14 104 -8 20 1612 8 -24 08 -4 10 14

    )) ans-B %restar B de la respuesta previa (2*A-B)

    40

  • ans =

    -3 3 4 15-4 2 9 134 -8 -12 -1

    -10 -3 1 11

    Podemos hacer la multiplicacion de dos matrices; elemento por elemento o matricial. En el siguienteejemplo veremos las dos diferencias.

    Ejemplo: Multiplicamos las matrices A y B elemento por elemento.

    )) A

    A =

    -1 0 7 52 -4 10 86 4 -12 04 -2 5 7

    )) B

    B =

    1 -3 10 -58 -10 11 38 16 -12 118 -1 9 3

    )) A.*B

    ans =

    -1 0 70 -2516 40 110 2448 64 144 072 2 45 21

    El punto antes del smbolo de multiplicacion le dice a MATLAB desarrollarla multiplicacion elemento por elemento. En cambio, si no utilizamos el puntosignifica que es la multiplicacion matricial.

    41

  • 42

  • Captulo 5

    Calculos de tiempo

    MATLAB ofrece funciones para manipular tiempo. Podemos realizar aritmeticas con fechas, horas, im-primir calendarios, y localizar das especficos. MATLAB realiza esto almacenando la fecha y la hora comonumeros de doble precision representando el numero de das donde comienza el ano cero. MATLAB tienefunciones para convertir numeros de fechas y cadenas de caracteres y para manipular fechas y horas.

    5.1. Fecha y hora actual

    La funcion clock regresa la fecha y hora actuales en un arreglo. Ejemplo:

    )) T=clock

    T =

    1.0e+003 *

    2.0030 0.0090 0.0030 0.0180 0.0390 0.0098

    Estos datos fueron almacenados en el arreglo T con el siguiente formato:

    T=[a~no mes da hora minutos segundos]

    La funcion now regresa la fecha y hora actual como numeros de doble precision o simplemente un numerode fecha.

    )) format long )) t=now

    t =

    7.318277810951389e+005

    Cabe mencionar que T y t contienen la misma informacion.La funcion date regresa la fecha actual como una cadena con el formato dd-mmm-yyyy:

    )) date

    ans =

    03-Sep-2003

    43

  • 5.2. Conversiones para formatos de fechas

    Generalmente, las matematicas en las que involucran tiempo involucra horas o fechas en forma de datosnumericos, desarrollando las operaciones matematicas estandares en las horas, y entonces convirtiendo el re-sultado a un formato comprensible al usuario. Como resultado, la conversion entre la conversion de diferentesformatos de tiempo es muy importante.

    MATLAB soporta tres formatos para fechas:

    1. Numeros de fecha con doble precision.

    2. Cadenas de caracteres de fechas en una variedad de estilos.

    3. Vector numerico de fechas.

    Podemos convertir el numero de fecha a una cadena utilizando la funcion dateform. La sintaxis empleadapara la funcion datestr es la siguiente:

    datestr(fecha,forma del dato)

    A continuacion, vemos las caractersticas del comando datestr.

    )) help datestr

    DATESTR String representation of date.DATESTR(D,DATEFORM) converts a serial data number D (as returned byDATENUM) into a date string. The string is formatted according to theformat number or string DATEFORM (see table below). By default,DATEFORM is 1, 16, or 0 depending on whether D contains dates, timesor both. Date strings with 2 character years are interpreted to bewithin the 100 years centered around the current year.

    DATESTR(D,DATEFORM,PIVOTYEAR) uses the specified pivot year as thestarting year of the 100-year range in which a two-character yearresides. The default pivot year is the current year minus 50 years.DATEFORM = -1 uses the default format.

    DATEFORM number DATEFORM string Example0 dd-mmm-yyyy HH:MM:SS 01-Mar-1995 15:45:171 dd-mmm-yyyy 01-Mar-19952 mm/dd/yy 03/01/953 mmm Mar4 m M5 mm 36 mm/dd 03/017 dd 18 ddd Wed9 d W

    10 yyyy 199511 yy 9512 mmmyy Mar9513 HH:MM:SS 15:45:1714 HH:MM:SS PM 3:45:17 PM15 HH:MM 15:4516 HH:MM PM 3:45 PM17 QQ-YY Q1-96

    44

  • 18 QQ Q1

    See also DATE, DATENUM, DATEVEC.

    Ejemplos del comando datestr:

    )) t=now; )) datestr(t)

    ans =

    03-Sep-2003 18:57:22

    )) datestr(t,14)

    ans =

    6:57:22 PM

    La funcion inversa a datestr es datenum. La funcion datenum convierte una fecha en formato de ca-dena de caracteres a una fecha en formato numerico utilizando datenum(str). Alternativamente, convierteespecificaciones de fechas individuales utilizando la forma:

    datenum(a~no,mes,da)datenum(a~no,mes,da,hora,minutos,segundos)

    Por ejemplo:

    )) t=now

    t =

    7.318277941717593e+005

    )) datestr(t)

    ans =

    03-Sep-2003 19:03:36

    )) datenum(ans)

    ans =

    7.318277941666667e+005

    )) datenum(2003,9,3)

    ans =

    731827

    )) datenum(2003,5,3,19,04,34)

    ans =

    7.317047948379630e+005

    45

  • La funcion datevec convierte una cadena de fechas usando datesr(format 0,1,2,6,13,14,15, o 16) aun vector numerico conteniendo los componetes de la fecha. De manera alterna, convierte una fecha numericaa un vector numerico de componentes de fechas. Por ejemplo:

    )) c=datevec(11/28/2001)

    c =

    2001 11 28 0 0 0

    )) [yr,mo,day,hr,min,sec]=datevec(28-Nov-2001 19:00)

    yr =

    2001

    mo =

    11

    day =

    28

    hr =

    19

    min =

    0

    sec =

    0

    5.3. Funciones para fechas

    El da de la semana de manera numerica puede ser encontrado a partir de una cadena de caracteres ouna fecha numerica utilizando la funcion weekday. Ejemplo:

    )) [d,w]=weekday(731827)

    d =

    4

    46

  • w =

    Wed

    )) [d,w]=weekday(28-Nov-2003)

    d =

    6

    w =

    Fri

    El ultimo da de cualquier mes puede ser encontrado utilizando la funcion eomday. Debido a que existenlos anos bisiestos, el ano y la fecha son requeridos.

    )) eomday(1996,2) % 2000 fue a~no bisiesto

    ans =

    29

    MATLAB puede generar un calendario para cualquier mes que el usuario solicite y lo despliega en laventana de comandos en forma de una matriz de 6 7 utilizando la funcion calendar:)) calendar(9/21/01) %despliega calendario

    Sep 2001S M Tu W Th F S0 0 0 0 0 0 12 3 4 5 6 7 89 10 11 12 13 14 1516 17 18 19 20 21 2223 24 25 26 27 28 2930 0 0 0 0 0 0

    )) S=calendar(2000,9) %retorna calendario como arreglo numerico

    S =

    0 0 0 0 0 1 23 4 5 6 7 8 910 11 12 13 14 15 1617 18 19 20 21 22 2324 25 26 27 28 29 300 0 0 0 0 0 0

    )) size(S)

    ans =

    6 7

    47

  • 5.4. Funciones de temporizacion

    Las funciones tic y toc son utilizadas para temporizar una secuencia de operaciones de MATLAB.El comando tic inicializa un cronometro; por su parte, toc para el cronometro y despliega el tiempotranscurrido.

    )) tic;plot(rand(5));toc

    elapsed_time =

    7.80000000000000

    )) tic;plot(rand(5));toc

    elapsed_time =

    0.55000000000000

    Cabe notar, que la diferencia de tiempos transcurridos para comandos plot identicos. En el segundo plotfue significativamente mas rapido debido a que MATLAB ya haba creado la ventana de Figura y compilo lasfunciones que necesito en memoria.

    La funcion cputime entrega el tiempo de CPU en segundos que MATLAB ha empleado desde que lasesion actual inicio. La funcion etime calcula el tiempo transcurrido entre dos vectores de tiempo en unvector fila de 6 elementos tal como regresan las funciones clock y datevec. Las funciones cputime y etimepueden ser utilizadas para calcular el tiempo que toma una operacion en ser completada.

    )) t0=cputime;oido;cputime-t0

    ans =

    0.21999999999935

    )) t1=clock;oido;etime(clock,t1)

    ans =

    0.22000000000000

    48

  • Captulo 6

    Graficas con MATLAB

    MATLAB comprendera una gran gama de funciones para construir diferentes tipos de graficas. Es decir,podemos generar graficas polares, de barras, implcitas, retculas triangular y contornos, 2-D y 3-D. MATLABpermite la colocacion de ttulos, etiquetas a los ejes, cuadriculado a las graficas as como algunas instruccionespara controlar las ventanas graficas.

    Funciones basicas de graficacion Descripcion

    axis Establece los ejes de las graficas.

    bar Realiza graficas de barras.

    cla Borra curvas graficadas y redibuja los ejes.

    clf Borra lo que haya en la ventana de graficos.

    close Cierra la ventana de graficacion.

    fplot Funcion de graficacion.

    ginput Obtiene los puntos de la grafica con un click de raton.

    grid Cuadrcula.

    gtext Coloca texto donde se haga un click de raton.

    hold Mantiene las graficas.

    loglog Establece una escala logartmica en los ejes x y y de la grafica.

    pause Realiza una pausa entre graficas.

    plot Graficacion 2-D de manera lineal.

    polar Graficacion polar.

    semilogx Establece una escala logartmica en el eje x.

    semilogy Establece una escala logartmica en el eje y.

    stairs Grafica de escaleras.

    text Coloca texto en la ventana grafica.

    title Coloca ttulo en la grafica.

    xlabel Coloca etiqueta en el eje x.

    ylabel Coloca etiqueta en el eje y.

    6.1. Graficacion 2-D

    Si tenemos un conjunto de puntos de datos, (xi, yi), i = 1, 2, 3, . . . , n. Es necesario manejar x y y enforma de arreglos fila o columna del mismo tamano o dimension. Estos datos pueden ser graficados con elcomando plot.

    Ejemplo: Graficar la funcion seno amortiguada siguiente.

    f(x) = sin(x)e0,4x para 0 x 20

    49

  • Escribiendo el archivo correspondiente llamado amortiguada.m:

    %archivo amortiguada.m

    %vector fila 0

  • Archivo euler.m:

    %archivo euler.m

    %vector fila 0

  • Tipo de marca Smbolo

    Punto .

    Mas +

    Asterisco *

    Crculo o

    Marca x x

    Ejemplo: Graficar la funcion seno amortiguada anterior con *.

    Escribiendo el archivo correspondiente llamado amortiguada2.m:

    %archivo amortiguada.m

    %vector fila 0

  • 0 2 4 6 8 10 12 14 16 18 200.2

    0.1

    0

    0.1

    0.2

    0.3

    0.4

    0.5

    0.6

    x

    y

    Figura 6.3: Grafica de la funcion seno amortiguada.

    El smbolo del color se especifica tambien como tercer parametro en el comando plot; por ejemplo:plot(x,y,g)Ademas, es posible combinar marcas y colores:plot(x,y,+g)Conversion de numeros a cadenas: En ocasiones, deseamos incluir en las graficas valores numericos

    en el texto. Para ello, podemos utilizar los comandos num2str y int2str, que significan numero a cadena yentero a cadena, respectivamente; por ejemplo,

    cad=num2str(pi)

    En esta lnea, definimos una variable de cadena de caracteres que contiene el valor de pi. Por su parte,int2str, un valor real se convierte en una cadena que contiene solo la parte entera del numero; por ejemplo,con

    cad=int2str(pi)

    Definimos una variable de cadena de caracteres contiene solo la parte entera de pi. Una vez que el numerose ha convertido en cadena, se puede incluir en los argumentos de las funciones title, xlabel e ylabel, oen text; por ejemplo,

    title([ Caja: , cad, cm])

    Texto en la grafica: Podemos escribir texto en una grafica con los comandos text o getext. La primeraorden requiere tres parametros en su argumento, a saber:

    text(x, y, cadena)

    Los dos primeros argumentos son x y y son los valores de las coordenadas absolutas del punto en el quecomienza la cadena; el tercero es la cadena que se imprimira, misma que puede ser una variable de cadenapredefinida o un texto encerrado en apostrofos. Por ejemplo:

    text(2, 4, +++ material)

    53

  • Esta orden significa que a partir del punto (2,4) exhibe en pantalla la cadena +++ material.Si es necesario determinar manualmente la ubicacion del texto, gtext(cadena) resulta de utilidad.

    Cuando se ejecuta este comando, el programa espera hasta que se hace click con el raton o se pulsa una teclacon el apuntador del raton dentro de la ventana grafica, y el texto se escribira en el lugar senalado por elraton o por el cursor.

    Cabe aclarar, el comando text funciona tambien en ejes tridimensaionales, pero gtext solo lo hace enejes bidimensionales.

    Color y tipo de letra: Podemos modificar el color y el tipo de la letra o fuente del texto en una grafica.Por ejemplo:

    text(0.3, 0.2, cadena, Fontsize, [18], Color, r)

    Esta orden imprimira cadena en rojo con una fuente de 18 puntos. Si deseamos cambiar el color poromision, escribiramos:

    set(gcf, DefaultTextColor, yellow)

    Ejecutando esta orden, los textos en exhibiran en amarillo. El color del texto puede elegirse entre red(rojo), yellow (amarillo), green (verde), cyan (turquesa), blue (azul) y magenta, los cuales se abrevian comor, y, g, c, b y m, respectivamente. Podemos modificar el color de otros textos de forma similar cuantasveces sea necesario. La disponibilidad de tamanos de fuentes vara dependiendo de la edicion de MATLAB.

    Tambien, podemos modificar el tipo de letra; por ejemplo, el manejo de smbolos griegos que podemosintroducir tambien con text; ejemplo:

    text(2, 0, abcdefg.., FontName, symbol)

    Exhibira . . . Los especificadores FontName y symbol de los argumentos convierten las letrasalafbeticas a letras griegas. A continuacion mostramos la tabla de conversion de letras alfabeticas a letrasgriegas y smbolos.

    a q b r c s d t e u f v $g w h x i z j D k G l S m W n X o o $ p pi ?

    El tamano de la fuente de los valores correspondientes a las marcas de escala de los ejes se puede modificarcon set; por ejemplo,

    set(gca, FontSize, [18])

    Cambia la fuente del eje a 18 puntos. Si colocamos texto en un lugar incorrecto, no hay forma de borrarlo;la solucion a ese problema es redibujar toda la figura despues de corregir el guion.

    Figura: Podemos abrir multiples ventana de graficos con el comando figure. Si solo se utiliza unaventana, no hay necesidad de utilizar este comando, pero si se requieren mas ventanas de graficos se puedenabrir con ella. Si se necesita reactivar una ventana grafica previamente abierta, entonces utilizamos figure(n)que reactivara la n-esima ventana, donde n es el numero secuencial de figura que aparece en la parte superiorde la ventana de graficos. Tambien es posible modificar las propiedades de las figuras.

    54

  • 6.2. Graficos multiples

    6.2.1. Graficacion multiple con plot

    En MATLAB podemos generar dos o mas graficas con una sola orden plot, eso lo podemos realizarescribiendo todos los conjuntos de coordenadas repetidamente en la orden plot.

    Ejemplo: Comparar dos voltajes de corriente alterna representados en forma sinusoidal en funcion deltiempo y estan dados por la forma general:

    V (t) = A sin(2pift+ )

    En donde:

    A es la amplitud o voltaje pico (volts).

    f frecuencia dada en (Hz).

    t tiempo.

    angulo de fase (radianes).

    Graficar los siguintes voltajes y compararlos:

    V1(t) = 120 sin(2pift) (6.1)V2(t) = 120 cos(2pift) (6.2)

    Donde f = 60 Hz.

    Archivo voltajes.m:

    %archivo voltajes.m

    %vector tiempot=linspace(0,0.018,500);

    %voltajes sinusoidalesv1=120*sin(2*pi*60*t);v2=120*cos(2*pi*60*t);

    plot(t,v1,t,v2)

    xlabel(t)ylabel(V(t))

    title(Voltajes de corriente alterna)grid

    55

  • 0 0.002 0.004 0.006 0.008 0.01 0.012 0.014 0.016 0.018150

    100

    50

    0

    50

    100

    150

    t

    V(t)

    Voltajes de corriente alterna

    Figura 6.4: Grafica de dos voltajes de corriente alterna.

    6.2.2. Graficacion multiple con fplot

    Otra forma de graficar funciones individuales es con fplot(nombref , [xmin, xmax]), donde nombre_f esel nombre de la funcion o del archivo M de funcion que se desea graficar y xmin y xmax son los lmites de lagrafica. El maximo y el mnimo del eje y estas determinado por el mnimo y maximo reales de la funcion;sin embargo podemos ajustar los lmites de la grafica con axis, que se explicara en breve.

    Ejemplo: Graficar la funcion seno, coseno y tangente.Escribimos lo siguiente:

    )) fplot([tan(x),sin(x),cos(x)],2*pi*[-1 1 -1 1]))) grid))

    Teniendo en pantalla lo siguiente:

    6.2.3. Graficacion multiple con retencion

    En ocasiones, es necesario agregar nuevos graficos a uno ya existente, esto es levado a cabo por el comandohold on. Cuando utilizamos hold on, MATLAB no remueve los ejes existentes cuando nuevas funciones plotson utilizadas. En lugar de esto, son agregados nuevos graficos a los ejes actuales, sin embargo, si nuevosdatos no se pueden ajustar dentro de los lmites de ejes actuales, los ejes son reescalados.

    Una vez ejecutado el comando hold on, la grafica permanece en la pantalla incluso si se ejecuta otroguion; por tanto, lo prudente es colocar la orden hold off despues de realizar el ultimo grafico.

    Ejemplo: Utilizar la orden hold para los voltajes de corriente alterna anteriormente descritos:

    56

  • 6 4 2 0 2 4 66

    4

    2

    0

    2

    4

    6

    Figura 6.5: Grafica de la funcion seno, coseno y tangente.

    Archivo voltajes.m:

    %archivo voltajes2.m

    %Utilizacion del comando hold

    %vector tiempot=linspace(0,0.018,500);

    %voltajes sinusoidalesv1=120*sin(2*pi*60*t);plot(t,v1);hold onv2=120*cos(2*pi*60*t);plot(t,v2,--r);hold offxlabel(t)ylabel(V_1(t) (-), V_2(t) (--))

    title(Voltajes de corriente alterna)grid

    6.3. Subgraficas

    En MATLAB es posible sobre una misma ventana de figura graficar mas de un solo conjunto de ejes,es decir un grupo de m n graficas. Esta accion es realizada por el comando subplot, cuya sintaxis es lasiguiente:

    57

  • 0 0.002 0.004 0.006 0.008 0.01 0.012 0.014 0.016 0.018150

    100

    50

    0

    50

    100

    150

    t

    V 1(t)

    (), V

    2(t) (

    )

    Voltajes de corriente alterna

    Figura 6.6: Grafica de dos voltajes de corriente alterna.

    subplot(m,n,j)

    Donde m, n y j son enteros. Aqu el par m y n se refiere a un arreglo m n graficas, y j es el numerosecuencial de la grafica. Por ejemplo, si utilizamos subplot(3,2,1), trazaremos la primera grafica del grupo3 por 2 graficas.

    Ejemplo: Dada una senal sinuisoidal de la forma:

    V (t) = A sin(2pift+ )

    Generar un conjunto de graficas en donde variamos los parametros importantes de la senal que son; laamplitud A, la frecuencia f y la fase . Proponer valores con el fin de comparar dicho grupo de graficas.

    Archivo sinusoidales.m:

    58

  • clcclear allclose all

    T=1; t=linspace(0,T+.5,8000);

    subplot(2,2,1)plot(t,1*sin(2*pi*1*t+0),b)

    title(A = 1, f = 1,FontSize, [9])xlabel(t, FontSize, [9])ylabel(g(t), FontSize, [9])text(0.55,.45,q=0,FontSize, [9],FontName,symbol)grid

    subplot(2,2,2) plot(t,0.5*sin(2*pi*1*t+0),r)

    title(A = 0.5, f = 1, FontSize, [9])xlabel(t, FontSize, [9])ylabel(g(t), FontSize, [9])text(0.55,.45,q=0, FontSize, [9],FontName,symbol)grid

    subplot(2,2,3)plot(t,1*sin(2*pi*2*t+0),g)title(A = 1, f = 2, FontSize, [9])xlabel(t, FontSize, [9])ylabel(g(t), FontSize, [9])text(0.55,.45,q=0, FontSize, [9],FontName,symbol)grid

    subplot(2,2,4)plot(t,1*sin(2*pi*1*t+pi/4),m)title(A = 1, f = 1,FontSize, [9])xlabel(t, FontSize, [9])ylabel(g(t), FontSize, [9])text(0.55,.45,q=p/4, FontSize, [9],FontName,symbol)grid

    6.4. Graficas logartmicas y polares

    Las graficas logartmicas y semilogartmicas pueden ser generadas utilizando los comandos loglog,semilogx y semilogy.

    loglog(x, y) Genera la grafica de log10(x) contra log10(y)

    semilogx(x, y) Genera la grafica de log10(x) contra los ejes lineales de y.

    semilogy(x, y) Genera la grafica de log10(y) contra los ejes lineales de x.

    Los logaritmos de numeros negativos y del cero no existen, entonces los datos de los vectores a graficarno los deben de contener.

    59

  • 0 0.5 1 1.51

    0.5

    0

    0.5

    1A = 1, f = 1

    t

    g(t)

    =0

    0 0.5 1 1.50.5

    0

    0.5A = 0.5, f = 1

    t

    g(t)

    =0

    0 0.5 1 1.51

    0.5

    0

    0.5

    1A = 1, f = 2

    t

    g(t)

    =0

    0 0.5 1 1.51

    0.5

    0

    0.5

    1A = 1, f = 1

    t

    g(t)

    =pi/4

    Figura 6.7: Grafica de dos voltajes de corriente alterna.

    Ejemplo: En pruebas de laboratorio, se realizan estudios de respuesta del odo humano con el fin dedeterminar el umbral de auditividad (por ejemplo, el nivel de sonido perceptible mas bajo) del odo humanovara con la frecuencia. Se recolectaron los siguientes datos, que a continuacion se muestran:

    60

  • 10 5 0 5 10 150.5

    0.4

    0.3

    0.2

    0.1

    0

    0.1

    0.2

    0.3

    0.4

    0.5

    Figura 6.8: Esto es una prueba.

    Frecuencia (Hz) Intensidad (dB)

    20 76

    30 66

    40 59

    50 54

    60 49

    70 46

    80 43

    90 40

    100 38

    200 22

    300 14

    400 9

    500 6

    600 3.5

    700 2.5

    800 1.4

    900 0.7

    1000 0

    1500 -1

    2000 -3

    3000 -8

    4000 -7

    5000 -2

    6000 2

    7000 7

    8000 9

    9000 11

    10000 12

    61

  • Escribiendo el archivo correspondiente llamado oido.m:

    %archivo oido.m

    %Frecuencias en HzHz=[20,30,40,50,60,70,80,90,100,200,300,400,500,600,700,800,900,1000,1500,2000,3000,4000,5000,6000,7000,8000,9000,10000];

    %Nivel de presion de sonido en el odo humano (dB)nps=[76,66,59,54,49,46,43,40,38,22,14,9,6,3.5,2.5,1.4,0.7,0,-1,-3,-8,-7,-2,2,7,9,11,12];

    %Graficacion semilogartmica de respuesta vs frecuencia especificando%crculos en los puntos en color rojosemilogx(Hz,nps,-or)xlabel(Frecuencia (Hz))ylabel(Nivel depresion de sonido relativo (dB))title(Umbral del odo humano)grid

    101 102 103 10410

    0

    10

    20

    30

    40

    50

    60

    70

    80

    Frecuencia (Hz)

    Nivel

    de pr

    esin

    de so

    nido r

    elativo

    (dB)

    Umbral del odo humano

    Figura 6.9: Grafica de respuesta del odo humano.

    Ejecutando este codigo; se observa en la grafica que el odo humano es mas sensible a tonos alrededor delos 3 Khz.

    Tambien podemos construir graficas de funciones en coordenadas polares por el comando polar. Con lasiguiente sintaxis:

    polar(, ) Donde y son vectores; esta dado en radianes y es la magnitud

    62

  • Ejemplo: Un numero complejo puede ser representado en forma polar en la forma z = rei. La nth

    potencia de un numero complejo estas dada por zn = rnein. Si r = 1,2 y = 10. Graficar la funcion |zn|contra n para 0 n 36.

    Archivo polar1.m:

    %archivo polar1.m

    r=1.2; %valor de magnitudtheta=10*pi/180; %conversion a radianes

    %n*theta donde n=0 a 36, en incrementos de 10pi/180 radianesangle=0:theta:36*theta;magnitude=r.^(angle/theta);

    %orden de graficacion de datos (theta,rho)polar(angle,magnitude)title(Grafica polar de un numero complejoz=r^ne^{jn\theta})%cuadrcula (opcional)grid

    200

    400

    600

    800

    30

    210

    60

    240

    90

    270

    120

    300

    150

    330

    180 0

    Grfica polar de un nmero complejo z=rnejn

    Figura 6.10: Grafica en forma polar de z = 1,2nej10n.

    63