Libro MatLab Para Ingeniería

51
MATLAB Alcides RAMOS CALCINA R2008a

description

matlab aplicada a la ingenieria

Transcript of Libro MatLab Para Ingeniería

  • MATLAB

    Alcides RAMOS CALCINA

    R2008a

  • MATLAB Fundamentos Bsicos para Ingenieria

    2

  • Ing. Alcides Ramos Calcina

    3

    INTRODUCCIN

    El programa MATLAB (el nombre corresponde a la abreviatura Matrix Laboratory) es unapotente herramienta de clculo numrico y visualizacin grfica de uso muy difundidoentre los cientficos para el desarrollo de su tarea de investigacin. Tiene la gran ventaja deser un lenguaje de alto nivel que integra, en un nico ambiente software, rutinas de clculo,visualizacin y programacin. El programa es de fcil uso ya que los problemas se puedenformular usando una notacin matemtica standard. La representacin bsica de los datosen MATLAB es en forma matricial.

    Algunos de los usos ms comunes de MATLAB son, por ejemplo:

    Clculo numrico. Desarrollo de algoritmos. Modelado, simulacin y desarrollo de prototipos. Anlisis y visualizacin de datos. Construccin de grficas.

    MATLAB es un sistema abierto al cual el usuario puede incorporar nuevas funciones parasu utilizacin en aplicaciones particulares. Existen tambin libreras de funcionesMATLAB, denominadas Toolboxes, que permiten resolver problemas especficos endiversas reas de ciencia e ingeniera. Actualmente existen Toolboxes en reas tales comoControl, Procesamiento de Seales, Identificacin, Procesamiento de Imgenes, RedesNeuronales, etc.

    En ste primer captulo, esperamos que el alumno se familiarice con los comandos bsicosde MATLAB de forma de poder realizar el tratamiento de los datos obtenidos en loscaptulos siguientes.

    1. ENTORNO DE TRABAJO

    Figura 01: Entorno de trabajo del programa MATLAB.

    Captulo 1

    Operaciones Bsicas2

    7

    5

    6

    3

    1

    4

    8

  • MATLAB Fundamentos Bsicos para Ingenieria

    4

    La pantalla de entrada de MATLAB (Figura 01) constituye el marco de trabajo general delprograma. Los elementos ms importantes de esta pantalla de inicio son los siguientes:

    1Como cualquier programa informtico son los mens y la barra deherramientas estndar de Matlab.

    2Ruta por defecto que utiliza Matlab para guardar los trabajos realizados en el,s se desea cambiar la ruta, escribir la deseada o simplemente copiar la rutadel explorador de Windows.

    3 Current Directory ( directorio actual), muestra ficheros MATLAB y ejecutaoperaciones de ficheros tales como abrir y buscar contenido.

    4El WorkSpace es uno de las herramientas de Matlab que nos permitevisualizar las dimensiones de las variables declaradas.

    5El Command History nos permite almacenar temporalmente todos loscomandos o funciones utilizadas en la consola de comandos, parareutilizarlas solo basta seleccionar y realizar doble clic

    6El Men Start, es la opcin de acceso rpido a todas las opciones yherramientas de Matlab, incluyendo algunas opciones que no se encuentranen los mens estndar, como el navegador Web, etc.

    7Command Window, ventana de comandos, consola de comandos que escomo se le llama, es el lugar donde escribimos y definimos ciertas funcionesy comandos (programar).

    8 Help (ayuda), muestra y busca documentacin para la familia completa deproductos MATLAB.

    2. COMANDOS BSICOS

    Al iniciar el programa MATLAB se desplegar una ventana desde donde se ejecutan losdiferentes comandos (ver figura 2).

    El programa MATLAB se inicia por defecto en el directorio c:\MATLAB\work. Antes decomenzar a trabajar es conveniente cambiarse al directorio de trabajo. Para verificar en quedirectorio se est trabajando se utiliza el comando: pwd.

    Figura 02: Ventana de comandos.

    El smbolo >> (llamado prompt) indica que el programa est esperando que se le ingreseun comando o una variable.

    A continuacin veremos algunos comandos bsicos de MATLAB. Por ms informacinsobre este tema consultar el help de MATLAB: Starting and Quitting MATLAB.Tambin se pueden listar desde el command windown: >> help MATLAB/general.

    ls, dir : Muestra el contenido de un directorio o del sistema.clear a : Borra la variable en uso (a) en memoria.clear all : Borra las variables usadas (locales y globales) en menoria.clc : Limpia el estado de la ventana de comandos.edit : Muestra el editor de texto propio de MATLAB, el cual nos

    permite crear archivos m-file, es decir programas en cdigo parapoder luego ejecutarlas desde la ventana de comandos.

    pwd : Muestra la direccin actual de la lnea de comandos, es decir laruta en la cual se encuentran los archivos creados.

    who : Lista las variables declaradas.whos : Lista las variables en memoria y sus caractersticas.what : Lista las M-files existentes en el directorio de trabajo.close : Cierra ventanas de grficas.clf : Limpia las ventanas de grficos

  • Ing. Alcides Ramos Calcina

    5

    demo : Permite acceder a un entorno grfico de demostracin queilustra algunos tipos de operaciones que se pueden realizar conMATLAB.

    help : Lista la serie de funciones o aplicaciones que abarca MATLAB.Si se desea ver los comandos relacionados con un tpicoparticular, se debe ejecutar el comando help oclikear en la barra de herramientas el smbolo ?.

    exit / quit : Permite finalizar la sesin de MATLAB (salir del programa).save : Almacena las variables en un archivo .mat, con el estado de la

    sesin (excepto grficos).load : Recupera el estado de la sesin guardada.delete : Elimina un archivo .mat

    Caracteres especiales en MATLAB

    ! : El uso de ! (admiracin) es complementario del & (ampersand),y normalmente se utiliza para ejecutar programas externos bajola ventana de comandos de Matlab.

    & : El ampersand como se mencion, indica que la lnea decomandos puede ser utilizada dando paso a otros comandos.Ejemplo: !notepad & ejecuta el notepad de Windows

    % : Antecedido este smbolo, permite visualizar solo comocomentario la lnea de texto.

    ; - Al escribir despus de un bloque de sentencia omite el ecoo salida a la pantalla. Ejemplo: a = 2.5;

    - Para separar filas y para evitar mostrar contenido devariables.

    [ ] : Se utilizan para formar vectores y matrices.( ) : Define precedencia en expresiones aritmticas. Encierra

    argumentos de funciones en forma usual., : Separador de elementos de una matriz, argumentos de funciones

    y declaraciones en lneas con declaraciones mltiples. : Para continuar un comando en la siguiente lnea.

    3. VARIABLES

    En MATLAB es posible definir diferentes tipos de variables y utilizando el comando whoses posible visualizar en la ventana de trabajo qu tipo de variables estn almacenadas en lamemoria de trabajo.

    Para el uso de una variable no es necesario declarar sus nombres, en la siguiente tabla sepresenta las variables predefinidas que posee MATLAB.

    Nombre de la variable Significadopi i y j 1inf eps 1.0000e-006NaN No es nmerorealmin Menor nmero: 2-1022

    realmax Mayor nmero: (2-e)21023

    a) Variables numricas.

    Por defecto son de doble precisin. Se puede trabajar con diferentes tipos de nmeros yexpresiones numricas, que abarcan todo el campo de los nmeros enteros, racionales,reales y los complejos, y se utilizan en argumentos de funciones.

    Las operaciones aritmticas en MATLAB se definen de acuerdo con las convencionesmatemticas estndar.

    x + y Sumax y Diferenciax * y xy Productox/y Divisinx^y Potencia

    Ejemplo:

  • MATLAB Fundamentos Bsicos para Ingenieria

    6

    En la ventana de comandos realice lo siguiente:

    >> 2+5

    ans =

    7

    >> a=3.5*i

    a =

    0 + 3.5000i

    Podemos realizar el clculo de una potencia directamente.

    >> 100^50

    ans =

    1.0000e+100

    Obtener el valor de la siguiente expresin:

    12 127

    0.25 3 1 3

    >> (2^12+1/7)/(0.25-3*(1-3^0.5))

    ans =

    1.6745e+003

    A continuacin se presenta los diferentes formatos que usa MATLAB en lavisualizacin de sus variables.

    format: Modifica el formato numrico de los valores desplegados por MATLAB dondela funcin afecta solo la visualizacin en pantalla y no cmo los computa o almacenaMATLAB.

    format long Muestra los resultados con 16 cifras decimalesformat short Muestra los resultados con 4 cifras decimales. Es el formato

    por defecto de MATLAB.format long e Muestra los resultados con 16 decimales ms la potencia de

    10 necesaria.format short e Muestra los resultados con 4 decimales ms la potencia de 10

    necesaria.format long g Muestra los resultados en formato largo ptimo.format short g Muestra los resultados en formato corto ptimo.format bank Muestra los resultados con 2 cifras decimales.format rat Muestra los resultados en forma de nmeros racionales

    aproximado.format + Muestra el signo de los resultados (+, -) e ignora la parte

    imaginaria de los nmeros complejos.format hex Muestra los resultados en el sistema hexadecimal.

    Ejemplo:

    Exprese el siguiente nmero N = 174/11 en los diferentes formatos.

    >> 174/11

    ans =

    15.8182

    >> format long; 174/11

    ans =

    15.818181818181818

  • Ing. Alcides Ramos Calcina

    7

    >> format long e; 174/11

    ans =

    1.581818181818182e+001

    >> format short e; 174/11

    ans =

    1.5818e+001

    >> format long g; 174/11

    ans =

    15.8181818181818

    >> format short g; 174/11

    ans =

    15.818

    >> format bank; 174/11

    ans =

    15.82

    >> format hex; 174/11

    ans =

    402fa2e8ba2e8ba3

    >> format rat; 2.55

    ans =

    51/20

    b) Variables carcter (string)

    Una variable carcter (cadena) es sencillamente una cadena de caracteres incluidosentre comillas simples que MATLAB trata de forma vectorial. La sintaxis general parala declaracin de variables carcter es la siguiente:

    c = cadena de caracteresEjemplo:

    >> a='hola'

    a =

    hola

    c) Variables matriz

    En MATLAB se define las matrices introduciendo entre corchetes todos sus vectoresfila separados por un punto y coma. Los vectores se pueden introducir separando suscomponentes por espacios en blanco o por comas.

    Ejemplo:

    Una variable matricial de dimensiones 3x3 se puede introducir las dos siguientesformas:

    Sea la matriz1 2 34 5 67 8 9

    M

    >> M=[1 2 3;4 5 6;7 8 9]

    M =

    1 2 34 5 67 8 9

  • MATLAB Fundamentos Bsicos para Ingenieria

    8

    >> M=[1,2,3;4,5,6;7,8,9]

    M =

    1 2 34 5 67 8 9

    Ahora genere una matriz de 4x4 con nmeros aleatorios.

    >> E=rand(4,4)

    E =

    0.2769 0.6948 0.4387 0.18690.0462 0.3171 0.3816 0.48980.0971 0.9502 0.7655 0.44560.8235 0.0344 0.7952 0.6463

    (El comando rand crea una matriz del tamao especificado, en este caso 4 x 4, formadapor nmeros aleatorios entre 0 y 1.)

    d) Variables simblicas

    Se definen entre , por ejemplo: sym 'x', 'y'

    Por ms informacin sobre este tema consultar el help de MATLAB: Data Types inMATLAB.

    4. FUNCIONES MATEMTICAS

    MATLAB dispone de una gama muy completa de funciones predefinidas, la mayora de lascuales estudiaremos ms adelante. Dentro del grupo de las funciones con argumento realque ofrece MATLAB, las ms importantes son las siguientes:

    a) Funciones Trigonomtricas

    Funcin Significadosin(x) Seno de xasin(x) Arcoseno de xcos(x) Coseno de xacos(x) Arcocoseno de xtan(x) Tangente de xatan(x) Arcotangente de xcsc(x) Cosecante de xsec(x) Secante de xcot(x) Cotangente de x

    Ejemplo:

    >> sin(pi/2)

    ans =

    1

    >> x=[1 2 3;9 8 7];>> sin(x)

    ans =

    0.8415 0.9093 0.14110.4121 0.9894 0.6570

    b) Funciones hiperblicas

    Funcin Inversasinh(x) asinh(x)cosh(x) acosh(x)tanh(x) atanh(x)

  • Ing. Alcides Ramos Calcina

    9

    csch(x) acsch(x)sech(x) asech(x)coth(x) acoth(x)

    Ejemplo:

    >> x=[1.5 1.2 1.6; 1.3 1.1 1.8];>> y=sech(x)

    y =

    0.4251 0.5523 0.38800.5074 0.5993 0.3218

    >> z=tanh(x)

    z =

    0.9051 0.8337 0.92170.8617 0.8005 0.9468

    c) Funciones exponenciales y logartmicas

    Funcin Significadoexp(x) Funcin exponencial en base e (e^x)log(x) Funcin logaritmo en base e de xlog10(x) Funcin logaritmo en base 10 de xlog2(x) Funcin logaritmo en base 2 de xpow2(x) Funcin potencia en base 2 de xsqrt(x) Funcin raz cuadrada de x

    d) Funciones especificas de variables numricas

    Funcin Significadoabs(x) Valor absoluto del real xfloor(x) El mayor entero menor o igual que el real x

    ceil(x) El menor entero mayor o igual que el real xround(x) El entero ms prximo al real xfix(x) Elimina la parte decimal del real xrem(x) Da el resto de la divisin entre los reales a y bsign(x) Signo del real x (1 si x>0, -1 si x> round(2.574)

    ans =

    3

    >> round(2.4)

    ans =

    2

    >> ceil(2.574)

    ans =

    3

    >> ceil(2.4)

    ans =

    3

  • MATLAB Fundamentos Bsicos para Ingenieria

    10

    Ejemplo:

    >> x=[-3 4 -11 0];>> abs(x)

    ans =

    3 4 11 0

    Ejemplo:

    >> x=3+2i;>> imag(x)

    ans =

    2

    >> real(x)

    ans =

    3

    Ejemplo:

    >> y=[2 1 5];>> sort(y)

    ans =

    1 2 5

    >> min(y)

    ans =

    1

    >> max(y)

    ans =

    5

    >> sum(y)

    ans =

    8

    e) Nmeros aleatorios

    MATLAB trata perfectamente la generacin automtica de nmeros aleatorios. Veamosa continuacin las funciones ms importantes de generacin de nmeros aleatorios.

    Funcin Significadorand Devuelve un nmero decimal aleatorio distribuido

    uniformemente en el intervalo [0, 1]rand(n) Devuelve una matriz de dimensin nxn cuyos elementos son

    nmeros decimales aleatorios distribuidos uniformemente enel intervalo [0, 1]

    rand(m,n) Devuelve una matriz de dimensin mxn cuyos elementos sonnmeros decimales aleatorios distribuidos uniformemente enel intervalo [0, 1]

    randn Devuelve un nmero decimal aleatorio distribuido segn unanormal con media 0 y varianza 1.

    Ejemplo:

    >> [rand, rand(1), randn, randn(1)]

    ans =

    0.7094 0.7547 -0.4326 -1.6656>> rand(2,3)

  • Ing. Alcides Ramos Calcina

    11

    ans =

    0.2760 0.6551 0.11900.6797 0.1626 0.4984

    >> randn(2,3)

    ans =

    0.1253 -1.1465 1.18920.2877 1.1909 -0.0376

    5. OPERADORES

    En MATLAB se dispone de operadores para denotar las operaciones aritmticas, lgicas,relacionales, condicionales y de estructura.

    a) Operadores aritmticos

    Escalar Matriz Vector Descripcin+ + + Suma o adicin Resta* * .* Multiplicacin/ / ./ Divisin hacia la derecha\ \ .\ Divisin hacia la izquierda^ ^ .^ Potencia

    Ejemplo:

    >> x=[5,4,3]; y=[1,2,7];>> a=x+y, b=x-y, c=x.*y

    a =

    6 6 10b =

    4 2 -4

    c =

    5 8 21

    >> d=3.*x, e=2./x, f=2.\y

    d =

    15 12 9

    e =

    0.4000 0.5000 0.6667

    f =

    0.5000 1.0000 3.5000

    >> g=x./y, h=y.\x, i=x.^2

    g =

    5.0000 2.0000 0.4286

    h =

    5.0000 2.0000 0.4286

    i =

    25 16 9

    >> j=2.^x, k=x.^y

    j =

    32 16 8

  • MATLAB Fundamentos Bsicos para Ingenieria

    12

    k =

    5 16 2187

    b) Operadores relacionales

    < Menor (para complejos slo afecta a partes reales) Mayor (slo afecta a partes reales)

    >= Mayor o igual (slo afecta a partes reales)== Igualdad (afecta a los nmeros complejos)= Desigualdad (afecta a los nmeros complejos)

    c) Operadores lgicos

    A Negacin lgica (NOT) o complemento de AA & B Conjuncin lgica (AND) o interseccin de A y BA | B Disyuncin lgica (OR) o unin de A y B

    Xor(A,B) OR exclusivo (XOR) o diferencia simtrica de A y B

    Ejemplo:

    >> A=3:9

    A =

    3 4 5 6 7 8 9

    >> P=(A>4)&(A

  • Ing. Alcides Ramos Calcina

    13

    INTRODUCCIN

    MATLAB trabaja esencialmente con matrices de nmeros reales o complejos. Lasmatrices 1 1 son interpretadas como escalares y las matrices fila o columna comovectores.

    Por defecto todas las variables son matriciales y nos podemos referir a un elemento condos ndices. Aun as, conviene saber que la matriz est guardada por columnas y que nospodemos referir a un elemento empleando slo un ndice, siempre que contemos porcolumnas. Insistiremos bastante en este detalle, porque tiene fuertes implicaciones paraentender el funcionamiento de bastantes aspectos de MATLAB.

    1. MATRICES NUMERICAS

    MATLAB permite trabajar con matrices numricas de forma muy cmoda y extensa. Latabla que se presenta a continuacin muestra las funciones matrices numricas que puedenrealizarse con el mdulo bsico de MATLAB.

    logm(A) Logaritmo neperiano de la matriz Asqrtm(A) Raz cuadrada de la matriz cuadrada Atranspose(A) o A Matriz transpuesta de Ainv(A) Matriz inversa de la matriz cuadrada A (A-1)det(A) Determinante de la matriz cuadrada Arank(A) Rango de la matriz Atrace(A) Traza o suma de los elementos de la diagonal de A

    Ejemplo:

    Considere una matriz cuadrada de orden 4 formada por nmeros aleatorios distribuidosuniformemente en el intervalo [0, 1] y calcule su determinante, rango, inversa, transpuestay traza.

    >> A=rand(4)

    A =

    0.8147 0.6324 0.9575 0.95720.9058 0.0975 0.9649 0.48540.1270 0.2785 0.1576 0.80030.9134 0.5469 0.9706 0.1419

    >> det(A)

    ans =

    -0.0261

    >> rank(A)

    ans =

    4

    >> inv(A)

    ans =

    Captulo 2

    Arreglos y Matrices

  • MATLAB Fundamentos Bsicos para Ingenieria

    14

    -15.2997 3.0761 14.7235 9.6445-0.2088 -1.8442 1.0366 1.871114.5694 -1.9337 -14.6497 -9.0413-0.3690 0.5345 1.4378 -0.4008

    >> A'

    ans =

    0.8147 0.9058 0.1270 0.91340.6324 0.0975 0.2785 0.54690.9575 0.9649 0.1576 0.97060.9572 0.4854 0.8003 0.1419

    >> trace(A)

    ans =

    1.2118

    Advertencia. Hay que tener una cierta precaucin con la funcin rank para calcular elrango de una matriz, ya que lo hace de forma numrica. Para matrices con enteros detamao razonable el resultado suele ser exacto. En otros casos, MATLAB puede obtener unrango incorrecto por culpa de los redondeos; aun as, MATLAB suele avisar si encuentrauna cierta proximidad a un defecto de rango.

    2. ARITMTICA DE LAS MATRICES

    Con las operaciones suma (+) y producto (*) entre matrices hay que poner atencin en quelas dimensiones de las matrices sean las adecuadas para realizar dichas operaciones.

    Ejemplo:

    >> A=[-2 3;-4 5;-6 7] % o tambien A=[-2, 3;-4, 5;-6, 7]

    A =

    -2 3-4 5-6 7

    >> B=[1 1;2 0;6 2];>> A+B % matriz + matriz de la misma dimension

    ans =

    -1 4-2 50 9

    >> A' % Transpuesta de la matriz A

    ans =

    -2 -4 -63 5 7

    >> A'*A % matriz 2x3 * matriz 3x2

    ans =

    56 -68-68 83

    >> a=[3 -1];>> A*a' % matriz * vector

    ans =

    -9-17-25

    >> u=[1 2 3]

    u =

  • Ing. Alcides Ramos Calcina

    15

    1 2 3

    >> v=[4 5 6]

    v =

    4 5 6

    >> u*v' % fila por columna = producto escalar

    ans =

    32

    >> u'*v % columna por fila = matriz de rango unidad

    ans =

    4 5 68 10 1212 15 18

    >> cross(u,v) % producto vectorial

    ans =

    -3 6 -3

    El ejemplo anterior muestra cmo se puede hacer el producto escalar de dos vectores. Siambos son vectores fila u*v' realiza la operacin, ya que devuelve una matriz 1 X 1, que enMATLAB es indistinguible de un escalar (un nmero). La expresin

    dot(u,v) % producto escalar

    realiza la misma operacin (dot abrevia el concepto de dot product, que es como se suelellamar en ingls al producto escalar), sin preocuparse de si los vectores son fila o columna.

    Hay que tener tambin cuidado con el smbolo de trasposicin. Cuando una matriz A escompleja, con A' se calcula su traspuesta conjugada. Para calcular la traspuesta sinconjugar hay que hacer:

    A.' % traspuesta sin conjugar

    El producto de un vector columna por un vector fila (de cualquier tamao) produce unamatriz genrica de rango unidad:

    1 1 1 1 2 1

    2 2 1 2 2 21 2

    1 2

    m

    m

    m

    n n n n m

    a a b a b a ba a b a b a b

    b b b

    a a b a b a b

    Hay instrucciones para crear matrices llenas de ceros, llenas de unos, diagonales, o laidentidad (en ingls la letra I se pronuncia igual que eye):

    Ejemplo:

    >> ones(3)

    ans =

    1 1 11 1 11 1 1

    >> zeros(3,5)

    ans =

    0 0 0 0 00 0 0 0 00 0 0 0 0

    >> eye(2) % identidad 2x2

  • MATLAB Fundamentos Bsicos para Ingenieria

    16

    ans =

    1 00 1

    >> diag([1 3 -4]) % matriz diagonal

    ans =

    1 0 00 3 00 0 -4

    >> A=[1 2; 3 4];>> diag(A) % vector de elementos diagonales de A

    ans =

    14

    >> diag(diag(A)) % truco para extraer la diagonal de una matriz

    ans =

    1 00 4

    3. ACCESO A LOS ELEMENTOS DE UNA MATRIZ

    Ya hemos indicado que las matrices en MATLAB se guardan por columnas y que se puedebuscar un elemento siempre con un nico ndice. Esta es la simple razn por la que en losvectores (donde no hay ms que una dimensin a la hora de colocar los elementos, sea enfila o en columna) no hace falta ms que un ndice para buscar un elemento.

    Ejemplo:

    >> A=[2 3;4 5;6 7]

    A =

    2 34 56 7

    >> A(2,1) % se toma el elemento de la fila 2 y la columna 1 de A

    ans =

    4

    >> A(2,3)??? Attempted to access A(2,3); index out of boundsbecause size(A)=[3,2].

    >> A(:,1) % vector columna con la primera columna de A

    ans =

    246

    >> A(2,:) % vector fila con la segunda fila de A

    ans =

    4 5

    >> A(4) % cuarto elemento de A, contando por columnas

    ans =

    3

    >> size(A) % dimensiones de A (devuelve un vector)

    ans =

  • Ing. Alcides Ramos Calcina

    17

    3 2

    >> length (A) % mayor de las dimensiones de A

    ans =

    3

    >> v=[-3 4 7]; % vector fila>> v(2) % segundo elemento

    ans =

    4

    >> v(1,2) % segundo elemento (primera fila, segunda columna)

    ans =

    4

    La referencia a elementos de una matriz permite cambiar el valor de un elemento medianteuna sencilla operacin de asignacin. Esto tambin se puede hacer con una fila o columna.

    Ejemplo:

    >> A=[2 -3;-4 5;6 -7];>> A(3,1)=1/2 % cambio de un elemento de A

    A =

    2.0000 -3.0000-4.0000 5.00000.5000 -7.0000

    >> A(2,:)=[1 1]

    A =

    2.0000 -3.00001.0000 1.00000.5000 -7.0000

    Al definir un nuevo elemento fuera de las dimensiones de la matriz se reajusta el tamao dela matriz dando el valor 0 a los restantes elementos

    Ejemplo:

    >> A(3,4)=1

    A =

    2.0000 -3.0000 0 01.0000 1.0000 0 00.5000 -7.0000 0 1.0000

    >> size (A)

    ans =

    3 4

    La matriz vaca es la matriz que no tiene ningn elemento. Se escribe entre corchetes (esdecir, [ ]) y puede ser muy til a la hora de borrar filas o columnas de una matriz dada,como se ve en el siguiente ejemplo,

    >> A=[1 -1 2;2 0 1;0 1 -3];>> A(:,2)=[] % borramos la segunda columna

    A =

    1 22 1

  • MATLAB Fundamentos Bsicos para Ingenieria

    18

    0 -3

    MATLAB puede trabajar con grupos de filas y columnas (no necesariamente consecutivos)o concatenar matrices para formar matrices ms grandes siempre que los tamaos seancompatibles.

    >> A = diag([1 2 3]);>> [A,ones(3,2)] % ampliar con columnas

    ans =

    1 0 0 1 10 2 0 1 10 0 3 1 1

    >> [A;eye(3)] % ampliar con filas

    ans =

    1 0 00 2 00 0 31 0 00 1 00 0 1

    >> A=[1 3;2 1];>> B=[A eye(2);zeros(2) A] % matriz formada por 4 bloques 2x2

    B =

    1 3 1 02 1 0 10 0 1 30 0 2 1

    En general, empleando listas implcitas o simplemente vectores de ndices, se puedenextraer submatrices de una matriz, incluso repitiendo filas y columnas.

    >> B=[1 3 1 0 -1; 2 1 0 1 7; 0 0 1 3 4;0 0 2 1 9]

    B =

    1 3 1 0 -12 1 0 1 70 0 1 3 40 0 2 1 9

    >> B(2:3,2:4) % segunda a tercera filas y segunda a cuartacolumnas

    ans =

    1 0 10 1 3

    >> B(2,1:3) % segunda fila y columnas de primera a tercera

    ans =

    2 1 0

    >> B(1,1:2:5) % columnas impares de la primera fila

    ans =

    1 1 -1

    >> B(2,:) % segunda fila (todas las columnas)

    ans =

    2 1 0 1 7

    >> B(2,4) % elemento que ocupa el lugar (2,4)

    ans =

  • Ing. Alcides Ramos Calcina

    19

    1

    >> B(:,3) % tercera columna (todas las filas)

    ans =

    1012

    >> B([3 1 1],:) % filas 3, 1 y 1 (todas las columnas)

    ans =

    0 0 1 3 41 3 1 0 -11 3 1 0 -1

    >> C= [1 -2;7 -2];>> C(:) % lista con todos los elementos de la matriz

    ans =

    17-2-2

    Esta forma de manipular matrices permite un simple mtodo de intercambio de filas ocolumnas de una matriz sin el tradicional empleo de variables intermedias.

    >> A=[2 3;1 4;7 6]

    A =

    2 31 47 6

    >> A([1 3],:)=A([3 1],:) % intercambio de las filas 1 y 3

    A =

    7 61 42 3

    4. USO DEL OPERADOR \

    El operador \ permite resolver, si es posible, un sistema Ax = b mediante la orden A\b.

    >> A=[2 1;1 2]; % Primer ejemplo, solucin nica>> b=[3 1]';>> A\b

    ans =

    1.6667-0.3333

    >> A*ans

    ans =

    3.00001.0000

    5. ORDENACIONES, COMPARACIONES Y BUSQUEDAS

    De una forma muy simple se pueden localizar los valores mximo y mnimo en una matriz,as como su localizacin.

    >> x=[1 2 3 5 3 1 -7];

  • MATLAB Fundamentos Bsicos para Ingenieria

    20

    >> max(x)

    ans =

    5

    >> min(x)

    ans =

    -7

    >> [cual,donde]=max(x)

    cual =

    5

    donde =

    4

    >> A=[1 2 3;5 7 -1;2 3 4;1 1 1];>> max(A) % da un vector fila con los maximos de cada columna

    ans =

    5 7 4

    >> [cual,donde]=max(A) % para cada columna, 'donde' indica lafila

    cual =

    5 7 4

    donde =

    2 2 3

    >> max(max(A)) % o tambien max(A(:))

    ans =

    7

    Veamos algo de ordenacin de elementos en una matriz.

    >> x=[1 2 3 5 3 1 -7];>> sort(x) % ordena los elementos en orden ascendente

    ans =

    -7 1 1 2 3 3 5

    >> A=[-2 4 7; 5 -6 -4;-2 -7 -9]

    A =

    -2 4 75 -6 -4-2 -7 -9

    >> sort(A) % ordena los elementos dentro de cada columna

    ans =

    -2 -7 -9-2 -6 -45 4 7

    El orden descendente se puede obtener a partir del ascendente con cambios de posicionesde los elementos, pero tambin con un doble cambio de signo:

    -sort(-A) % orden descendente

  • Ing. Alcides Ramos Calcina

    21

    La orden find sirve para encontrar las posiciones de una matriz que cumplen algunacondicin. Al igual que muchas otras funciones de MATLAB, la orden devuelve resultadosdistintos segn el nmero de argumentos de salida que se soliciten.

    >> A=[-1 2 5;3 0 -1]

    A =

    -1 2 53 0 -1

    >> find(A> [i,j]=find(A

  • MATLAB Fundamentos Bsicos para Ingenieria

    22

    INTRODUCCIN

    El mdulo bsico de MATLAB ofrece una gama amplia de opciones a la hora de realizarrepresentaciones grficas. Permite realizar grficos de curvas planas y superficies,posibilitando la agrupacin y superposicin de ellas. Tambin es posible trabajar colores,rejillas, marcos, leyendas, ttulos, rtulos, etc., en grficos. Las representaciones defunciones pueden realizarse en coordenadas implcitas, explicitas y paramtricas.MATLAB es, por tanto, un software matemtico con elevadas prestaciones grficas, lo quelo distingue de muchos otros paquetes de clculo simblico.

    1. GRFICOS BASICOS 2D

    1.1. Grfico de datos

    A continuacin se representan los comandos ms importantes de MATLAB quepermite realizar representacin de datos (grficos estadsticos en su mayora). En lasiguiente tabla se presentan algunos comandos y funciones para este propsito.

    bar(Y) Grfico relativo al vector de frecuencias Y. Si Y es matriz seobtiene el grafico de barras mltiples para cada fila de Y.

    bar(x,Y) Grfico de barras vertical relativo al vector de frecuencias Ysiendo x un vector que define los espacios en el eje x.

    barh(X,y) Grfico de barras horizontales relativo al vector de frecuencias Xsiendo y un vector que define los espacios en el eje y.

    hist(Y) Dibuja el histograma relativo al vector de frecuencias Y usando10 rectngulos iguales de igual base.

    hist(Y,k) Dibuja el histograma relativo al vector de frecuencias Y usando krectngulos.

    pie(X) Realiza el grafico de sectores circulares relativo al vector defrecuencias X.

    errorbar(x,y,e) Realiza el grafico del vector x contra el vector y con los erroresespecificados en el vector e. Pasando por cada punto (xi,yi).

    stem(Y) Realiza el grfico de racimo relativo al vector Y.stairs(X,Y) Grfico escalonado del vector Y con el elemento a travs del

    vector X.rose(Y) Dibuja el histograma angular relativo al vector Y.

    Ejemplo:

    Represente en un grfico de barras los valores de un vector

    35

    1012

    y

    . (Figura 3)

    >> y=[3 5 10 1 2]';>> bar(y)

    A continuacin representamos el mismo grfico para barras horizontales (Figura 4).

    >> y=[3 5 10 1 2]';>> barh(y)

    Captulo 3

    Grficos

  • Ing. Alcides Ramos Calcina

    23

    1 2 3 4 50

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    Figura 3.

    0 1 2 3 4 5 6 7 8 9 10

    1

    2

    3

    4

    5

    Figura 4.

    Represente un grfico de barras definidas por la funcin .x xe donde x [-5, 5] dedos en dos decimales.

    >> x=-5:0.2:5;>> bar(x,exp(-x.*x))

    Tambin podemos realizar lo siguiente:

    >> x=-5:0.2:5;>> y=exp(-x.*x);>> bar(x,y)

    -6 -4 -2 0 2 4 60

    0.1

    0.2

    0.3

    0.4

    0.5

    0.6

    0.7

    0.8

    0.9

    1

    Figura 5.

    A continuacin representamos el mismo grfico para barras horizontales

    >> x=-5:0.2:5;>> y=exp(-x.*x);>> barh(x,y)

  • MATLAB Fundamentos Bsicos para Ingenieria

    24

    0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1-6

    -4

    -2

    0

    2

    4

    6

    Figura 6.

    Consideremos un vector con 10000 puntos aleatorios normales (0,1) y graficamos elhistograma de frecuencias relativas a dichos puntos (Figura 7).

    >> y=randn(10000,1);>> hist(y)

    -4 -2 0 2 40

    500

    1000

    1500

    2000

    2500

    3000

    Figura 7.

    Tambin podemos graficar el histograma anterior con 20 cajas (Figura 8) mediante elsiguiente sintaxis:

    -4 -2 0 2 40

    500

    1000

    1500

    Figura 8.

    Represente un grafico de sectores circulares para los valores especificados en elvector Y.

    >> Y=[1 3 0.5 2.5 2];>> pie(Y)

    11%

    33%

    6%

    28%

    22%

    Figura 9.

  • Ing. Alcides Ramos Calcina

    25

    A continuacin representaremos el grafico escalonado relativo a la funcin .x xe parax [-3, 3] separados por una decima (Figura 10).

    >> x=-3:0.1:3;>> stairs(x,exp(-x.^2))

    -3 -2 -1 0 1 2 30

    0.2

    0.4

    0.6

    0.8

    1

    Figura 10.

    Ahora representamos (Figura 11) un grafico de errores para la funcin de densidad deuna distribucin normal (0,1), con variable definida en 40 puntos entre -4 y 4, siendodefinidos los errores por 40 valores aleatorios uniformes (0,10).

    >> x=-4:0.2:4;>> y=(1/sqrt(2*pi))*exp(-(x.^2)/2);>> e=rand(size(x))/10;>> errorbar(x,y,e)

    -5 0 5-0.1

    0

    0.1

    0.2

    0.3

    0.4

    0.5

    0.6

    Figura 11.

    El ejemplo siguiente representamos un grfico de racimo (Figura 12) respecto a 100nmeros aleatorios normales (0,1).

    >> y=randn(100,1);>> stem(y)

    0 20 40 60 80 100-2

    -1

    0

    1

    2

    3

    Figura 12.

  • MATLAB Fundamentos Bsicos para Ingenieria

    26

    1.2. Grafico de funciones (y = f(x))

    Para hacer grficas de funciones de una variable con MATLAB, primero tenemos quecrear una tabla de valores de la variable para despus dibujar la funcin, como yavimos algunos ejemplos anteriormente.

    plot(x,y) Dibuja el conjunto de puntos (x,y) en un sistema cartesiano.plot(Y) Grafica los elementos del vector Y. Es til para graficar series

    temporales.plot(X,Y,S) Grfica de plot(X,Y) con las opciones definidas en S.

    Usualmente, S se compone de dos dgitos entre comillassimples, el primero de los cuales fija el color de la lnea delgrfico y el segundo el carcter a usar en el grfico.

    line(x,y) Crea un grafico de lnea de los puntos (x,y). Puede especificarel color, anchura, estilo de la lnea, y tipo del marcador, ascomo otras caractersticas.

    ezplot(f,[xmin,xmax]) Grafica la funcin en el intervalo de variacin de x dado.fplot(f,[xmin,xmax]) Grafica la funcin en el intervalo de variacin de x dado.

    Ejemplo:

    Queremos dibujar la grfica de la funcin y = sen(x) en el intervalo [0,2] (Figura13):

    >> x=0:pi/100:2*pi;>> y=sin(x);>> plot(x,y)

    Veamos un ejemplo algo ms complicado (Figura 14). Queremos dibujar ahora lagrfica de la funcin

    2xy xe . Definido los valores de x en el intervalo [-3,3].

    >> x=-3:0.01:3;>> y=x.*exp(-x.^2);>> plot(x,y)

    0 1 2 3 4 5 6 7-1

    -0.5

    0

    0.5

    1

    Figura 13.

    -3 -2 -1 0 1 2 3-0.5

    0

    0.5

    Figura 14.

    La representacin de la funcin anterior (Figura 14), tambin puede realizarsemediante la sintaxis siguiente:

    >> ezplot('x.*exp(-x.^2)',[-3,3])

    As mismo, se obtendra la misma representacin grfica mediante el comandosiguiente:

    >> fplot('x.*exp(-x.^2)',[-3,3])

  • Ing. Alcides Ramos Calcina

    27

    Cuadrcula.

    Si queremos que aparezca una cuadrcula sobre el dibujo, utilizaremos el comandogrid on. El aspecto del dibujo sera ahora como el de la Figura 15. Para desactivar lacuadrcula habr que escribir grid off.

    >> fplot('x.*exp(-x.^2)',[-3,3])>> grid on

    -3 -2 -1 0 1 2 3-0.5-0.4-0.3-0.2-0.1

    00.10.20.30.40.5

    Figura 15.

    Color y trazo

    El comando plot ofrece mltiples posibilidades de color y forma de trazo de lagrfica.

    Carcter Descripcin Lnea Descripcin. Punto - Continua+ Ms - - Guiones* Asterisco : PunteadaO Circunferencia -. Guiones y puntoX Equis (x-marcas)

    Carcter Colory Amarillom Magentac Cyanr Rojog Verdeb Azulw Blancok Negro

    Nota: Para consultar todas las posibilidades, hacer:

    >> help plot.

    Para ilustrar el color y trazo, grafiqu de la funcin 3( )y sen x x . Definido losvalores de x en el intervalo [-3,4] con incrementos de dos decima (Figura 16).

    >> x=-3:0.2:4;>> y=sin(x).^3-x;>> plot(x,y,'r+');

    -3 -2 -1 0 1 2 3 4-5

    -4-3

    -2-10

    123

    Figura 16.

  • MATLAB Fundamentos Bsicos para Ingenieria

    28

    Ahora grafiqu de la funcin cosy x , para x en el intervalo [-2,2] (Figura 17).

    -2 -1.5 -1 -0.5 0 0.5 1 1.5 20

    0.2

    0.4

    0.6

    0.8

    1

    Figura 17.

    Tambin podemos obtener el mismo grafico, pero la funcin determina el incremento(Figura 18):

    >> fplot('abs(cos(x))',[-2,2],'o')

    -2 -1.5 -1 -0.5 0 0.5 1 1.5 20

    0.2

    0.4

    0.6

    0.8

    1

    Figura 18. Ejes

    Los ejes que aparecen por defecto en una grfica tambin se pueden modificar. Con elcomando axis([a b c d]), conseguiremos que la grfica aparezca en la regin a x 2, y c y d.

    Representemos el grafico anterior con nuevos intervalos, para x [0,2] y y [-1,1]

    >> fplot('abs(cos(x))',[-2,2],'o')>> axis([0 2 -1 1])

    0 0.5 1 1.5 2-1

    -0.5

    0

    0.5

    1

    Figura 19.

    Con >>axis square, conseguiremos que la figura aparezca en un cuadrado, sincambiar el rango de los ejes. Con el comando >>axis equal, conseguiremos que losrangos de los ejes sean iguales.

    Zoom

    Utilizando el comando >>zoom on. Se puede agrandar la figura o alguna zonaseleccionada de la figura. Hay que abrir la figura y utilizar los botones izquierdo yderecho del ratn. Para desactivarlo, habra que escribir >>zoom off.

    Ttulos y etiquetas

  • Ing. Alcides Ramos Calcina

    29

    MATLAB permite manejar correctamente las anotaciones sobre los grficos talescomo: ttulos, etiquetas, leyendas, etc.

    title(texto) Aade el texto como ttulo del grfico en la parte superiordel mismo en 2D y 3D.

    xlabel(texto) Sita el texto al lado del eje x en el grafico 2D y 3D.ylabel(texto) Sita el texto al lado del eje y en el grafico 2D y 3D.zlabel(texto) Sita el texto al lado del eje z en el grafico 3D.legend(cadena1,cadena2, )

    Sita las leyendas especificadas por las cadenas en ngrficos consecutivos.

    legend(off) Elimina las leyendas de los ejes actuales.text(x,y,text) Sita el texto en el punto (x,y) dentro del grfico 2D.text(x,y,z,text) Sita el texto en el punto (x,y,z) dentro del grfico 3D.gtext(text) Permite situar el texto en el punto seleccionado con el

    ratn dentro de un grfico 2D.

    Grafiquemos de la funcin 2 ( )y x sen x en el intervalo [-2,5] con las siguientescaractersticas (Figura 20): ttulo, rotulo de los eje, rejilla y rotulo de la funcin.

    >> x=-2:0.05:5;>> y=-x.^2+sin(x);>> plot(x,y,'-')>> text(2.7,-4,'y=-x^2+sin(x)')>> title('Grfico de y=f(x)')>> xlabel('X')>> ylabel('Y')>> grid on

    -2 -1 0 1 2 3 4 5-30

    -25

    -20

    -15

    -10

    -5

    0

    5

    y=-x2+sin(x)

    Grfico de y=f(x)

    X

    Y

    Figura 20.

    1.3. Grficos mltiples

    Se pueden dibujar tantas grficas como se quieran en una misma figura. Si yatenemos dibujada una, y generamos una nueva grfica, en principio la figura anteriores sustituida por la nueva. Sin embargo, utilizando el comando >>hold on, semantendr la anterior, con todas sus propiedades, y se podr dibujar encima unanueva. Para desactivar el comando anterior: >>hold off.

    plot(x,y,x,z) Grfica dos curvas con dos colores o tipos distintos.subplot(m,n,p) Divide la ventana grfica en mxn subventanas y coloca el

    grfico corriente en la ventana p-sima, empezando acontar por la parte superior izquierda y de izquierda aderecha hasta acabar la lnea.

    En el siguiente ejemplo se representan sobre los mismos ejes las grficas de lasfunciones 2( )y sen x e logy x , colocndose el texto de cada ecuacinadecuadamente dentro del grfico, as como el titular del grfico y de los ejes (Figura21).

  • MATLAB Fundamentos Bsicos para Ingenieria

    30

    >> x=linspace(0,2,30);>> y=sin(x.^2);>> plot(x,y)>> text(1,0.8,'y=sin(x^2)')>> hold on %mantiene la figura anterior>> z=log(sqrt(x));>> plot(x,z)>> text(1,-0.1,'y=log(sqrt(x))')>> xlabel('Eje X')>> ylabel('Eje Y')>> title('Grfico senoidal y logartmico')

    0 0.5 1 1.5 2-1.5

    -1

    -0.5

    0

    0.5

    1y=sin(x2)

    y=log(sqrt(x))

    Eje X

    Eje Y

    Grfico senoidal y logartmico

    Figura 21.

    Otra forma de hacerlo es dibujar desde el principio dos grficas juntas, por ejemplo,vamos a dibujar las grficas de las funciones ( )y sen x e 3( )y sen x en lamisma figura (22):

    >> x=linspace(0,2*pi,300);>> y=sin(x);

    >> z=sin(x+pi/3);>> hold off>> plot(x,y,'r-',x,z,'b--')>> legend('sin(x)','sin(x+pi/3)')>> xlabel('Eje de Abscisas')>> ylabel('Eje de Ordenadas')>> title('Grficas trigonomtricas')

    0 1 2 3 4 5 6 7-1

    -0.5

    0

    0.5

    1

    Eje de Abscisas

    Eje de

    Orde

    nada

    s

    Grficas trigonomtricas

    sin(x)sin(x+pi/3)

    Figura 22.

    En el ejemplo siguiente se presentan en el mismo grafico (Figura 23) las grficas delas funciones Sen(x), Cos(x), Cosec(x) y Sec(x), colocadas en una matriz de cuatrogrficos, de forma que debajo de cada funcin este su inversa para x en el intervalo de[-2,2].

    >> subplot(2,2,1);>> ezplot('sin(x)',[-2*pi,2*pi])>> subplot(2,2,2);>> ezplot('cos(x)',[-2*pi,2*pi])>> subplot(2,2,3);>> ezplot('csc(x)',[-2*pi,2*pi])>> subplot(2,2,4);

  • Ing. Alcides Ramos Calcina

    31

    >> ezplot('sec(x)',[-2*pi,2*pi])

    -5 0 5-1

    0

    1

    x

    sin(x)

    -5 0 5-1

    0

    1

    x

    cos(x)

    -5 0 5-505

    x

    csc(x)

    -5 0 5-505

    x

    sec(x)

    Figura 23.

    2. GRFICOS 3D

    MATLAB dispone de una gran variedad de formatos para dibujar grficas de funciones dedos variables y una componente. En general se emplean colores para resaltar las alturas, enuna gradacin tpica de clculo cientfico que escala las alturas del azul al rojo (de menor amayor).

    En el cuadro siguiente se presentan los comandos de MATLAB ms comunes en larepresentacin de grficos de lneas 3D.

    plot3(X,Y,Z) Dibuja el conjunto de puntos (x,y,z) en un sistema de 3D.plot3(X,Y,Z,s) Dibuja el conjunto de puntos (x,y,z) con las opciones

    definidas en s.fill3(X,Y,Z,c) Dibuja una regin poligonal cuyos vrtices son los

    elementos de los vectores columna x, y, z. El parmetro ccontiene el color a graficar.

    meshgrid(x,y) Crea arreglos bidimensionales a partir de los arreglos x ey, para elaborar la grfica de una superficie explicitaz=f(x,y).

    mesh(x,y,z) Representa una superficie explicita z=f(x,y) con losarreglos x, y e z.

    meshc(x,y,z) Representa una superficie explicita z=f(x,y) con losarreglos x, y e z; proyectando las curvas de nivel en elplano xy.

    meshz(x,y,z) Representa una superficie explicita z=f(x,y) con losarreglos x, y e z; cerrando la grfica con las fronteras deldominio.

    surf(x,y,z) Grfica una superficie explicita z=f(x,y) con los arreglos x,y e z; pintando cada una de las celdas.

    surfc(x,y,z) Grfica una superficie explicita z=f(x,y) con los arreglos x,y e z; proyectando las curvas de nivel en el plano xy.

    surfl(x,y,z) Grfica una superficie explicita z=f(x,y) con los arreglos x,y e z; considerando una iluminacin en formato bsico.

    waterfall(x,y,z) Grfica una superficie explicita z=f(x,y) en forma decascada.

    contour(x,y,z) Grfica las curvas de nivel de la superficie explicitaz=f(x,y).

    Nota: Cuando se van a emplear funciones de dos variables, necesitaremos cruzar una listade valores (x1, x2, , xn) con otra (y1, y2, , yn). Esto lo hace la orden meshgrid. Si:

    x = (x1, x2, , xn), y = (y1, y2, , yn)la instruccin

    [u v]=meshgrid(x,y)

    devuelve dos matrices con m filas y n columnas

  • MATLAB Fundamentos Bsicos para Ingenieria

    32

    1 2

    1 2

    1 2

    n

    n

    n

    x x x

    x x xu

    x x x

    1 2

    1 2

    1 2

    n

    n

    n

    y y yy y y

    v

    y y y

    As u(i,j) = xj y v(i,j) = yi, Recorriendo en paralelo las matrices u y v se obtienen, por tanto,todos los pares (xi, yj).

    Ejemplo:

    Representemos las hlice paramtrica x(t) = Sen(t), y(t) = Cos(t), z(t) = t para valores de tentre 0 y 10 separados /50 (Figura 24).

    >> t=0:pi/50:10*pi;>> plot3(sin(t),cos(t),t)>> grid on>> axis square

    -10

    1

    -1

    0

    10

    10

    20

    30

    40

    Figura 24.

    Ahora representaremos otra la funcin z = f(x,y) haciendo uso de los comandos siguientes(Figura 25):

    >> t=-6:0.2:8;>> x=t;>> y=3-t;>> z=cos(t);>> plot3(x,y,z)>> grid on

    -10 -50 5

    10

    -50

    510-1

    -0.5

    0

    0.5

    1

    Figura 25.

    A continuacin representamos un polgono compacto (Figura 26) mediante la siguientesintaxis:

    >> t=-6:0.2:8;>> x=t;>> y=3-t;>> z=cos(t);>> c=[1 0.8 0.1];>> fill3(x,y,z,c)>> grid on

  • Ing. Alcides Ramos Calcina

    33

    -10 -50 5

    10

    -50

    510-1

    -0.5

    0

    0.5

    1

    Figura 26.

    Representemos la superficie (Figura 27), cuya ecuacin explicita es la siguiente:

    2 22 2

    Sen x yz

    x y

    >> [x,y]=meshgrid(-7.5:0.5:7.5);>> z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2);>> surf(x,y,z)>> title('Grfico en 3D')

    Observacin: En los siguientes grficos simplificaremos el cdigo de la programacin:>> [x,y]=meshgrid(-2:0.2:2)

    en remplazo de:

    >> xa=-2:0.2:2;>> ya=-2:0.2:2;>> [x,y]=meshgrid(xa,ya);

    -10 -50 5

    10

    -100

    10-0.5

    0

    0.5

    1

    Grfico en 3D

    Figura 27.

    A continuacin representamos la superficie anterior acompaada de sus curvas de nivel(Figura 28).

    >> [x,y]=meshgrid(-7.5:0.5:7.5);>> z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2);>> surfc(x,y,z)>> title('Grfico en 3D - curvas de nivel')

    -10 -50 5

    10

    -100

    10-0.5

    0

    0.5

    1

    Grfico en 3D - curvas de nivel

  • MATLAB Fundamentos Bsicos para Ingenieria

    34

    Figura 28.Continuando con este ejemplo, representamos el grfico de malla (Figura 29).

    >> [x,y]=meshgrid(-7.5:0.5:7.5);>> z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2);>> mesh(x,y,z)>> title('Grfico en 3D - malla')

    -10 -50 5

    10

    -100

    10-0.5

    0

    0.5

    1

    Grfico en 3D - malla

    Figura 29.

    Y ahora lo representamos con la opcin de cortina o teln inferior (Figura 30) y leagregamos algunas caractersticas al grfico.

    >> [x,y]=meshgrid(-7.5:0.5:7.5);>> z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2);>> meshz(x,y,z)>> title('Grfico en 3D - frontera')>> xlabel('X')>> ylabel('Y')>> zlabel('Z')

    -10 -50 5

    10

    -100

    10-0.5

    0

    0.5

    1

    X

    Grfico en 3D - frontera

    Y

    Z

    Figura 30.

    Represente la superficie, su grfico de malla y su grfico de contorno cuya ecuacin es lasiguiente:

    2 2 9z x y con -3 < x, y < 3

    >> [x,y]=meshgrid(-3:0.2:3);>> z=x.^2-y.^2-9;>> surf(x,y,z)>> title('x^2-y^2-9')

    El grfico de la superficie (Figura 31) puede representarse tambin como sigue:

    >> ezsurf('x.^2-y.^2-9',[-2,2],[-2,2])

    El grfico de la malla (Figura 32) puede representarse como sigue:

    >> ezmesh('x.^2-y.^2-9',[-2,2],[-2,2])

  • Ing. Alcides Ramos Calcina

    35

    -2 -10 1

    2

    -20

    2

    -12

    -10

    -8-6

    x

    x2-y2-9

    yFigura 31.

    -2 -10 1

    2

    -20

    2-12-10-8-6-4

    x

    x2-y2-9

    yFigura 32.

    El grfico de contorno (Figura 33) puede representarse como sigue:

    >> [x,y]=meshgrid(-3:0.2:3);>> z=x.^2-y.^2-9;>> contour(x,y,z)>> title('Grfico de contorno de: z=x^2-y^2-9')

    Grfico de contorno de: z=x2-y2-9

    -3 -2 -1 0 1 2 3-3

    -2

    -1

    0

    1

    2

    3

    Figura 33.

    Y ahora visualizamos el grfico de contorno 3D y es como sigue (Figura 34):

    >> [x,y]=meshgrid(-3:0.2:3);>> z=x.^2-y.^2-9;>> contour3(x,y,z,20)>> title('Grfico de contorno con 20 niveles')

    Observacin: El parmetro m de contour(x,y,z,m) o de contour3(x,y,z,m), indica elnmero de niveles de contorno a graficar.

  • MATLAB Fundamentos Bsicos para Ingenieria

    36

    -20

    2-2

    02

    -20

    -15

    -10

    -5

    0

    Grfico de contorno con 20 niveles

    Figura 34.

    Finalmente representamos el grafico de cascada de la funcin anterior (Figura 35).

    >> [x,y]=meshgrid(-3:0.2:3);>> z=x.^2-y.^2-9;>> waterfall(x,y,z)>> title('Grfico de cascada de: z=x^2-y^2-9')

    -4 -20 2

    4

    -50

    5-20

    -15

    -10

    -5

    0

    Grfico de cascada de: z=x2-y2-9

    Figura 35.

  • Ing. Alcides Ramos Calcina

    37

    INTRODUCCIN

    Hasta el momento nos hemos ocupado del trabajo con MATLAB en modo interactivo, sinembargo como ya se ha comentado tambin es posible trabajar en modo programadoutilizando para ello los llamados mficheros. Estos son ficheros de texto con extensin .mque contienen instrucciones en MATLAB los cuales se ejecutan desde la pantalla decomandos (Command Window).

    Hay dos tipos elementales de mficheros:

    Los scripts estn formados simplemente por una serie de instrucciones en MATLABque se ejecutan como si estuviramos en modo interactivo;

    Las mfunciones son el equivalente en MATLAB a las subrutinas (procedimientos)de los lenguajes de programacin tradicionales.

    Hay distintas formas crear y/o editar un nuevo m-fichero, a continuacin explicamos cmose hara utilizando el editor de MATLAB (en un entorno WINDOWS), aunque podra

    emplearse cualquier editor de ficheros ASCII. Una primera forma de hacerlo seriaejecutando la orden

    >> edit

    De esta forma se abre una nueva ventana en la que podemos teclear el conjunto de rdenesen MATLAB por ejecutar (vase la Figura 36).

    Figura 36: Ventana de editor de texto.

    Otra forma de generar un nuevo mfichero sera siguiendo los siguientes pasos:

    1. seleccionar del men principal la opcin: File / New / Mfile (vase la figura 37)2. escribir el conjunto de instrucciones en MATLAB3. guardar el fichero (File / Save as... ) con extensin .m.

    Captulo 4

    Funciones y Ficheros

  • MATLAB Fundamentos Bsicos para Ingenieria

    38

    Podemos elegir la carpeta dnde guardarlo, por defecto se guarda en la carpeta workdentro de la carpeta de MATLAB. En general es conveniente guardar los ficheros en lacarpeta en la que se est trabajando. En caso contrario, para algunas situaciones queemplearemos posteriormente, hace falta modificar el llamado path, que indica al sistemaoperativo dnde buscar nuevos documentos.

    Figura 37.

    1. SCRIPTS

    Un script es un mfichero que agrupa una serie de instrucciones de MATLAB en el que nose requieren ni argumentos de entrada ni de salida y que permite la ejecucin repetidasveces de esas rdenes de una forma sencilla y sin ser necesario teclearlas en cada ocasin.En este tipo de m-ficheros se operan con variables declaradas en la pantalla de comandos.

    Para graficar la funcin sen(x) en el intervalo de [0, 2] editamos un script (siguiendo lospasos anteriores) llamado prueba.m con las siguientes instrucciones de MATLAB:

    prueba.m%Graficamos la funcion Sen(x)%Intervalo de x definido en [0,2*pi]x=0:0.1:2*pi;y=sin(x)plot(x,y,'r');grid ontitle('Grafica de la funcion Sen(x)')

    Guarde el archivo con algn nombre, ejemplo: prueba.m

    Para ejecutar el programa escriba en la ventana de comandos

    >> prueba

    El resultado de la ejecucin del script se puede visualizar en la Figura 38.

    Para editar un archivo de comandos, seleccione en la barra de herramientas de MATLAB laopcin: File / Open o seleccione el cono respectivo. En el archivo abierto en la ventana deedicin (Figura 39) haga los cambios y gurdelo nuevamente con el mismo nombre.

  • Ing. Alcides Ramos Calcina

    39

    0 1 2 3 4 5 6 7-1-0.8-0.6-0.4-0.2

    00.20.40.60.81

    Grafica de la funcion Sen(x)

    Figura 38.

    Figura 39.

    A la hora de programar es recomendable documentar los programas de forma que sefacilite su lectura. Ese es el objeto de las dos primeras lneas de comentarios del scriptraces. En ellas se aclara qu es lo que se hace concretamente, adems estas lneas seincorporan al sistema de ayuda de MATLAB, de modo que

    >> help pruebaGraficamos la funcion Sen(x)Intervalo de x definido en [0,2*pi]

    Con esta ejecucin del programa prueba.m se han generado dos nuevas variables, x e y. Lascuales pueden ser listadas con el comando whos

    >> whosName Size Bytes Class Attributes

    x 1x63 504 doubley 1x63 504 double

    Otra utilidad de los scripts es como fichero de datos o parmetros. Por ejemplo, creamos unmfichero llamado datos.m que contenga las siguientes rdenes de asignacin:

    datos.m% Fichero de datostiempo=[0:0.2:1];posicion=[1.3, 1.4, 1.2, 1.1, 1.0, 1.6];media=sum(posicion)/length(tiempo);disp(media) % Muestra en pantalla la media

    Al ejecutar en MATLAB

    >> datos1.2667

    Nos muestra en pantalla como resultado el valor de media y aparecen tres variables (en laventana Current Directory): tiempo (vector), posicion (vector) y media (escalar). Si yaexistan, se les asigna un nuevo valor. Si no, se crean nuevamente.

    2. FUNCIONES

  • MATLAB Fundamentos Bsicos para Ingenieria

    40

    Una cualidad de MATLAB es la de permitir generar nuestras propias funciones para unproblema especfico que queramos resolver. De esta forma ampliamos la potencia deMATLAB ya que estas nuevas funciones adaptadas a nuestras necesidades se puedenutilizar del mismo modo que las que ya tiene MATLAB predefinidas, como son porejemplo, det, rank, sum, ...

    El comando function permite la definicin de funciones a medida en MATLAB,constituyndose una de las aplicaciones ms tiles de los m-ficheros. La sintaxis de estecomando es la siguiente:

    function parmetros_salida = nombre_function(parmetros_entrada)cuerpo de la funcin

    Cuando los parmetros de salida son ms de uno, se sitan entre corchetes y separados porcomas. Si los parmetros de entrada son ms de uno, se separan por comas. El cuerpo de lafuncin es la sintaxis que la define, y debe incluir comandos o instrucciones que asignenvalores a los parmetros de salida.

    A continuacin se definir la funcin fun1(x)=x^3-2x+cosx, creando el correspondiente m-fichero de nombre fun1.m.

    Figura 40.

    Para guardar de forma definitiva dicha sintaxis en MATLAB se selecciona la siguientesecuencia de opciones: File / Save mediante la cual podemos guardar nuestra funcin conel nombre fun1.m.

    Una vez definida y guardada la funcin anterior en un m-fichero, se puede utilizar desde laventana de comandos.

    Por ejemplo, para hallar el valor de la funcin en 3/2 escribimos sobre la ventana decomandos:

    >> fun1(3*pi/2)

    ans =

    95.2214

    Aunque en este sencillo ejemplo se tienen un solo argumento de entrada y un soloargumento de salida, en general, se pueden tener o no varios argumentos de entrada comode salida. Veamos el siguiente ejemplo:

    mifuncion.mfunction f=mifuncion(x,y)% Definicin de una funcion con 2 variables de entradaf=y*(1-y)+x;

    Ejecutamos la funcin:

    >> mifuncion(0,1)ans =

    0

    >> mifuncion(3,2)ans =

    1

  • Ing. Alcides Ramos Calcina

    41

    Observamos que hay un cierto inconveniente con que la funcin no est vectorizada.Vamos a hacer un pequeo arreglo, vectorizamos para poder evaluar la funcin paravectores.

    mifuncion.mfunction f=mifuncion(x,y)% Definicin de una funcion con 2 variables de entradaf=y.*(1-y)+x;

    En este caso slo debemos vectorizar el producto (.*) pues la suma ya es una operacin quese realiza de forma vectorizada. Ahora si hacemos lo siguiente:

    >> mifuncion([0 3 4],[1 2 1])

    ans =

    0 1 4

    obtenemos un vector con el valor de la funcin en (0,1), (3,2) y (4,1), respectivamente.

    Ahora modifiquemos la funcin de tal forma que ahora calcule el promedio de los valoresde f.

    mifuncion.mfunction f=mifuncion(x,y)% Definicin de una funcion con 2 variables de entradaf=y.*(1-y)+x;promedio=sum(f)/length(x);return %opcional

    Ahora tenemos dos argumentos de salida, f y promedio. El primero de ellos siempre es undato que se devuelve. Para el segundo (y en general para los siguientes), podemos elegir sidevolverlos o no.

    >> valor=mifuncion([0 3 4],[1 2 1])

    valor =0 1 4

    >> [valor,media]=mifuncion([0 3 4],[1 2 1])

    valor =0 1 4

    media =1.6667

    Observa tambin que en esta ltima modificacin de mifuncion.m hemos aadido la ordenreturn con lo que se vuelve al modo interactivo. A diferencia de lo que ocurre con otroslenguajes de programacin esta instruccin no es necesaria al final de la definicin de lafuncin. Su empleo es comn cuando se quiere salir de la funcin si se cumple algn tipode condicin (lo veremos en la seccin sobre estructuras de programacin).

    No hay ningn problema en que una mfuncin llame a otra mfuncin, siempre que nose entre en un ciclo recursivo, es decir, que siguiendo el rastro de llamadas de una funcina otra funcin regresemos a la original. La recursividad existe en MATLAB pero hay quetratarla de una manera especial.

    3. VARIABLES LOCALES Y GLOBALES

    En la definicin de una funcin (al igual que en cualquier lenguaje de programacin) losnombres de las variables son mudos, es decir, se entienden y definen nicamente dentro delfichero, sin relacin con las variables exteriores. La nica excepcin la forman las variablesdeclaradas como globales en ambos contextos. Para ello es preciso definir las variablescomo globales con el comando global, cuya sintaxis es la siguiente:

    global x y z Define las variables x, y, z como globales

    Cualquier variable definida como global en el interior de una funcin es accesibleseparadamente para el resto de las funciones y para el espacio de trabajo base lnea decomandos. Es conveniente declarar una variable como global en cada funcin que necesiteacceso a ella, y tambin en la lnea de comandos, para tener acceso a ella desde el espaciode trabajo base. En el interior de las funciones el comando global se sita al principio(antes de cualquier ocurrencia de la variable).

  • MATLAB Fundamentos Bsicos para Ingenieria

    42

    Veamos esto con un ejemplo. Construimos y guardamos la siguiente funcin,completamente trivial. La instruccin a = 4 no hace nada relevante, ya que realiza unaasignacin interna que no se exporta.

    fun2.mfunction y=fun2(x)a=4;y=2*x;

    Ahora hacemos una prueba de ejecucin. En el contexto de la consola, 'a' es una variableglobal. No obstante, como sta no ha sido declarada as en la funcin fun2, ni el valor enconsola se importa a la funcin, ni el valor dentro de la funcin se exporta.

    >> global a>> a=[2 4];>> y=3;>> x=fun2(y)

    x =

    6

    >> a

    a =

    2 4

    Ahora cambiamos la funcin para que a sea variable global dentro de la funcin tambin.

    fun2.mfunction y=fun2(x)global aa=4;y=2*x;En este caso, tras ejecutar la funcin, el valor de la variable 'a' pasa a ser a=4.

    >> global a

    >> a=3;>> fun2(3.5)

    ans =

    7

    >> a % la ejecucion de fun2 ha cambiado el valor de a

    a =

    4

    Las variables globales son variables de entrada y salida simultneamente sin que aparezcanen ninguna de las dos listas (listas de argumentos de entrada ni de salida).Una utilidad tpica de las variables globales es poder transmitir listas largas de parmetrosde la consola a una subrutina o al revs, sin incluirlas en las definiciones de las funciones.

    Las variables globales se definen y emplean nicamente en el contexto donde estndeclaradas.

    Pueden estar perfectamente definidas en un grupo de mfunciones y no en la consola. Ental caso, no podemos acceder a su valor en consola, pero s en cualquier funcin que lasdeclare.

    Por ejemplo, adems de la funcin fun2 anterior, construimos otra funcin, llamada glob.

    glob.mfunction y=glob(x)global ay=a*x;

    En la siguiente cadena de ejecuciones (donde nos preocupamos de que a quede borrada enla consola), se ve claramente cmo se transmite el valor de a de una funcin a otra sin quepase por consola.

    >> clear a>> fun2(2); % a ha quedado declarado globalmente como a=4;>> a

  • Ing. Alcides Ramos Calcina

    43

    ??? Undefined function or variable 'a'.

    >> glob(3) % matemticamente glob(x)=a*x

    ans =

    12

    Al igual que todas las variables empleadas en una sesin estn almacenadas en la memoriaa la que se accede desde la consola (en el workspace), todas las variables globales estnalmacenadas en una memoria global a la que se puede acceder parcialmente a travs delcomando global

    4. TIPOS DE DATOS

    En MATLAB hay 14 tipos de datos diferentes que representan en la Figura 41.

    ARRAY char NUMERIC

    - int8, uint8, int16, uint16, int32, uint32- single- double

    sparse cell structure

    - user class function handle

    Figura 41.A continuacin se detallan los distintos tipos de datos:

    Tipo de dato Ejemplo Descripcinsingle 3*10^38 Precisin numrica simple.double 3*10^300

    5+6iDoble precisin numrica.

    sparse speye(5) Matriz dispersa con dobleprecisin

    int8, uint8,int16, uint16,int32, uint32

    Uint8(magic(3)) Enteros con y sin signoy con 8,16 y 32 bits de longitude.

    char hola Caracteres (cada carcter tieneuna longitud de 16 bits)

    cell {17 hola eye(2)} Celda (contiene datos de similartamao)

    structure a.day = 12a.color = red;a.mat = magic(3);

    Estructura (contiene datos desimilar tamao)

    user class Inline(sin(x)) Clase MATLAB (creada confunciones)

    java class Java.awt.Frame Clase Javafunction handle @humps Maneja funciones MATLAB

    5. GESTION DE FICHEROS

    La gestin de los mficheros se hace con los siguientes comandos

    Comando Descripcinedit nombrearchivo.m abre la ventana de edicin y el fichero indicado

    si el fichero no existe, se crea en blancoedit nombrearchivo (igual)type nombrearchivo.m visualiza en pantalla el contenido del fichero

    sin editarlo (as no se puede modificar)type nombrearchivo (igual)del nombrearchivo.m borra el mfichero indicado;

    requiere que no est abierto en la ventana deedicin

    what lista todos los mficheros en el directorio actualdir lista todos los archivos en el directorio actualls (igual)

  • MATLAB Fundamentos Bsicos para Ingenieria

    44

    cd muestra el directorio actualcd path cambia al directorio dado por pathwhich ejem muestra el directorio de ejem.m

  • Ing. Alcides Ramos Calcina

    45

    INTRODUCCIN

    La programacin en MATLAB se realiza bsicamente sobre archivos M o m-ficheros. Seles denomina de esta forma debido a su extensin .m.

    Estos archivos son simples archivos ASCII o scripts, y como tales, pueden ser creados ymodificados desde cualquier editor de texto comn; por ejemplo, el Bloc de Notas. ElMATLAB incluye un editor de archivos .m, (vistos en el capitulo anterior) orientado a laprogramacin sobre este software.

    1. ESTRUCTURAS DE CONTROL

    El uso de funciones recursivas, condicionales y definidas a trozos es muy habitual enmatemtica. Para la definicin de es te tipo de funciones es necesario el manejo de bucles.

    a. Instrucciones de Entrada y Salida

    Si la ejecucin de una funcin que est en un mfichero necesita de la introduccin dealgn dato, se puede realizar mediante la orden input.

    Por ejemplo, introducir un valor por teclado:

    a=input('Introduce el valor de a: ')

    solicita un dato que es introducido en la variable a. El dato puede ser de cualquier tipo,sea un escalar, una matriz, etc. La introduccin del dato se interrumpe una vez se pulsela tecla Enter, salvo que se hayan introducido puntos suspensivos antes.

    >> b=input('Matriz: ')Matriz: [3 2 1;... % no hemos terminado (puntos suspensivos)

    1 -1 2]

    b =

    3 2 11 -1 2

    Ahora ingresemos una variable de tipo texto (carcter), para esto tecleamos las comillasantes de introducir una variable carcter, ya que fijamos el tipo de la variable quepedimos a carcter ('s' hace referencia al tipo string).

    >> input('Nombre: ','s')Nombre: Juan

    ans =

    Juan

    Cuando se quiere escribir un mensaje en pantalla (salida) durante la ejecucin de unafuncin, se puede emplear

    >> disp('Mensaje')

    Captulo 5

    Programacin en Matlab

  • MATLAB Fundamentos Bsicos para Ingenieria

    46

    (disp es abreviatura de display). La funcin de disp admite como argumento unavariable de cualquier tipo. Nota hace diferencia.

    >> b=[1 3 5];>> disp(b)

    1 3 5

    Veamos a continuacin un ejemplo de la salida de ms de un resultado a pantalla:disp([valor1, valor2, ]);

    >> x=3^5;>> y=sqrt(x);>> disp([x,y])243.0000 15.5885

    Salida de resultados formateados a pantalla: fprintf(formatos, variables)

    >> x=3^5;>> y=sqrt(x);>> fprintf('%d %f',x,y)243 15.588457

    En la funcin fprintf podemos especificar cantidades de columnas y decimales:

    >> x=3^5;>> y=sqrt(x);>>fprintf('%5d %8.3f',x,y)243 15.588

    Otras especificaciones de formato puede verlas con help fprintf.

    La orden pause detiene la ejecucin del programa, hasta que se pulsa la tecla Enter.Como ya hemos mencionado, return interrumpe en esa lnea la ejecucin de la funcin,regresando a donde se la hubiera llamado.

    Finalmente, la funcin error('Mensaje') escribe el mensaje en pantalla y finaliza laejecucin del mfichero, regresando a donde se la hubiera llamado (la consola u otrafuncin). Es, por tanto, equivalente a un disp del mensaje y un return despus.

    Ahora veamos ejemplos con m-ficheros de ingreso y salida de informacin.

    ejemplo2.m%Ejemplo sencillo de instrucciones Salida - Entrada%Suma, diferencia, producto y divisin de dos nmerosa=input('Ingrese 1 nmero: ');b=input('Ingrese 2 nmero: ');sum=a+b;dif=a-b;prod=a*b;div=a/b;fprintf('%4d %4d %6d %8.3f',sum,dif,prod,div)

    En la ventana de comandos:

    >> ejemplo2Ingrese 1 nmero: 5Ingrese 2 nmero: 611 -1 30 0.833

    b. El bucle IF - ELSEIF ELSE - END

    Mediante esta estructura se pueden ejecutar secuencias de comandos si se cumplendeterminadas condiciones. La sintaxis del bucle es la siguiente:

    Condicin simple:

    if condicinsentencias o comandos

    end

    Condicin doble:

  • Ing. Alcides Ramos Calcina

    47

    if condicinsentencias1

    elsesentencias2

    end

    En este caso se ejecutan las sentencia1 si la condicin es cierta, y se ejecutan lassentencia2 si la condicin es falsa.

    Condicin anidada:

    if condicin1sentencias1

    elseif condicin2sentencias2

    elseif condicin3sentencias3

    elseend

    La sintaxis anidada anterior es equivalente a:

    if condicin1sentencias1

    elseif condicin2

    sentencias2else

    if condicin3sentencias3

    elseend

    end

    endVeamos un ejemplo el m-fichero de nombre mayor.m para mostrar el mayor entre dosnmeros:

    mayor.m% Ejemplo de decisin% Mayor de dos nmerosa=input('Ingrese el primer dato: ');b=input('Ingrese el segundo dato: ');if a>b

    resp=a;else

    resp=b;enddisp(resp);

    Ejecutando, tenemos:

    >> mayorIngrese el primer dato: 8Ingrese el segundo dato: 11

    11

    Ahora implementemos una funcin que determine si un nmero ingresado es par, imparo negativo.

    condicion.mfunction condicion(n)% Ejemplo de decisin anidada% Par, impar, postivo, negativoif n

  • MATLAB Fundamentos Bsicos para Ingenieria

    48

    >> condicion(8), condicion(-3), condicion(5),

    A =n es par

    A =n es negativo

    A =n es impar

    c. El bucle FOR

    La instruccin de repeticin ms empleada es for, que se utiliza para crear bucles.Nota, no obstante, que MATLAB permite hacer bucles implcitos gracias a la creacinautomtica de listas y a la sectorizacin de muchas operaciones. Esto permite quemuchas operaciones que en un lenguaje de programacin tradicional se realizaran conbucles, en MATLAB se pueden hacer mucho ms eficientemente sin ellos.

    La estructura de un for es:

    for variable = inicio:incremento:finsentencias

    end

    Como de costumbre si no ponemos el incremento, se toma el valor por defecto, que esla unidad. La lista

    for variable = inicio:fin

    se crea al inicio de la ejecucin del for y seguidamente se va recorriendo por lavariable. La lista puede ser de cualquier tipo de nmeros.

    Como ejemplo generes n nmeros de la sucesin de Fibonacci

    fibo.mfunction a=fibo(n)%Generar n trminos de la sucesin de Fibonaccia=ones(1,n); % reserva ya la memoria necesariafor i=3:n

    a(i)=a(i-1)+a(i-2);end

    Ahora para calcular unos cuantos trminos se ejecuta como sigue.

    >> fibo(3)ans =

    1 1 2

    >> fibo(12)ans =

    1 1 2 3 5 8 13 12 21 34 5589 144

    Veamos ahora un ejemplo en la cual utilizamos doble for, para definir una matriz deHilbert, de orden (m,n).

    matriz.mfunction A=matriz(m,n)% Definicin de una matriz de Hilbert a medidafor i=1:m

    for j=1:nA(i,j)=1/(i+j-1);

    endend

    Ejecutando:

    >> matriz(4,5)

  • Ing. Alcides Ramos Calcina

    49

    ans =

    1.0000 0.5000 0.3333 0.2500 0.20000.5000 0.3333 0.2500 0.2000 0.16670.3333 0.2500 0.2000 0.1667 0.14290.2500 0.2000 0.1667 0.1429 0.1250

    d. Bucle WHILE

    Esta sentencia permite ejecutar de forma repetitiva un comando o grupo de comandosun nmero determinado de veces mientras se cumple una condicin lgica. La sintaxisgeneral de este bucle es:

    while condicinsentencias

    end

    Implemente un m-fichero que permita calcular el mayor nmero cuyo factorial noexceda a 10100.

    mientras.m%Nmero cuyo factorial < 10^100n=1;while factorial(n)> mientras70

    La orden break se utiliza para terminar la ejecucin de los bucles for y while.Sale del bucle ms interno en el que est contenido.

    Una orden continue dentro de un conjunto de sentencias de un bucle pasadirectamente a la siguiente iteracin, sin completar el conjunto de sentenciaspara ese valor del iterador.

    e. SWITCH CASE

    La instruccin switch ejecuta ciertas sentencias basadas en el valor de uan variable oexpresin. Su sintaxis es:

    switch espresin (escalar o cadena)case valor1

    sentencias %Ejecuta si expresin es igual a valor1case valor2

    sentencias %Ejecuta si expresin es igual a valor2otherwise

    sentencias %Ejecuta si expresin no cumple%Ningn caso

    end

    A continuacin se presenta un ejemplo que devuelve -1, 0 1, u otro nmero segn laentrada.

    sele.mfunction sele(n)%Indica -1, 0, 1 u otro numeroswitch n

    case -1disp('menos uno');

    case 0disp('cero');

    case 1disp('uno');

    otherwisedisp('otro valor');

    endDespus ejecutamos varios casos:

  • MATLAB Fundamentos Bsicos para Ingenieria

    50

    >> sele(1)uno

    >> sele(15)otro valor

    2. SUBFUNCIONES

    Las funciones definidas mediante m-ficheros pueden contener cdigo para ms de unafuncin. La funcin principal en el m-fichero se denomina funcin primaria, que esprecisamente la funcin que invoca el m-fichero. Pero adicionalmente puede subfuncionescolgando de la funcin primaria y que slo son visibles para dicha funcin primaria o paraotra subfuncin dentro del mismo m-fichero. Cada subfuncin comienza con su propialnea de definicin de funcin.

    Como ejemplo, implementemos una funcin calcule la media y la mediana comosubfunciones.

    estat.mfunction [prom,med]=estat(u) %Funcin primaria% ESTAT calcula la media y la mediana como funciones internasn=length(u);prom=media(u,n);med=mediana(u,n);

    function a=media(v,n) % Subfuncion% Calcula la mediaa=sum(v)/n;

    function m=mediana(v,n) % Subfuncion% Calcula la medianaw=sort(v);if rem(n,2)==1

    m=w((n+1)/2);else

    m=(w(n/2)+w(n/2+1))/2;end

    En la ventana de comandos ejecutamos la funcin principal, basta darle su entradacorrespondiente (una lista de valores para los que se calcular su media y mediana) y lasllamadas a las subfunciones se realizan automticamente tal y como se ve a continuacin.

    >> [promedio,mediana]=estat([10,20,3,4,5,6])

    promedio =8

    mediana =5.5000

    3. ESTRUCTURA DE DATOS

    Una estructura de datos es una agrupacin de arrays del mismo tipo dentro de un arraysuperior. La idea bsica de una estructura de datos (existen en muchos lenguajes deprogramacin de alto nivel) es la de un fichero, donde cada ficha contiene varios registros.El nmero de registros por ficha es fijo y el tipo de registro guardado tambin, aunque en elcaso de que un registre guarde una matriz, distintas fichas pueden contener esos registroscon distinta longitud.

    Los siguientes ejemplos pueden emplearse para hacerse una idea de cmo funcionan lasestructuras de datos en MATLAB a su nivel ms bsico. La orden save puede guardarestructuras de datos

    Del m-fichero struc.m podemos hacer las siguientes observaciones:

    En cuanto se aade un segundo elemento con la misma estructura, una asignacinde la forma persona.nombre='Juancho' ya no funcionar.

    cat(1,persona(:).notas slo funcionara si las listas de notas tuvieran lamisma longitud, ya que intentamos pegar varias filas.

    struc.m

  • Ing. Alcides Ramos Calcina

    51

    %Ejemplo de una estructura de datos bsicapersona.nombre='Juancho';persona.edad=24;persona.notas=[10, 5.5, 7, 14];

    personapersona.notasmedia=sum(persona.notas)/length(persona.notas)pause% a\~{n}adimos una segunda personapersona(2).nombre='Fred';persona(2).edad=26;persona(2).notas=[4 5 2]; % puede tener otra longitudpersona(2)personadisp(persona(2).notas(3)) % tercera nota de la segunda personadisp('numero de elementos'),length(persona)pausepersona(:).edad % son varias respuestas; no un arrayedades=cat(1,persona(:).edad) % lista de edades (hay que pegar)edades=cat(2,persona(:).edad) % 2=en horizontalcalificaciones=cat(2,persona(:).notas) % horizontal

    Ejecutando, tenemos:

    >> struc

    persona =nombre: 'Juancho'edad: 24notas: [10 5.5000 7 14]

    ans =

    10.0000 5.5000 7.0000 14.0000

    media =9.1250

    ans =

    nombre: 'Fred'edad: 26notas: [4 5 2]

    persona =1x2 struct array with fields:

    nombreedadnotas2

    numero de elementosans =

    2ans =

    24ans =

    26

    edades =2426

    edades =24 26

    calificaciones =

    10.0000 5.5000 7.0000 14.0000 4.0000 5.00002.0000