Guia Rapida Para Matlab y Simulink

Embed Size (px)

DESCRIPTION

Libro dedicado para el aprendizaje y el adiestramiento en el programa de matlab

Citation preview

  • INTRODUCCIN RPIDAA MATLAB Y SIMULINK

    PARA CIENCIA E INGENIERA

  • MANUEL GIL RODRGUEZCientfico Titular del Consejo Superiorde Investigaciones Cientficas (CSIC)

    INTRODUCCIN RPIDAA MATLAB Y SIMULINK

    PARA CIENCIA E INGENIERA

  • Manuel Gil Rodrguez, 2003

    Reservados todos los derechos.

    No est permitida la reproduccin total o parcial de este libro,ni su tratamiento informtico, ni la transmisin de ningunaforma o por cualquier medio, ya sea electrnico, mecnico,por fotocopia, por registro u otros mtodos, sin el permisoprevio y por escrito de los titulares del Copyright.

    Ediciones Daz de Santos, S. A.Doa Juana I de Castilla, 22.28027 MADRID

    E-mail: [email protected]://http:www.diazdesantos.es/ediciones

    ISBN: 84-7978-596-9Depsito legal: M. 43.971-2003

    Diseo de cubierta: Angel CalveteFotocomposicin e impresin: Fernndez Ciudad, S. L.Encuadernacin: Rstica-Hilo, S. L.Impreso en Espaa

  • Presentacin ...........................................................................................

    1. PRIMEROS PASOS EN MATLAB ................................................1.1. Introduccin ...........................................................................1.2. Comenzando ..........................................................................1.3. Espacio de trabajo ..................................................................1.4. Variables ................................................................................1.5. Formato de nmeros ..............................................................1.6. Programas ...............................................................................1.7. Funciones ...............................................................................

    1.7.1. Reglas de construccin de funciones ..........................1.7.2. Funciones en lnea ......................................................1.7.3. Ejemplo de funcin recursiva .....................................

    1.8. Nmeros complejos ...............................................................1.9. Manejo de vectores y matrices ...............................................1.10. Polinomios ..............................................................................

    1.10.1. Multiplicacin y divisin de polinomios ..................1.10.2. Desarrollo en fracciones simples ..............................1.10.3. Derivadas de polinomios ..........................................1.10.4. Integracin de polinomios ........................................1.10.5. Interpolacin polinomial............................................

    1.11. matlabpath ..............................................................................1.12. lookfor.....................................................................................1.13. LATEX ...................................................................................1.14. Funciones del tiempo .............................................................1.15. Intercambio de datos ..............................................................

    VII

    ndice

    XI

    111235789

    111112131616171718181919192021

  • 2. CLCULO SIMBLICO ...............................................................2.1. Introduccin ...........................................................................2.2. Objetos y expresiones simblicas ..........................................2.3. Ejemplos de clculo simblico ..............................................

    2.3.1. Derivadas e integrales .................................................2.3.2. Sistemas de ecuaciones ...............................................2.3.3. Ecuaciones diferenciales..............................................

    2.4. Transformacin de Laplace e inversa ....................................2.5. Lmites ...................................................................................2.6. Series de Taylor y Mac Laurin ..............................................2.7. Invocando a Maple V..............................................................

    2.7.1. Transformacin de Laplace e inversa con Maple V ....2.7.2. Resolucin de ecuaciones diferenciales con Maple V.2.7.3. Resolucin de ecuaciones diferenciales con la trans-

    formacin de Laplace ..................................................

    3. SENTENCIAS DE CONTROL DE FLUJO ...................................3.1. input .......................................................................................3.2. if - else - end ..........................................................................3.3. while - end .............................................................................3.4. for - end ..................................................................................3.5. continue ..................................................................................3.6. break .......................................................................................3.7. switch end ...............................................................................

    4. GRFICOS EN MATLAB .............................................................4.1. Tipos de grficos ....................................................................4.2. Utilidades de grficos ............................................................4.3. TEXtos en grficos ................................................................4.4. LaPrint ...................................................................................4.5. Estilos de lneas, marcas y colores .........................................4.6. area .........................................................................................

    5. APLICACIONES DE CLCULO NUMRICO.............................5.1. Integracin numrica .............................................................5.2. Mnimos, ceros y optimizacin...............................................

    5.2.1. Mnimos y ceros de funciones ....................................5.2.2. Resolucin de ecuaciones no lineales .........................5.2.3. Minimizacin y ajuste de datos ..................................

    5.3. Integracin numrica de ecuaciones diferenciales .................5.3.1. Mtodo de Runge-Kuta ...............................................

    5.4. Modelo dinmico de un tanque ..............................................5.5. Determinacin de retrasos y derivadas ..................................5.6. Ajuste de datos experimentales a una recta ...........................

    VIII NDICE

    25252527272829303131313132

    33

    3535363838404040

    41414445454748

    5151515152535759626772

  • 5.6.1. Ajuste de funciones no lneales por linealizacin .......5.7. Anlis Espectral .....................................................................5.8. Evitando la divisin por cero y rebose ...................................

    6. SIMULINK ......................................................................................6.1. Introduccin a Simulink .........................................................6.2. Construccin de un modelo muy sencillo ..............................6.3. Solucin Simulink de una ecuacin diferencial .....................6.4. Simulacin dinmica de un ecualizador ................................

    BIBLIOGRAFA .....................................................................................NDICE ALFABTICO ..........................................................................

    NDICE IX

    747880

    8181858688

    93

    95

  • MatLab (MATrix LABoratory) comenz siendo un programa interactivo deanlisis integrado, especializado en clculos matriciales. En muy poco tiempotuvo una gran difusin, facilitado por su potencia de clculo y facilidad de uso.

    La primera versin de MatLab, de xito generalizado, se lanz el 3 de fe-brero de 1989 para MS-DOS, Mac y Workstations, era la versin 3.5 y vena entres discos de 5 1/4, estaban disponibles las toolboxes de Signal Processing,Control Systems, System Identification, State-Space Identification, Robust-Control, Spline, Chemometrics y Optim.

    MatLab incluye funciones elementales de clculo, de Bessel, de complejos,transformadas e inversas de Laplace y Fourier, filtros para procesado de sea-les, Max, Min, Sum, Product, Cumulative, Cumulative Product, Mean, Median,Sort... Las funciones matriciales incluyen el determinante, el inverso, valores yvectores propios, descomposiciones, factorizaciones...

    Desde las primeras versiones, MatLab dispona de potentes herramientas derepresentaciones grficas, ya en 2-d como 3-d, que en el transcurso de las su-cesivas versiones se vieron muy potenciadas, permitiendo exportar los cuadrosgrficos a otras aplicaciones.

    Esta obra abarca lo esencial de MatLab y Simulink, que ya no cambian conlas versiones que van saliendo. Est especialmente indicada para alumnos deCiencias, Ingeniera, Postgrado o profesionales que deseen familiarizarse, en untiempo mnimo con las principales herramientas de clculo suministradas porMatLab a travs de ejercicios prcticos a lo largo de este manual.

    Manuel GIL RODRGUEZ

    XI

    Presentacin

  • 1.1. INTRODUCCINMatLab, desde las primeras versiones dispuso de help y demo, para ini-

    ciacin rpida. La informacin suministrada a travs de los mens de estas ayu-das, correspondientes a las ltimas versiones, crecieron de forma exponen-cial, siendo de utilidad prctica disponer de un libro resumen de MatLab, endonde se encuentren los comandos de uso ms frecuente, a la vez que se mues-tren sus aplicaciones prcticas en ejercicios, desde lo ms sencillo, hasta otrosde mayor complejidad.

    Este Captulo es adecuado para principiantes absolutos, y de afianzamientoa los ya iniciados.

    1.2. COMENZANDO

    Al arrancar MatLab, presenta una pantalla dividida en varias ventanas,configurables desde Desktop Layout del menu de View; en una de las ven-tanas estar el cursor parpadeando a la derecha de >>, es la ventana de co-mandos desde donde se ejecutan los mismos, las otras son informativas:>> 3 + 4ans =

    7>> 3*5ans =

    15>> 15/3 ans =

    5

    1

    1Primeros pasos en MatLab

  • >> 15\3 ans =

    0.2000>> 23 ans =

    8>> sin(2*pi*30/360) ans =

    0.5000

    2 INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

    Figura 1.1. Ventanas de MatLab.

    1.3. ESPACIO DE TRABAJO

    Los datos y variables usadas residen en el espacio de trabajo, workspace,accesible desde la ventana de comandos. Para inspeccionar el contenido de esteespacio se utilizan los comandos who y whos.

    Los archivos directamente accesibles desde el espacio de trabajo, se mues-tran mediante what. En el siguiente ejemplo se muestran sus caractersticas:>> t = linspace(1,10,4) % Crea un vector de 4 elementos desde

    % 1 a 10.t =

    1 4 7 10

  • >> t = t(:) % Crear el vector t en columna.t =

    147

    10

    >> A = 2*t; B = 2; >> who

    Your variables are:

    t A B

    >> whos

    Name Size Bytes Classt 1 4 32 double arrayA 1 4 32 double arrayB 1 l 8 double array

    Grand total is 9 elements using 72 bytes

    >> what

    M-files in the current directory D:\MatLab\workAjusNL Datos EcudifP AjusN1Fun Ecudif Fun MAT-files in the current directory D:\MatLab\workDatosMDL-files in the current directory D:\MatLab\work Bcont Bfuntab BnoLineal Bsesis Bfuentes Bmat Bsalidas Ecu2

    En el espacio de trabajo se crearon 3 variables, 2 de 4 elemenos, y una de 1elemento, de modo que son 9 elementos a 8 bytes por elemento, lo que hace untotal de 72 bytes.

    A partir de la versin 6, release 12, MatLab incorpor workspace, po-tenciando la capacidad de whos.

    1.4. VARIABLES

    En MatLab no es necesario hacer declaraciones previas acerca de las va-riables. El contenido de las variables de caracteres ha de ir delimitado por elsigno '.

    >> numero_de_visitantes = 25

    numero_de_visitantes =

    25

    PRIMEROS PASOS EN MATLAB 3

  • De ese modo se crean variables numricas, numero_de_visitantes,que almacenan su valores en una matriz, en este caso la matriz es de 1 1, y suvalor es 25.

    size(numero_de_visitantes) % Dimensin de variables.

    ans =

    1 1

    Nombre='Pepe'; % Variable de caracteres. size (Nombre)

    ans =

    1 4

    Los nombres de las variables deben seguir estas reglas:

    1. Se forman con las letras del abecedario, los dgitos 0 a 9 y el signo _,distinguindose maysculas de minsculas.

    2. Los nombres de las variables han de comenzar por una letra y no debencontener espacios en blanco.

    3. Los nombres de las variables no pueden coincidir con los nombres de laskeywords, nombres reservados.

    La lista de los nombres reservados se obtiene por medio de iskeyword:

    iskeyword

    ans =

    'break''case''catch''continue''else''elseif''end''for''function''global''if''otherwise''persistent''return''swirch''try''while'

    4 INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

  • >> if = 5??? if = 5

    Error: Expected a variable, function, or constant, found=.

    Los nombres de las variables pueden ser tan extensos como se quiera, peroMatLab slo reconoce los 31 primeros caracteres.

    Las variables se eliminan del espacio de trabajo con el comando clear:clear Elimina las variables del espacio de trabajo.clear variables Es equivalente al comando anterior.clear global Elimina las variables globales.clear functions Elimina todas las funciones compiladas.clear all Elimina todas las variables, globales y funciones.clear pipo* Elimina las variables que empiezan por pipo.

    MatLab suministra amplia informacin adicional mediante help clear.

    1.5. FORMATO DE NMEROSMatLab presenta los resultados numricos en varios formatos, segn se ex-

    presa a continuacin:

    >> help format

    FORMAT Set output format. All computations in MATLAB are done in double precision. FORMAT may be used to switch between different output display formats as follows:

    FORMAT Default. Same as SHORT. FORMAT SHORT Scaled fixed point format with 5 digits. FORMAT LONG Scaled fixed point format with 15 digits. FORMAT SHORT E Floating point format with 5 digits.FORMAT LONG E Floating point format with 15 digits.FORMAT SHORT G Best of fixed or floating point for-

    mat with 5 digits.FORMAT LONG G Best of fixed or floating point format

    with 15 digits.FORMAT HEX Hexadecimal format.FORMAT + The symbols +, and blank are printed

    forpositive, negative and zero elements. Imaginary parts are ignored.

    FORMAT BANK Fixed format for dollars and cents.FORMAT RAT Approximation by ratio of small integers.

    Spacing:FORMAT COMPACT Suppress extra line-feeds.FORMAT LOOSE Puts the extra line-feeds back in.

    PRIMEROS PASOS EN MATLAB 5

  • Al mostrar resultados numricos, MatLab sigue estas dos reglas:

    1. MatLab intenta mostrar nmeros enteros. Si el entero es muy grande, sepresenta en formato exponencial, con 5 cifras significativas.

    2. Los nmeros con decimales se muestran con 4 o 5 cifras significativas.Los nmeros en valor absoluto menores de 0,01 y mayores de 1.000, semuestran en formato exponencial.

    A continuacin se muestran ejemplos demostrativos de formatos numri-cos:

    >> sqrt(2)

    ans =

    1.4142

    >> format long >> sqrt(2)

    ans =

    1.41421356237310

    >> format Long e >> sqrt (2)

    ans =

    1.41421356237310e+00

    >> format short >> A= [10000 0.0001]

    ans =

    1. 0e+04 *1.0000 0.0000

    >> format short g >> A

    A =

    10000 0.0001 >> format rat >> A

    A =

    10000 1/10000

    6 INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

  • 1.6. PROGRAMAS

    MatLab acepta comandos directos, para inmediatamente producir el resul-tado o ejecutar una serie de comandos almacenados en un archivo, con la ex-tensin .m.

    Un archivo.m, consiste en una secuencia de sentencias MatLab, posible-mente incluyendo referencias a otros archivo.m, o recursivamente a s mismo.A estos archivos los llamamos programas MatLab, en ingls scripts. Las va-riables de los programas se mantienen en el espacio de trabajo, pudiendo ser in-vocadas en cualquier momento para ver su contenido.

    En una sentencia, lo que sigue a % no se ejecuta, se considera un comenta-rio.

    Si se desea construir una tabla con inversos, cuadrados y races cuadradasde 1 a 10, se edita un archivo, Numeros.m, con cualquier editor, tal como el bloc de notas del sistema operativo, o con el editor propio de MatLab, se-gn:

    % ----------------Numeros.m -----------------------------------x=1:10; % Crea un vector de 1 a 10 de 1 en 1. Vector en l-nea.x=x'; % Transposicin. Vector en columna.x=[x,1../x,x.2,sqrt(x)]; % Matriz de 4 columnas.% ------------------------------------------------------------

    El programa se invoca ejecutando Numeros. Como en el programa todaslas sentencias se finalizaron con ;, no se muestra ningn valor numrico. Alejecutar x, se obtendr la tabla desada:>> Numeros>> x

    x =

    1.0000 1.0000 1.0000 1.00002.0000 0.5000 4.0000 1.41423.0000 0.3333 9.0000 1.73214.0000 0.2500 16.0000 2.00005.0000 0.2000 25.0000 2.23616.0000 0.1667 36.0000 2.44957.0000 0.1429 49.0000 2.64588.0000 0.1250 64.0000 2.82849.0000 0.1111 81.0000 3.0000

    10.0000 0.1000 100.0000 3.1623

    Pulsando la tecla , se consiguen las lneas de los comandos previamenteejecutadas.

    PRIMEROS PASOS EN MATLAB 7

  • 1.7. FUNCIONES

    El otro tipo de archivos utilizado por MatLab son las funciones, cuya pri-mera caracterstica es que sus variables son locales en su entorno y no definidasen el espacio de trabajo, ni en otras funciones.

    Buena parte de la potencia de MatLab se basa en su extenso conjunto defunciones, las bsicas y las distribuidas de forma separada para aplicaciones es-pecficas, MatLab toolboxes, y otras que desarrollan los usuarios.

    Las funciones toman unas variables de entrada para calcular unos datos desalida, sea:

    almacenado en el archivo Fun.m, cuyo contenido es:

    function y=Fun(x)% -----------------Fun.m --------------% Esto es un ejemplo% de una funcin.y=1../((x1).2+0.1)+1../((x3).2+0.2)5;%-------------------------------------

    Para evaluar Fun grficamente, se lanza con las siguientes instrucciones:

    >> x=2:0.01:6; % Vector de 2 a 6, a incrementos de 0,01. >> y=Fun(x); % Guardando el vector Fun(x) en y. >> plot(x,y),grid % Representacin con rejilla.

    En Fun(x), x es el argumento o entrada de Fun, para dar unos resultadosde salida que se almacenan en y, que se muestran grficamente.

    Hay funciones del sistema o construidas por un usuario, que toman diferen-te nmero de argumentos de entrada que de salida. As la funcin max, toma unvector de argumentos y puede suministrar una o dos salidas, segn se use:

    >> A = [1 2 1 5 2 3];>> max(A) % Suministrar el valor mximo de A.ans =

    5

    >> [X, i] = max(A) % X, valor mximo, i posicin del mximo.

    X =

    5

    i =

    4

    Fun xx x

    ( ) ( ) , ( ) ,= + + + 1

    1 0 11

    3 0 252 2

    8 INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

  • 1.7.1. Reglas de construccin de funciones

    1. El nombre de la funcin y del archivo deben ser idnticos.2. Los nombres de las funciones se rigen por las normas de los nombres de

    las variables.3. La primera lnea ejecutable de una funcin debe ser la lnea de declara-

    cin de funcin.4. Las variables del interior de las funciones son variables locales.5. El conjunto de lneas consecutivas de comentarios que siguen a func-

    tion, componen el texto de ayuda de esa funcin, obtenible median-te help y lookfor.

    >> help Fun----------------Fun.m -------------

    Esto es un ejemplo de una funcin.

    6. Una funcin termina al encontrar un retun o al llegar a la ltima lneade la funcin.

    7. Si una funcin llama a un programa, ste es evaluado en el espacio detrabajo de la funcin y no en el workspace de MatLab.

    8. Cada funcin tiene su espacio de trabajo separado del de MatLab, demodo que la conexin entre estos ambientes se realiza a travs de las va-riables de entrada y salida de la funcin.

    PRIMEROS PASOS EN MATLAB 9

    2 1 0 1 2 3 4 5 66

    4

    2

    0

    2

    4

    Figura 1.2. Representacin grfica de Fun.

  • 9. Para compartir variables del interior de las funciones y del espacio detrabajo, se declaran variables globales donde se necesiten mediante lainstruccin global.

    >> global X a b % Declaracin de variables globales

    Para facilitar el manejo de funciones, MatLab incorpor recientemente @, yfeval, para mejorar eval, cuya utilidad se expone en el siguiente ejemplo:>> F = @Fun % Creacin directa de F.

    F =

    @Fun>> feval(F,2)

    ans =

    -3.2576

    Se consigue el mismo resultado con:>> eval('Fun(2)')

    ans =

    -3.2576>> Fun(2)

    ans =

    -3.2576>> F(2)=@cos % Creacin directa de F(2).

    F =

    @Fun @cos

    La eficiencia de feval es considerablemente superior a eval, ya que elprimero evala directamente lo que se invoca, mientras que eval llama al in-terpretador completo de MatLab. La diferencia en tiempo de ejecucin de am-bas funciones se pone de manifiesto con: >> tic, for i = 1:100000, a = eval('Fun(i)'); end, toc

    elapsed_time =

    14.3210

    >> tic, for i = 1:100000, a = feval('Fun',i); end, toc

    elapsed_time =

    4.0960

    10 INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

  • 1.7.2. Funciones en lnea

    Un segundo modo de definir funciones, sin editar archivos, se logra coninline:

    >> syms x y >> f = inline('x.2 + y.2')

    f =

    Inline function:f(x) = x.2 + y.2

    >> f(3,4)

    ans =25

    >> feval(f,3,4)

    ans =

    25

    1.7.3. Ejemplo de funcin recursivaEn muchas aplicaciones se presenta la recursividad, funcin que en su in-

    terior se llama a s misma. El ejemplo ms secillo de recursividad es el clculodel factorial de un nmero:

    N! = N (N 1)!definiendo 1! como 1.

    La funcin Factorial.m, toma un nmero de entrada, y suministra como sa-lida su factorial:function f = Factorial(N) % Esta funcin calcula el factorial de la parte% entera de un nmero. n = fix(N); % n toma la parte entera de N. if n > 1

    f = n*Factorial(n 1);else

    f = 1; end

    Esta sencilla funcin toma un nmero y calcula el factorial de su parteentera.

    >> Factorial(3.3)

    ans =

    6

    PRIMEROS PASOS EN MATLAB 11

  • 1.8. NMEROS COMPLEJOSMatLab admite operaciones con nmeros complejos, permitiendo usar in-

    distintamente la i y la j, segn se muestra en lo siguiente: >> a = sqrt(1)

    a =

    0 + 1. 0000i

    >> conj(a)

    ans =

    0 1.0000i

    >> sqrt(a)

    ans =

    0.7071 +0.7071i

    >> exp(2i)

    ans =

    -0.4161 + 0.9093i

    >> A = (3 + 4i)*(2 j)

    A =

    10. 0000 + 5.0000i

    >> r = real(A)

    r =

    10>> I = imag(A)

    I =

    5>> r = abs(A)

    r =

    11.1803

    >> Angulo = angle(A)

    12 INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

  • Angulo =

    0.4636

    >> Angulo = atan2(imag(A),real(A))

    0.4636

    >> Aa = r*exp(Angulo*i)

    Aa =

    10.0000 + 5.0000i

    1.9. MANEJO DE VECTORES Y MATRICES

    La forma ms sencilla de crear un vector es mediante el uso de [], vectoren lnea, o con []', vector en columna. Los elementos se separan por espacioso comas, el ; se reserva para anexar en columna:

    >> t = [3 5 7, 8, 9]

    t =

    3 5 7 8 9

    Tambin se generan vectores mediante las instrucciones linspace ylogspace, ambos con dos o tres argumentos, y con :, ya mencionado:

    >> x = logspace(0,2,5) % Vector de 5 componentes de 100 a102.

    x =

    1.000 3.1623 10.0000 31.6228 100.000

    Con el siguiente ejemplo se muestra la creacin y manejo de matrices:>> x = 0:4

    x =

    0 1 2 3 4

    >> y = x.2 % El punto antes del exponente% hace que la exponenciacin

    y = % sea elemento a elemento.0 1 4 9 16

    >> a = [x;y] % Crear una matriz anexando% vectores.

    PRIMEROS PASOS EN MATLAB 13

  • a =

    0 1 2 3 40 1 4 9 16

    >> A = a' % Crear la matriz A, transpues-% ta de a.

    A =

    0 01 12 43 94 16

    B = [A; 5 25] % Aadir una lnea a una ma-% triz.

    B =

    0 01 12 43 94 165 25

    >> C = reshape(B,3,4) % Reconfigurar la matriz B% con 3 lneas y 4 columnas.

    C =

    0 3 0 91 4 1 162 25 4 50

    >> C(2,:)=[] % Eliminar la 2a lnea. Los% dos puntos indican para

    C = % todos los valores de esa% dimensin.

    0 3 0 92 25 4 50

    >> C(:,3) = [] % Eliminar la 3a columna,% 0 4.

    C =0 3 92 25 50

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

    1 23 5

    14 INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

  • >> A2 % Diferencia entre y .

    ans =

    7 1218 31

    >> A.2

    ans =

    1 49 25

    >> 1../A

    ans =

    1.0000 0.50000.3333 0.2000

    >> det(A)

    ans =

    -1

    >> inv(A)

    ans =

    -5.0000 2.00003.0000 -1.0000

    Las exponenciaciones, elemento a elemento y matricial, tambin se realizancon los comandos power y mpower, segn:

    >> x =[2 3 4];>> y = power(x,2) % Equivalente a y = x.2

    y =

    4 9 16

    >> x = [2 3;1 4];>> y = mpower(x,2) % Equivalente a y = x2y

    7 186 19

    PRIMEROS PASOS EN MATLAB 15

  • 1. 10. POLINOMIOS

    Sea el polinomio p = x2 5x + 6, con vector de coeficientes C:

    >> C = [1 -5 6];

    Las races de este polinomio se obtienen, mediante:

    >> r = roots(C)

    r =

    32

    poly sobre las races devuelve los coeficientes del polinomio:

    >> poly(r)

    ans =

    1 -5 6

    polyval evala el polinomio sobre un valor:

    >> polyval(C,5)

    ans =

    6

    1.10.1. Multiplicacin y divisin de polinomios

    La multiplicacin de dos polinomios, Pol1 = x2 + 2x + 3 por Pol2 = x 1,se efecta por medio de conv:

    >> Pol1 = [1 2 3];>> Pol2 = [1 -1]; >> PolProd = conv(Pol1,Pol2)

    PolProd =1 1 1 -3

    Cuyo resultado equivale a x3 + x2 + x 3. La divisin de polinomios se realiza mediante deconv:

    >> PolDiv = deconv(PolProd,Pol2)

    PolDiv =1 2 3

    16 INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

  • 1.10.2. Desarrollo en fracciones simples

    Mediante residue, aplicado a dos polinomios, se obtienen fraccionessimples, cuya suma es equivalente al cociente de los polinomios:

    >> P1 = [5 -20 9]; >> P2 = [1 -5 4]; >> [r,s,t] = residue(Pl,P2) r =

    32

    s =41

    t =5

    Representando r, un vector columna con los numeradores de las fracciones,s las races de cada denominador, y t los coeficientes del trmino indepen-diente:

    Si se conocen los numeradores, las races de los denominadores y los tr-minos independientes, se pueden generar los polinomios:

    >> [p1,p2] = residue(r,s,t)p1 =

    5 -20 9

    p2 =1 -5 4

    Siendo p1 y p2, los polinomios obtenidos, con los numeradores, races ytrminos independientes.

    1.10.3. Derivadas de polinomios

    Las derivadas de los polinomios se obtienen con polyder:

    >> derp1 = polyder(p1) derp1 =

    10 - 20

    es decir, 10x 20

    5 20 9

    5 4

    34

    21

    52

    2

    x x

    x x x x +

    +=

    +

    +

    PRIMEROS PASOS EN MATLAB 17

  • 1.10.4. Integracin de polinomios

    La integral de un polinomio se obtiene mediante polyint(p), o conpolyint(p,C); en el primer caso se supone que la constante de integracines 0, y en el segundo C:

    >> polyint(p2)

    ans =

    0.3333 -2.5000 4.0000 0

    >> polyint(p2,2)

    ans =

    0.3333 -2.5000 4.0000 2.0000

    Equivalente a:

    1.10.5. Interpolacin polinomial

    Matlab permite varios modos de interpolacin, relacionados y descritosen help interp1; a continuacin se muestran unos ejemplos:>> x = [2 4 6];>> y = power(x,2); % Por defecto se utiliza el mto-do de>> y5 = interp1(x,y,5) % interpolacin lineal.

    y5 =

    26

    >> y5c = interp1(x,y,5,'cubic') % Interpolacin cbica.

    y5c =

    24.8750

    >> y5s = interp1(x,y,5,'spline')

    y5s =

    25

    13

    52

    4 23 3x x x + +

    18 INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

  • 1.11. matlabpath

    El path de MatLab, llamado matlabpath, establece el camino parabuscar variables, programas y funciones de MatLab que sean llamados direc-tamente desde la ventana de comandos, o durante la ejecucin de programas.

    Al invocar un comando, MatLab lo busca, y ejecuta el que primero coinci-da con el nombre invocado, segn el siguiente orden:

    1. Si es una variable del workspace.2. Si es una funcin incorporada.3. Si es un archivo.m presente en el directorio actual.4. Lo busca siguiendo el orden establecido en matlabpath.

    El comando which, aplicado sobre una funcin muestra su ruta:

    >> which Fund:/MatLab6p5/work/Fun.m

    1. 12. lookfor

    lookfor aplicado a una variable de caracteres, busca esos caracteres en laprimera lnea de comentarios de los archivo.m encontrados en el matlab-path.

    >> lookfor Fun.mFun.m: %---------------- Fun.m --------------------

    1.13. LATEX

    La funcin latex(A) devuelve la representacin LATEX de una expresinsimblica:

    >> syms x>> A = taylor(exp(x))

    A =1 - x + 1/2*x2 - 1/6*x3 + 1/24*x4 - 1/120*x5

    >> pretty(A)2 3 4 5

    1 - x + 1/2 x - 1/6 x + 1/24 x - 1/120 x

    >> latex(A)ans =1 - x + 1/2\,{x}{2}-1/6\,{x}{3}+1/24\,{x}{4}-{\frac{1}{120}}\,

    {X}^{5}

    PRIMEROS PASOS EN MATLAB 19

  • 1.14. FUNCIONES DEL TIEMPO

    MatLab suministra datos relacionados con el tiempo, como una variable decaracteres, 12-Oct-1498, como una variable numrica, 739476 o comoun vector, 1789 07 14 0 0 0.

    La funcin clock responde con:

    >> Tiempo = clock

    Tiempo =

    1.0*e + 03 *2.0030 0.0010 0.0290 0.0160 0.0400 0.0502

    Esos datos responden a Tiempo[ao mes da hora minutos se-gundos].

    now devuelve la fecha y hora en un nmero, datestr convierte una fechanumrica en string, datevec individualiza los componentes de fecha y hora,datenum convierte una fecha en un nmero:

    >> now

    ans =

    7.3161e + 05

    >> datestr(7.3161e + 05)

    29-Jan-2003

    >> datevec(7.3161e + 05)

    2003 1 29 0 0 0

    >> datenum(date)

    7.3161e + 05

    La funcin date devuelve una variable de caracteres en el formato dd-mmm-yyyy:

    >> dateans =

    29-Jan-2003

    Numerosas transformaciones de fechas pueden encontrarse mediante helpdatestr.

    20 INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

  • Para temporizaciones se usan tic, para comienzo, y toc para finalizar latemporizacin y mostrar el resultado:

    >> T = clock; tic, for i = 1:1000000, a = sqrt(i); end, ... toc, Tt = etime(clock,T)

    elapsed_time =

    3.6174

    Tt =

    3.6642

    Los tres puntos seguidos indican continuacin en la siguiente lnea.La ejecucin de las races cuadradas de 1 a 1 milln, en un Pentium III a

    866 Mhz, con Linux Suse 8.2 y Student MatLab 12, tarda 3.62 segundos.La funcin etime devuelve el tiempo, en segundos, transcurrido entre

    dos valores del tiempo:

    >> etime(Tiempo,clock)

    ans =

    -1.2835e + 03

    1.15. INTERCAMBIO DE DATOS

    A partir de la versin 6, tanbin numerada como 12, MatLab presentauna ventana de Historia de Comandos, en donde se listan las rdenes efectua-das, de modo que en una sesin nueva se pueden buscar comandos ejecutadosen sesiones precedentes.

    Para guardar el espacio de trabajo en un archivo, para posteriormente re-cuperarlo, se utilizan los comandos load y save, segn:

    >> clear>> X=rand(2,3)

    X =

    0.3046 0.1934 0.30280.1897 0.6822 0.5417

    >> Y=round(X)

    Y =

    0 0 00 1 1

    PRIMEROS PASOS EN MATLAB 21

  • >> save mi_archivo>> clear>> who>>>> load mi_archivo>> who

    Your variables are:

    X Y>> XX =

    0.3046 0.1934 0.30280.1897 0.6822 0.5417

    >> YY =

    0 0 00 1 1

    round se relaciona con ceil y floor, cuyas funciones se intuyen por susignificado:

    >> A=[1.5 2.49; 0.2 9.99]

    A =

    1.5 2.490.2 9.99

    >> ceil(A)

    ans =

    2 31 10

    >> floor(A)

    ans =

    1 20 9

    save y load permiten salvar o cargar variables determinadas, separadaspor espacios, a la vez que admiten el formato ASCII, aadiendo al final de es-tos comandos -ascii, como se especifica en el siguiente ejemplo:>> save exp_mayo.dat X -ascii

    22 INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

  • En el archivo exp_mayo.dat, se guarda la variable X en formato ASCII.Para guardar la sesin de trabajo, se utiliza el comando diary, que alma-

    cena una copia de todas las entradas realizadas desde el teclaclo en un archivo,en el directorio actual, en formato ASCII:

    PRIMEROS PASOS EN MATLAB 23

  • 2.1. INTRODUCCINMatLab se caracteriz desde un principio por ser muy potente en clculo

    numrico, mientras que el clculo simblico fue incorporado como una toolbox,cuando MathWorks, empresa que comercializa MatLab, se extendi interna-cionalmente.

    La Symbolic Math Toolbox es una coleccin de herramientas para MatLab,que se utilizan para manejar y resolver expresiones simblicas.

    Las herramientas simblicas disponibles ms usadas son; combinar, sim-plificar, factorizar, derivar, integrar, lmites, resolucin de sistemas de ecua-ciones algebraicas o diferenciales, transformaciones integrales, la mayora delas operaciones del lgebra lineal...

    Estas herramientas de clculo simblico son parte del programa Maple V,comercializado por Waterloo Maple Software Inc.

    2.2. OBJETOS Y EXPRESIONES SIMBLICASEn Matlab hay dos tipos de objetos, numricos y literales, strings. La Sym-

    bolic Math Toolbox usa objetos simblicos para representar variables y opera-dores, por ejemplo:>> x=sym('x')

    x =

    x

    25

    2Clculo simblico

  • Un objeto numrico puede convertirse en simblico segn:>> M=magic(2) % M, variable numrica.M =

    1 34 2

    >> N=sym(M) % N, variable simblica.N =

    [1, 3][4, 2]>> syms a b c d % Definicin de simblicos.>> Mat=[a,b;c,d]Mat =

    [a, b][c, d]>> det(Mat) % Clculo del determinante.ans =

    a*d-b*c>> M=(a-b)/(c+d)M =

    (a-b)/(c+d)>> pretty(M)

    a - bc + d

    Para la simplificacin y transformaciones de expresiones se utilizan los ope-radores collect, expand, horner, factor, simple y simplify, al-gunos de los cuales se aplican en lo que sigue.

    26 INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

    3 2 1 0 1 2 3

    10

    0

    10

    20

    30

    40

    50

    60

    70

    80

    t

    2 151/2 /5 sin(151/2 /2 t) exp(3/2 t)

    Figura 2.1. Representacin grfica de y.

  • 2.3. EJEMPLOS DE CLCULO SIMBLICO2.3.1. Derivadas e integrales

    Se crea la funcin y, dependiente de t, segn:

    >> t=sym('t');>> y=sym('2*15^(1/2)/5*sin(15^(1/2)/2*t)*e^(-3/2*t)');

    >> pretty (y)

    1/2 1/2 (- 3/2 t)2/5 15 sin(1/2 15 t) e

    La representacin grfica de y, para valores de - a , se consigue con lainstruccin:

    >> ezplot(y,[-pi pi])

    La derivada y, almacenada en dy, simplificada y factorizada se obtiene se-gn:

    >> yY=2*15^(1/2)/5*sin(15^(1/2)/2*t)*exp(-3/2*t)

    >> dy=diff(y);>> dy=simplify(dy);>> dy=factor(dy);>> pretty(dy)

    1/2 1/2 1/2- 3/5 exp(-3/2 t) (-5 cos(1/2 15 t)+15 sin(1/2 15 t))

    La representacin grfica de dy se obtiene, como en el caso anterior, me-diante ezplot.

    La integral de la derivada es la propia funcin, por lo tanto, integrando dy,ha de obtenerse una expresin idntica a la de y:

    >> ezplot(dy, [-pi pi])>> Intdy=int(dy,t);>> Intdy=simplify(Intdy)

    Intdy =

    2/5*15^(1/2)*sin(1/2*15^(1/2)*t)*exp(-3/2*t)

    CLCULO SIMBLICO 27

  • 2.3.2. Sistemas de ecuaciones

    Los sistemas de ecuaciones se resuelven mediante la instruccin solve, to-mando como argumentos el primer miembro de las ecuaciones igualadas a 0,segn:

    x + y = 5x y = 1

    ezx = 7,389

    >> syms x y z>> [x,y,z]=solve(x+y-5,x-y+1,exp(x*z)-7.389)

    x =

    2

    y =3

    z =

    1/2*log(7389/1000)

    >> z=double(z)

    z =

    1.0000

    Si las ecuaciones a resolver no tienen solucin analtica, solve devuelveuna expresin numrica, que se ejecuta mediante double, transformacin adoble precisin.

    28 INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

    3 2 1 0 1 2 3100

    80

    60

    40

    20

    0

    20

    40

    60

    t

    3/5 exp(3/2 t) (- 5 cos(1/2 151/2 t)+151/2 sin(1/2 151/2 t))

    Figura 2.2. Representacin grfica de dy.

  • 2.3.3. Ecuaciones diferenciales

    La funcin dsolve calcula las soluciones simblicas de ecuaciones dife-renciales ordinarias. Los argumentos de dsolve deben ser expresiones de ca-racteres, strings, conteniendo el signo =. Para indicar la derivada primera seutiliza el signo D. para la derivada segunda se utiliza D2, y as sucesivamente.

    La sintaxis de esta operacin se expresa como:

    r=dsolve('Ecu1,Ecu2,...','Cond1,Cond2,...','x')

    siendo x la variable independiente; si no se expresa se utiliza t por defecto.Obteniendo y'', por derivacin de y', se puede componer con y e y', la si-

    guiente ecuacin diferencial:

    La solucin a esta ecuacin diferencial se obtiene segn:

    >> yc=dsolve('D2y+3*Dy+6*y=0,Dy(0)=3,y(0)=0')

    yc =

    2/5*15^(1/2)*exp(-3/2*t)*sin(1/2*15^(1/2)*t)

    La especificacin de las constantes iniciales es opcional, a continuacin semuestran ejemplos con y sin estas constantes:>> r=dsolve('D2y+3*Dy+2*y=0')

    r =

    C1*exp(-t)+C2*exp(-2*t)

    >> s=dsolve('D2y+3*Dy+2*y=0','Dy(0)=l,y(0)=0')

    s =

    exp(-t)-exp(-2*t)

    >> S=dsolve('D2y+3*Dy+2*y=cos(t)','Dy(0)=l,y(0)=0')

    S =

    1/l0*cos(t)+3/l0*sin(t)+1/2*exp(t)-3/5*exp(-2*t)

    d y

    dt

    dydt

    y2

    23 6 0+ + =

    CLCULO SIMBLICO 29

  • 2.4. TRANSFORMACIN DE LAPLACE E INVERSALa transformacin de Laplace calcula la integral:

    permite transformar f(t) en el dominio del tiempo, a (s), en el dominio de lavariable compleja>> syms a w t s >> F=cos(w*t)*exp(a*t)

    F =

    cos(w*t)*exp(a*t)

    >> L=laplace(F,t,s)

    L =

    (s+a)/((s+a)^2+w^2)

    >> pretty(L)(s + a)

    -----------

    2 2(s + a) + w

    >> L1=laplace(exp(-t),t,s)

    L1 =

    1/(l+s)

    >> pretty(L1)

    1----

    1 + s

    La transformada inversa se ejecuta sobre expresiones de la variable com-pleja s, para volver al dominio del tiempo.>> I=ilaplace(L,s,t)

    I =cos(w*t)*exp(-a*t)

    >> I1=ilaplace(Ll,s,t)I1 =exp(-t)

    (s f t e dts t) ( ) = 0

    30 INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

  • 2.5. LMITES>> limit(1/x,x,0,'left')

    ans =-inf

    El lmite de 1/x, cuando la variable x tiende a 0 por la izquierda, es .

    >> Lim=limit((x^3-1)/(x^2-l),x,1)

    Lim =3/2

    2.6. SERIES DE TAYLOR Y MAC LAURIN

    Para obtener desarrollos de series de Taylor y Mac Laurin, se utiliza indis-tintamente taylor, con 3 o 4 argumentos:

    >> syms x>> f=exp(-x);>> pretty(taylor(f,x,3,8))

    2exp(-8) - exp(-8) (x - 8) + 1/2 exp(-8) (x - 8)

    >> pretty(taylor(f,x,3))2

    1 - x + 1/2 x

    2.7. INVOCANDO A MAPLE V

    Desde MatLab se accede a Maple V con la funcin maple, que tomacomo argumento la expresin con sintaxis de Maple V, mediante las instruc-ciones genricas:

    r=maple('Sentencia Maple')r=maple('Funcin',Argl,Arg2,...)

    2.7.1. Transformacin de Laplace e inversa con Maple V

    Para comenzar a utilizar las funciones de MapleV, relacionadas con latransformacin de Laplace, es necesario cargar previamente el paquete detransformaciones integrales with(inttrans):>> maple('with(inttrans)') % Se carga el paquete de ...

    % transformaciones integrales.

    CLCULO SIMBLICO 31

  • ans =

    [addtable, fourier, fouriercos, fouriersin, hankel, hil-bert,...

    invfourier, invhilbert, invlaplace, invmellin, ...laplace, mellin, savetable]

    >> maple('laplace(y(t)=t^2+sin(t),t,s)')

    ans =

    laplace(y(t),t,s) = 2/s^3+1/(s^2+1)

    >> M1=maple('invlaplace((s+1)/(s*(s^2+s+1)),s,t)')

    M1 =

    1+1/3*exp(-1/2*t)*3^(1/2)*sin(1/2*3^(1/2)*t)-exp(-1/2*t)*...cos(1/2*3^(1/2)*t)

    2.7.2. Resolucin de ecuaciones diferenciales con Maple V

    Para resolver la ecuacin diferencial:

    + 3 y + 6y = 0con condiciones iniciales:

    y (0) = 3

    y (0) = 0

    se procede con las siguientes instrucciones:

    >> maple('eq:=diff(y(t),t$2)+3*diff(y(t),t)+6*y(t)=0')

    ans =

    eq := diff(y(t),'$'(t,2))+3*diff(y(t),t)+6*y(t) = 0

    >> maple('ini:=y(0)=0,D(y)(0)=3')

    ans =

    ini := y(0) = 0, D(y)(0) = 3

    >> maple('Sol:=dsolve({eq,ini},{y(t)})')

    ans =

    Sol := y(t) = 2/5*15^(1/2)*exp(-3/2*t)*sin(1/2*15^(1/2)*t)

    32 INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

  • 2.7.3. Resolucin de ecuaciones diferenciales con la transformacin de Laplace

    Para resolver la ecuacin diferencial:

    2 y 3y = 0

    con condiciones iniciales:

    y (0) = 1y (0) = 0

    se procede con las siguientes instrucciones:

    >> maple('eq:=diff(y(t),t$2)-2*diff(y(t),t)-3*y(t)=0')

    ans =

    eq := diff(y(t),'$'(t,2))-2*diff(y(t),t)-3*y(t) = 0

    >> maple('ini:=y(0)=0,D(y)(0)=1')

    ans =

    ini := y(0) = 0, D(y)(0) = 1

    >> maple('La:=laplace(eq,t,s)')

    ans =

    La := s*(s*laplace(y(t),t,s)-y(0))-D(y)(0)-2*s* ...laplace(y(t),t,s)+2*y(0)-3*laplace(y(t),t,s) = 0

    >> Maple('Sol:=subs(ini,{La})')

    ans =

    Sol := {s^2*laplace(y(t),t,s)-1-2*s*1aplace(y(t),t,s) ... -3*laplace(y(t),t,s) = 0}

    >> maple('Sol1:=solve(Sol,{laplace(y(t),t,s)})')

    ans =

    Sol1 := {laplace(y(t),t,s) = 1/(s^2-2*s-3)}

    >> maple('Solf:=invlaplace(Sol1,s,t)')

    Solf =

    CLCULO SIMBLICO 33

  • {y(t) = 1/16*16^(1/2)*(exp((1+1/2*16^(1/2))*t)- ...exp((1-1/2*16^(1/2))*t))}

    >> maple('simplify(Solf)')

    ans =

    {y(t) = -1/4*(-1+exp(-4*t))*exp(3*t)}

    y t e et t( ) ( )= 14

    14 3

    34 INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

  • 3.1. input

    La forma de input, se indica en los ejemplos siguientes, segn se trate devariables literales o numricas:

    >> R=input('> Cul es tu nombre ? ','s')

    > Cual es tu nombre ? Pepe

    >> ['Hola',R]

    ans =

    Hola Pepe

    >> ['Hola';R]

    HolaPepe

    >> P=input('> Dime el radio de la rueda ? ')

    > Dime el radio de la rueda ? 5

    >> P+1

    ans =

    6

    35

    3Sentencias de control de flujo

  • 3.2. if - else - end

    El salto condicional de flujo ms sencillo, se construye de la siguiente ma-nera:

    if condicincomandos

    end

    Los comandos entre if y end, se ejecutarn, si la condicin es verdad,uno. Si la condicin es falsa, cero, se puentearn los citados comandos.

    Operadores relacionaleseq == Igualne ~= No iguallt < Menor quegt > Mayor quele = Mayor que o igual

    En la primera de las siguientes instrucciones se responde con hola, yaque es verdad que 'a' es igual a 'a'. En la segunda esto se obvia, dado que lacondicin es falsa.

    >> if 'a'=='a', 'hola', end

    ans =

    hola

    >> if 'a'=='b', 'hola', end

    Para evaluar dos alternativas, la construccin if - else - end toma lasiguiente construccin:

    if condicinEjecucin de comandos de esta zona,si la condicin es verdad

    elseEjecucin de comandos de esta zona,si la condicin es falsa

    end

    Si hubiese tres alternativas, la construccin sera:

    36 INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

  • if condicin 1

    Ejecucin de instrucciones si la condicin 1 es ver-dad

    elseif condicin 2Ejecucin de instrucciones si la condicin 2 es ver-

    dadelseif condicin 3

    Ejecucin de instrucciones si la condicin 3 es ver-dad

    elseEjecucin de instrucciones si ninguna condicin es

    verdadend

    En un comercio se vende un vino a un precio condicionado por la cantidadrequerida. Hasta 5 botellas el precio unitario es de 6 , desde 6 a 12 botellas elprecio es de 5,5 , y a partir de 13, a 5 la botella. Elaborar un programa, quepregunte cuntas botellas se desean e indique el precio unitario y el total delgasto.

    %------------ Vino.m --------------C=input('Cuantas Botellas ?');if C Vino

    Cuantas Botellas ? 8

    Pu =

    5.5000

    Pt =

    44

    SENTENCIAS DE CONTROL DE FLUJO 37

  • 3.3. while - end

    La sentencia while - end funciona segn:

    while Condicin Comandos end

    Se ejecutarn los comandos de este bucle, mientras la Condicin sea ver-dad.

    Se expone a continuacin la generacin de una tabla que suministre los in-versos, cuadrados y races cuadradas del 1 al 3:

    % ------------------ Tabla.m ------------------I=0;while I> Tabla>> D

    D =

    1.0000 1.0000 1.0000 1.00002.0000 0.5000 4.0000 1.41423.0000 0.3333 9.0000 1.7321

    3.4. for - end

    El bucle o lazo de control for, permite realizar un conjunto de instruccio-nes iguales, variando uno o varios subndices, su forma genrica es:

    for I = vectorComandos

    end

    A continuacin se muestra la generacin de la tabla anterior utilizandofor.

    38 INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

  • % --------------- Tabla1. m -----------for I=1:3

    J(I)=I;A(I)=1/I;B(I)=power(I,2);C(I)=sqrt(I);

    endD=[I;J;A;B;C];D=reshape (D,3,4);% -------------------------------------

    >> Tabla1>> D

    D =

    1.0000 1.0000 1.0000 1.00002.0000 0.5000 4.0000 1.41423.0000 0.3333 9.0000 1.7321

    El funcionamiento de for, en el programa anterior, comienza tomando I elvalor de 1, recorriendo los comandos del bucle de arriba hacia abajo, crendo-se J(1) con el valor 1, A(1) con el valor del inverso de 1... Al llegar al final, I seincrementa en 1, tomando el valor 2, y el flujo de clculo vuelve a cabecera,donde se comprueba si I rebasa o no el valor lmite, en este caso 3, de modoque continuar el ciclo, se crear J(2) con el valor 2, A(2) con el valor de 1/2 yas sucesivamente. Cuando I alcance el valor de 4 ya no se ejecutarn las sen-tencias del interior del for, se continuar con lo que venga despus de end.

    A continuacin se muestra una estructura de un for dentro de otro, anida-miento, para ejercitar el funcionamiento de los subndices.

    Para cada variacin de un valor del ndice del for externo, se ejecutan to-das las variaciones del interno. El funcionamiento del siguiente ejemplo co-mienza con I=1 y J, tomando los valores de 1, 2, 3 y 4, entonces I pasa al valor2, y J vuelve a tomar los valores de 1, 2, 3 y 4, y as hasta completar la ltimavuelta con I=3.

    % ------------- Tabla2.m ----------------------A=[]; % Crear una matriz vacia.x=[1 -1 2 0.5];

    for I=1:3for J=1:4

    A(I,J)=I^x(J);end

    end% ---------------------------------------------

    En la tabla formada, la I vara de 1 a 3 al descender por cada columna, y laJ vara en horizontal, del principio al final de cada lnea, tomando siempre los

    SENTENCIAS DE CONTROL DE FLUJO 39

  • valores de 1 para la primera columna, 2 para la segunda, 3 para la tercera y 4para la cuarta y as en cada lnea.

    En la primera lnea del programa Tabla2 se crea la matriz A sin contenido,para seguridad, siendo equivalente a clear A.

    Se ejecuta Tabla2 segn:>> Tabla2>> A

    A =

    1.0000 1.0000 1.0000 1.00002.0000 0.5000 4.0000 1.41423.0000 0.3333 9.0000 1.7321

    3.5. continue

    Si aparece un continue en un lazo for end o while end, el clculopasa a la siguiente iteracin del end de ese bucle.

    3.6. break

    Si aparece un break en un lazo for end o while end, el clculo sepuentea a la siguiente instruccin del end de ese bucle, es decir se finaliza esebucle.

    3.7. switch end

    switch ejecuta un grupo determinado de sentencias basado en el valor deuna variable o expresin:

    switch Expresin % Escalar o de caracteres. case Valor 1

    Sentencias % Se ejecutan si Expresin igual Valor 1. case Valor 2

    Sentencias.

    .

    .

    otherwiseSentencias % Se ejecutan para Valor no contemplado.

    end

    40 INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

  • 4.1. TIPOS DE GRFICOSDesde las primeras versiones, MatLab traa suficientes utilidades grficas,

    que en las versiones posteriores fueron incorporando cantidades ingentes denuevas facilidades. Se resean los principales tipos de construccin de grficos:

    fplot. Para representacin de funciones: fplot('Fun',[-pi pi]). plot. Representacin de x frente a y: plot(x,y). plotyy. Representacin en los ejes opuestos de ordenadas: plotyy

    (x1,y1,x2,y2). plotmatrix. Matriz de representaciones: plotmatrix(x,y). bar. Representacin con barras: bar(x,y,ancho,tipo). stairs. Representacin en escalones: stairs(x,y). errorbar. Representacin acompaada de un parmetro de desviacin:

    errorbar(x,y,e). stem. Representacin discreta: stem(x,y). pie. Representacin en tarta: pie(x). plot3. Representacin en 3-d: plot3(x,y,z). semilogy. Representacin semilogartmica en el eje y: semilogy

    (x,y). semilogx. Representacin en el eje x: semilogx(x,y). loglog. Representacin logartmica en los dos ejes: loglog(x,y).

    En las Figuras 4.1 y 4.2, se representan los principales tipos de grficosmencionados.

    41

    4Grficos en MatLab

  • 42 INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

    2 0 26

    4

    2

    0

    2

    4

    6

    2 0 25

    0

    5

    2 0 25

    0

    5

    4 2 0 2 45

    0

    5

    1

    0

    1

    >> subplot(221)>> fplot(Fun,[pi pi]) >> subplot(222)

    >> stairs(x,Fun(x),*)

    >> subplot(223)>> plot(x,Fun(x),:.)

    Figura 4.1. Diferentes tipos de grficos.

    2 0 25

    0

    5

    2 0 26

    4

    2

    0

    2

    4

    6

    2 0 25

    0

    5

    0,2 0,3 0,4 0,5

    30

    210

    60

    240

    90

    270

    120

    300

    150

    330

    180 0

    >> subplot(221)>> bar(x,Fun(x),x,.2)

    >> subplot(222)>> errorbar(x,Fun(x),e)

    >> subplot(223)>>stem(x,Fun(x))

    Figura 4.2. Matriz de grficos.

  • >> x=-pi:.25:pi;>> subplot(221), fplot('fun',[-pi pi])>> axis([-pi pi -6 6])>> subplot(222), stairs(x,fun(x),*-)>> axis([-pi pi -5 5])>> subplot(223), plot(x,fun(x),':.')>> axis([-pi pi -5 5])>> subplot(224), plotyy(x,fun(x),x,x.^2)>> subplot(221), bar(x,fun(x),0.2)>> axis([-pi pi -5 5])>> e=rand(length(x),1)>> subplot(222), errorbar(x,fun(x),e)>> axis([-pi pi -6 6])>> subplot(223), stem(x,fun(x))>> axis([-pi pi -5 5])>> subplot(224), polar(x,sin(2*x).*cos(2*x))

    La representacin plotmatrix, se muestra en la Figura 4.3, obtenidacon las instrucciones:

    >> x=[-3:.1:4]';>> y=Fun(x);>> y1=sin(x);>> y2=tan(x);>> A=[y,y1,y2];>> plotmatrix(x,A,'h-')

    GRFICOS EN MATLAB 43

    3 2 1 0 1 2 3 4

    20

    0

    20

    1

    0,5

    0

    0,5

    14

    2

    0

    2

    4

    6Ttulo del grfico

    Fun

    ci

    nS

    eno

    de

    X Seno de X

    Tangente de X

    Eje de las X

    Figura 4.3. Matriz de grficos.

  • La representacin en 3-d, se efecta segn el ejemplo:>> t = 0:pi/l00:l0*pi;>> plot3(cos(t).*exp(-0.05*t),sin(t).*exp(-0.05*t),t);

    4.2. UTILIDADES DE GRFICOSLas principales utilidades de los grficos son:

    line([xmin xmax],[ymin ymax],'Color','k','LineWidth',2) xlabel('Leyenda del eje x'),ylabel('Leyenda del eje y'). text(x,y,'Leyenda'). gtext('Leyenda'), posicionada con el ratn. title('Ttulo del grfico'). axis([xmin xmax ymin ymax]). hold on/off, para que el siguiente grfico se presente sobre el anterior. subplot(abc), para representar una matriz de grficos. axes('Posicin',[x y],'XColor','r','YColor','b') clf, borrar figuras. legend, para insertar leyendas, legend(leyenda1,leyenda2..., posi-cin) datetick(eje,formato de fecha), eje puede ser 'x', 'y' o 'z', el forma-

    to de fecha es un nmero del 0 al 28, 29 posibilidades de expresar las fe-chas, vase help datetick.

    44 INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

    10,5

    00,5

    1

    1

    0,5

    0

    0,5

    10

    5

    10

    15

    20

    25

    30

    35

    Figura 4.4. Grfico en 3-d.

  • 4.3. TEXTOS EN GRFICOSPara poder mostrar ecuaciones en cuadros grficos, ya sea en las leyendas

    de los ejes, o en otras partes del cuadro, MatLab incorpora un subconjunto decomandos LATEX, y una coleccin de smbolos de uso frecuente en las ecua-ciones, entre otros se encuentra el alfabeto griego, minsculas y maysculas.

    El conjunto de caracteres puede verse en la documentacin en lnea deMatLab, en la seccin de Handle Graphics.

    La sintaxis de LATEX utiliza los argumentos entre llaves, { }. Los subndices deben ir precedidos de _, los superndices van precedidos de^. Para conseguir el smbolo de las letras griegas, ha de escribirse su nombreen ingls precedido de \, con la primera letra en minscula o mayscula.

    En el siguiente ejemplo se muestra cmo poner varias lneas de texto en lasleyendas de los ejes, cmo incorporar una ecuacin en un eje y en el interior decuadros grficos.

    >> x=-10:0.01:10; y=sin(x).*exp(-0.2*x); plot(x, y)>> xlabel({'\fontsize{12}Eje de las X','Distancia \mum'})>> ylabel('\fontsize{16}y=sin(x)\cdote^{-\phi \cdot x}')>> text(- 10.5,'\fontsize{20}y= \mu_{\barpi} \cdot ...

    sin(x) \cdot e^{-\phi \cdot x}')

    GRFICOS EN MATLAB 45

    6%

    19%

    31%

    44%

    a=[1 3 5 7]pie(a,a==a(2))

    Figura 4.5. Grfico en tarta.

  • 4.4. LAPRINT

    Al incluir cuadros grficos procedentes de MatLab, en textos LATEX, es-calados ya con resizebox o scalebox, suele haber recortes indeseados ydesproporcin en los textos de los cuadros grficos en los documentos finales.

    46 INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

    10 8 6 4 2 0 2 4 6 8 105

    4

    3

    2

    1

    0

    1

    2

    3

    4

    5

    y= sin(x) e- x

    Eje de las XDistanciam

    y=si

    n(x

    ) e

    -

    x

    Figura 4.6. Ecuaciones en el interior de cuadros grficos.

    12

    34

    56

    78

    12

    34

    56

    78

    6

    4

    2

    0

    2

    4

    6

    Figura 4.7. Grfico de barras, bar3(peaks(8)).

  • LaPrint es un archivo, laprint.m, cuya versin ms reciente puede obte-nerse en www.uni-kassel.dr/~linne, que reemplaza todas las anotacionesde una figura de MatLab por marcas, salvando la figura como un archivo.eps,a la vez que crea un archivo.tex, para reproducir la figura original, usandoepsfig y psfrag, de modo que la figura incorporada en el documento final seaidntica, incluidas sus fuentes de texto, a la figura original en MatLab.

    Para utilizar laprint.m, es necesario copiarlo a cualquier carpeta delmatlabpath. Una vez que se ha construido el cuadro grfico en MatLab, seejecuta laprint.m en la ventana de MatLab. El archivo.tex producido,se inserta en el documento LATEX, en donde convenga, y el archivo.epsen la carpeta correspondiente.

    4.5. ESTILOS DE LNEAS, MARCAS Y COLORESLos estilos de lneas, marcas y colores se presentan en la Tabla 4.1.

    GRFICOS EN MATLAB 47

    Smbolo Color

    b Azulg Verder Rojoc Cianm Magentay Amarillok Negrow Blanco

    Smbolo Marca

    o ox x+ +* *s d

    < > p h

    Smbolo Estilo de lnea

    Continua: Punteada

    Trazo-Punto Trazo-Trazo

    Cuadro 4.1. Caractersticas de las lneas grficas.

    En la Figura 4.8 se muestra un ejemplo de modificacin de atributos de l-neas como son: color de lnea, grueso...% ----------------Lineas.m--------------------------------------

    t=linspace(-4*pi,4*pi,1000);y=sin(t).*exp(-.25*abs(t));z=cos(t).*exp(-.25*abs(t));plot(t,y,'LineWidth',2,'Color','k'), gridaxis([-4*pi,4*pi,-.7,1])

    text(2,sin(2).*exp(-.25*abs(2)),...'\fontsize{16}\leftarrow sin(t)\cdote^{-0.25\cdotabs(t)}

    ')

  • xlabel('\fontsize{l5} t')ylabel('\fontsize{l5} sin(t)\cdote^{-0.25\cdotabs(t)}')hold ona=plot(t,z);text(0.25,cos(0.25).*exp(-.25*abs(0.25)),...

    '\fontsize{14}\leftarrow cos(t)\cdote^{-0.25\cdotabs(t)}')

    set(a,'LineWidth',0.5,'Color','k')t1=-11; y1=sin(t1).*exp(-.25*abs(t1));t2=0; y2=cos(t2).*exp(-.25*abs(t2));line([t1 t2],[y1 y2],'LineWidth',8,'Color',[1 0 1])

    48 INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

    10 5 0 5 10

    0,6

    0,4

    0,2

    0

    0,2

    0,4

    0,6

    0,8

    1

    sin(t)e0,25 abs(t)

    t

    sin

    (t)

    e0,

    25ab

    s(t)

    cos(t)e0,25 abs(t)

    Figura 4.8. Gruesos de lneas, color...

    hold of% ------------------------------------------------------------------

    4.6. area

    area es una funcin anloga a plot, rellena el espacio comprendido en-tre 0 y una lnea grfica. En la Figura 4.9, se rellena la superficie limitada entre0 y Fun(x), grfico superior, y entre 5 y Fun(x), grfico inferior:

  • GRFICOS EN MATLAB 49

    2 1 0 1 2 3 4 56

    4

    2

    0

    2

    4

    6

    2 1 0 1 2 3 4 56

    4

    2

    0

    2

    4

    6

    subplot(211)area(x,Fun(x))

    subplot(212)area(x,Fun(x),5)

    Figura 4.9. Relleno de reas en grficos.

    25%

    33%

    19%

    8%

    14%

    a=[3 5 7 9 12];pie3(a,a==a(4))

    Valor destacado

    Figura 4.10. Grfico en tarta en 3-d.

  • 5.1. INTEGRACIN NUMRICAMatlab dispone de dos funciones para integracin, quad, basado en la regla

    de Simpson, y quadl, evaluacin mediante la tcnica de cuadratura de Lo-batto.

    En el siguiente ejemplo se muestra el clculo de la integral de la funcinFun, previamente definida, desde el lmite inferior 0, hasta 5.

    >> A=quad(F,0,5) % Integracin por la regla de Simpson. % Siendo F=@Fun, definida en Cap. 1.

    A =

    -10.0814

    5.2. MNIMOS, CEROS Y OPTIMIZACINLas principales funciones de MatLab para optimizacin son: fminbnd, que

    encuentra el mnimo de una funcin de una variable; fminsearch, corres-pondiente a fmins de versiones anteriores, calcula mnimos de funcionesmultivariables; lsqcurvefiting para ajustes de datos a diferentes tiposde funciones; y fzero, que encuentra ceros de funciones de una variable.

    5.2.1. Mnimos y ceros de funciones

    Para encontrar un mnimo de la funcin, Fun, entre 0 y 3, se procede se-gn:

    51

    5Aplicaciones de clculo numrico

  • >> x=fminbnd(F,0,3)

    x =

    2.0351

    La siguiente instruccin busca un cero en las proximidades de 4:

    >> fzero('Fun',4)

    ans =3.0965

    >> fzero(F,4)

    ans =3.0965

    5.2.2. Resolucin de ecuaciones no lineales

    La resolucin de ecuaciones no lineales se efecta con la instruccinfsolve, cuya aplicacin se realiza segn el ejemplo que sigue.

    Sea el sistema:

    Sea el sistema

    La solucin se consigue con el programa EcusP.m

    % --------------- EcusP.m ----------------------------clearOpciones=optimset ('MaxFunEvans',5000,'GradConstr','on'...

    'TolCon',1e5,'TolFun',1e6,'TolX'1e5);x=fsolve('Ecus',[40 50 5]',Opciones)% ------------------------------------------------------------

    En la fucin Ecus se definen las ecuaciones a resolver, segn el listado:

    % --------------- Ecus.m ----------------------------function q=Ecus(p)x=p(1); y=p(2); z=p(3);q(1)=x+y5;q(2)=xy+1;q(3)=exp(x.*z)7.389;q=[q(1);q(2);q(3);% ------------------------------------------------------------

    x yx y

    ez x

    + =

    =

    =

    51

    7 389

    ,

    52 INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

  • La ejecucin de EcusP produce el siguiente resultado:> EcusPOptimizacin terminated successfully:Relative function value changing by less than OPTIONS.TolFun

    x =

    2.0003.0001.000

    >>

    5.2.3. Minimizacin y ajuste de datosEl objetivo de fminsearch es encontrar un mnimo de una funcin mul-

    tivariable sin restricciones. Se invoca de la forma:

    pk=fminsearch('pHAjusMin',[3 l0],Opciones)

    En este caso, se llama a la funcin a minimizar, pHAjusMin, suministran-do a continuacin los valores iniciales de los parmetros a minimizar, siendoopcional aadir una variable de opciones, seleccionables con optimset.

    La aplicacin y funcionamiento de fminsearch se comprende fcilmen-te con el siguiente ejemplo de ajuste de datos experimentales a una funcin,ecuacin (5.1).

    En el proceso de lodos activos, la tasa de crecimiento de los lodos es fun-cin del pH, datos experimentales.

    Las reacciones de biodegradacin, actividad microbiana, transcurren a unpH ptimo, prximo a la neutralidad y disminuyen hasta anularse, al separarsea zonas agresivas, como son las zonas de pHs cidos o alcalinos.

    El efecto del pH en la velocidad especfica de generacin de lodos se re-presenta adecuadamente por una funcin tipo campana:

    (5.1)

    Las constantes pk1 y pk2, se calculan por ajuste de datos, representando losvalores en los que (pH), tiene el valor de 0,5.

    ( )pH pk pH pH pk= + + 1

    1 10 101 2

    APLICACIONES DE CLCULO NUMRICO 53

  • El listado del ajuste mediante la ecuacin (5.1), se presenta a continuacin:% --------------- pHAjus.m ----------------------------clear,clfglobal pH mupH=[O 1 2 3 4 5 6 7 8 9 10 11 12 13 14]';mu=[O .01 .02 .04 .12 .4 .8 1 .96 .9 .6 .05 .01 ...

    .01 0]';pk=fminsearch('pHAjusMin',[3 10]);plot(pH,mu,'*')hold onpHc=0:.1:14;muc=1../(1+1O..(pk(1)-pHc)+10..(pHc-pk(2)));plot(pHc,muc,'-')mu1=1../(1+10..(pk(1)-pk(1))+10..(pk(1)-pk(2)));mu2=1../(1+10..(pk(1)-pk(2))+10..(pk(2)-pk(2)));line([pk(1) pk(1)],[0 mu1],'Color','k')line([pk(2) pk(2)],[0 mu2],'Color','k')text(1,0.85,'pk1 = '), text(2.5,.85,num2str(pk(1)))text(1,0.75,'pk2 = '), text(2.5,.75,num2str(pk(2)))xlabel('pH'), ylabel('\mu(pH)'), grid, hold off%--------------------------------------------------------

    El listado de la funcin a minimizar es:

    function q=pHAjusMin(p)%----------------- pHAjusMin.m --------------------% Funcin llamada por pHAjus.m%--------------------------------------------------

    54 INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

    0 2 4 6 8 10 12 140

    0,1

    0,2

    0,3

    0,4

    0,5

    0,6

    0,7

    0,8

    0,9

    1

    pk1 = 5,2036

    pk2 = 10,1128

    pH

    (p

    H)

    Figura 5.1. Ajuste de la tasa de crecimiento frente al pH.

  • global pH mu pk1=p(1); pk2=p(2); muc=1../(1+10..(pk1-pH)+10..(pH-pk2));q=sum((mu-muc).2);%--------------------------------------------------

    En la funcin pHAjusMin.m, se define q, parmetro a minimizar; en estecaso minimizar la suma de los cuadrados de las desviaciones de los experi-mentales a los calculados.

    La funcin lsqcurvefit es ms especfica para el ajuste de datos; se eje-cuta segn:

    X=lsqcurvefit('FUN',XO,X,Y,LI,LS,Opciones)

    Se invoca a la funcin FUN, en la que se define la ecuacin de ajuste, XO re-presenta los valores iniciales de partida, X e Y son los datos experimentales, LIrepresenta el lmite inferior de los valores de los parmetros a calcular, LS es ellmite superior, y Opciones es un conjunto de valores en los que se definenparmetros del clculo, siendo opcional su especificacin.

    A continuacin se muestra un ejemplo de la utilizacin de lsqcurvefit:

    >> x=[-pi*2:.5:pi*2]';>> A=2; B=.2;>> y=A*sin(x).*exp(-B*x);>> r=rand(length(x),1)-0.5;>> Y=y+r;>> Opciones=optimset('Display','iter','Diagnostics','on',...

    'TolX',1e-29,'TolFun',1e-29,'LargeScale','on',...'MaxFunEvals',100)

    >> est=lsqcurvefit('AjusNlFun',[0 0],x,Y,[-5 -5],[10 5],...Opciones)

    >> Ac=est(1); Bc=est(2);>> xc=linspace(x(1),x(length(x)));>> yc=Ac*sin(xc).*exp(-Bc*xc);>> plot(x,y,'o'), hold on, plot(xc,yc,'-'), hold off>> text(0,5,'A='), text(1,5,num2str(A))>> text(0,4,'B='), text(1,4,num2str(B))>> text(4,5,'Ac='), text(5,5,num2str(Ac))>> text(4,4,'Bc='), text(5,4,num2str(Bc))>> xlabel('X'), ylabel('A.sen X e{-BX}')

    La funcin llamada se muestra en el siguiente archivo:

    function F=AjusNlFun(p,x) %---------------AjusNlFun.m---------------A=p(1); B=p(2); F=A*sin(x).*exp(-B*x);%-----------------------------------------

    APLICACIONES DE CLCULO NUMRICO 55

  • En el ajuste de datos experimentales a funciones es frecuente probar con po-linomios, para ello MatLab desarroll la funcin polyfit, cuya utilizacin semuestra en el ejemplo siguiente.

    56 INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

    8 7 6 5 4 3 2 1 0 1 25

    0

    5

    10

    15

    20

    25

    30

    Ac=0,95551Bc= 4,6119Cc= 5,6322

    x

    x2 +

    5x+

    6

    Figura 5.3. Ajuste de datos con polyfit.

    8 6 4 2 0 2 4 6 83

    2

    1

    0

    1

    2

    3

    4

    5

    6

    A=2

    B=0,2

    Ac=2,096

    Bc=0,19176

    X

    As

    en X

    eB

    X

    Figura 5.2. Ajuste de datos con Isqcurvefit.

    En la Figura 5.2 se muestra el resultado de este ajuste, en la que se muestranlos valores de partida y los encontrados, teniendo en cuenta que a cada Y, se lesum aleatoriamente una cantidad comprendida en el intervalo 0.5.

  • Se definen 10 valores de x, linealmente espaciados, a los que se le aplicauna funcin polinmica para obtener unas y, a las que se les suma un ruido aleatorio de 2.5, con lo que se obtienen Y valores. Con la funcin polyfitsobre x e Y, se pretende recalcular los coeficientes del polinomio original, segnlas siguientes instrucciones:

    >> x=linspace(-8,2,10)';>> A=1; B=5; C=6; >> y=A*x.2+B*x+C; >> Y=y+5*rand(length(x),1)-2.5; >> Est=polyfit(x,Y,2); xx=x(l):0.1:x(length(x));>> plot(x,y,'*',xx,Est(1)*xx.2+Est(2)*xx+Est(3)) >> text(-5,20,'Ac='), text(-4.5,20,num2str(Est(1))) >> text(-5,18,'Bc='), text(-4.5,18,num2str(Est(2))) >> text(-5,16,'Cc='), text(-4.5,16,num2str(Est(3)))

    5.3. INTEGRACIN NUMRICA DE ECUACIONESDIFERENCIALES

    Las ecuaciones diferenciales que representan a los procesos reales suelenser ecuaciones diferenciales no lineales, impidiendo su integracin simblica,de modo que es necesario recurrir a mtodos numricos, cuya solucin til seruna tabla de valores o la representacin grfica de stos.

    MatLab dispone de las funciones ode23, ode45, ode113, ode15s,ode23s, ode23t y ode23tb para la evaluacin numrica de ecuaciones di-ferenciales. Las funciones ms utilizadas son ode23 y ode45, basadas en elmtodo de Runge-Kuta de 2 y 4 parmetros respectivamente, algunas de lasotras funciones se utilizan para ecuaciones con rigideces, stiff.

    Las funciones de integracin mencionadas son de paso de integracin va-riable, evalundose en cada iteracin la solucin con el paso de integracin h,h/2 y 2h, si los resultados no superan una tolerancia determinada, el paso de in-tegracin se reduce a h/2, si la superan el paso de integracin se incrementa, yas sucesivamente. En opciones de integracin se posibilita limitar el paso deintegracin a topes mximo y mnimo.

    En ocasiones ocurre que integrando una ecuacin diferencial en un de-terminado valor existen diferencias significativas en la solucin encontrada,an reducindose sucesivamente el paso de integracin, que si se supera unnmero determinado de reducciones, el sistema se para a causa de valoressingulares, pudiendo ser de utilidad disponer de una funcin de integracin deecuaciones diferenciales de paso fijo, definido por el usuario, para lo cual seelabor la funcin odegil4, cuyo listado y aplicaciones se muestra ms ade-lante.

    Los mtodos numricos evalan nicamente ecuaciones diferencialesde primer orden, de modo que para evaluar ecuaciones diferenciales de or-den superior, han de definirse variables auxiliares para componer sistemas

    APLICACIONES DE CLCULO NUMRICO 57

  • de ecuaciones diferenciales de primer orden, equivalentes a las de orden su-perior.

    En el Captulo anterior se resolvi simblicamente la ecuacin:

    (5.2)

    para su resolucin numrica se realiza la siguiente transformacin:

    z = y'

    con lo que la ecuacin (5.2) se transforma en dos ecuaciones diferenciales deprimer grado:

    z' = 3z 6y (5.3)y' = z (5.4)

    Se pretende integrar desde hasta , para lo cual es necesario conocer losvalores de y() y de dy(), que se obtienen segn:>> t=sym('t');>> y=('2*15(1/2)/5*sin(15(1/2)/2*t)*exp(-3/2*t)');>> dy=diff(y);>> subs(y,t,-pi)

    ans =

    34.1795>> subs(dy,t,-pi)ans =

    276.0593

    A continuacin, se presenta el listado de la llamada a integracin de lasecuaciones consideradas y su representacin grfica:

    %--------------------- EcudifP.m -------------------y0=[276.0593 34.1795]; t=-pi:.01:pi; [t,y]=odegil4(Ecudif,t,y0,0.01);plot(t,y(:,1),k:,t,y(:,2),k-)xlabel('Tiempo'), ylabel('Funcion y derivada') axis([-pi pi -100 277])%---------------------------------------------------

    d ydt

    d ydt

    y2

    2 3 6 0+ + =

    58 INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

  • En el siguiente listado se muestra el programa de definicin de las ecua-ciones a integrar:

    function dy=Ecudif(t,y)-------------------- Ecudif.m -----------------------------% y''+3y'+6y=0% es equivalente al sistema:% z'=-3z-6y% y'=z%-----------------------------------------------------------dy(1)=-3*y(1)-6*y(2); % y(1)=zdy(2)=y(1); % y(2)=ydy=[dy(1);dy(2)];%-----------------------------------------------------------

    5.3.1. Mtodo de Runge-Kuta

    El mtodo ms comn de resolucin numrica de ecuaciones diferencialeses el mtodo de Runge-Kuta de cuarto orden, cuya aplicacin se resume acontinuacin.

    Sean las ecuaciones diferenciales tales como:

    APLICACIONES DE CLCULO NUMRICO 59

    3 2 1 0 1 2 3100

    50

    0

    50

    100

    150

    200

    250

    Tiempo

    Fun

    ci

    n y

    der

    ivad

    a

    y

    y

    Figura 5.4. Grfico del resultado de la integracin numrica.

  • Su integracin se realiza evaluando los siguientes parmetros:

    Las ecuaciones integradas numricamente se obtienen mediante:

    Para integracin de ecuaciones diferenciales por el mtodo de Runge-Kutade cuatro parmetros se elabor la funcin odegil4.m de paso de integracinfijo:function [t,y]=odegil4(f,x,y0,h)%--------------------------------------------------------------------

    % [t,y]=odegil4(f,x,y0,h), resuelve ecuaciones y'=f(t,y), % x vector en linea de la variable independiente, % y0 vector en linea de las condiciones iniciales, % h paso de integracin.%--------------------------------------------------------------------

    x=x'; t=[]; t(1)=x(1); y=y0;

    y y p q r sk i k i k k k k, ,+ = ++ + +

    12 2

    6

    p h t y

    q h t h y p

    r h t h y q

    s h t h y r

    k k k

    k k kk

    k k kk

    k k k

    =

    = + +

    = + + = + +

    ( , )

    ,

    ,

    ( , )

    2 2

    2 2

    d ydt

    t y y y

    d ydt

    t y y y

    d ydt

    t y y y

    n

    n

    nn n

    11 1 2

    22 1 2

    1 2

    =

    =

    =

    ( , , , )

    ( , , , )

    ( , , , )

    M

    60 INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

  • N=(x(length(x))-x(1))/h; Ne=length(y0);for I=1:N

    T=t(I);Y=y(I,:);

    for J=1:Nep=h*feval(f,T,Y');q=h*feval(f,T+h/2,Y'+p/2);r=h*feval(f,T+h/2,Y'+q/2);s=h*feval(f,T+h,Y'+r);

    endt(I+1)=t(1)+h*I ;Inc=(p+2*q+2*r+s)/6;y(I+1,:)=y(I,:)+Inc;

    endy=spline(t,y',x);y=[reshape(y,Ne,length(x))]';t=x;%-------------------------------------------------------------

    La aplicacin prctica se materializa en el siguiente ejemplo, en el que seevala a modo de demostracin la integracin de 2t, 3t2, 4t3 y cos(x), cu-yas soluciones son: t2, t3, t4 y seno(t).

    Las ecuaciones diferenciales se definen en la funcin ecudif.m:

    function dy=ecudif(t,y) dy(1)=2*t;dy(2)=3*t.2;dy(3)=4*t.3;dy(4)=cos(t);dy=[dy(1);dy(2);dy(3);dy(4)];

    Para resolver el problema se lanza con las siguientes instrucciones:

    >> x=[0:5]; % Valores de presentacin de resultados. >> y0=[0 0 0 0]; % Condiciones iniciales. >> h=0.01; % Paso de integracin. >> tic % Comienzo de temporizacin. >> [t,y]=odegil4('ecudif',x,y0,h); % Llamada a integracin.>> toc % Final de la temporizacin.elapsed_time =

    1.2010

    >> [t,y] % Presentacin de resultados.ans =

    t t2 t3 t4 seno(t)0 0.0000 0.0000 0.0000 0.0000

    1.0000 1.0000 1.0000 1.0000 0.84152.0000 4.0000 8.0000 16.0000 0.90933.0000 9.0000 27.0000 81.0000 0.14114.0000 16.0000 64.0000 256.0000 -0.75685.0000 25.0000 125.0000 625.0000 -0.9589

    APLICACIONES DE CLCULO NUMRICO 61

  • U representa la entrada al sistema, caudal de entrada. X reprepresenta el estado del sistema, volumen del lquido en el tanque.Y representa las salidas del sistema, altura de lmina en el tanque y caudal

    de salida.El esquema fsico del sistema considerado se representa en la Figura 5.6.

    62 INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

    5.4. MODELO DINMICO DE UN TANQUECuando un tanque se alimenta con un caudal variable de un lquido hasta

    que se llena, y comienza a salir el lquido por rebose, surge una lmina del l-quido por encima del borde de vertido. Esta lmina adquiere un espesor de-pendiente del caudal de entrada y de las dimensiones del tanque. A su vez, laaltura de esa lmina provoca la cuanta del caudal de salida.

    El caudal de entrada es una variable impuesta, entrada, en simulacin se leasignarn diferentes valores para observar la respuesta del sistema. El volumenindicar el estado del sistema. La altura de lmina y caudal de salida constitu-yen la salida del sistema.

    Siguiendo la nomenclatura del Anlisis de Sistemas, este sencillo proceso semuestra en la Figura 5.5.

    Qeh

    QiV

    A

    H

    L

    Figura 5.6. Esquema de un tanque con rebosadero lateral.

    XV

    U Y

    Qi Qeh

    Figura 5.5. Esquema general de un sistema dinmico.

  • Considerando que el lquido circulante es agua, el caudal que sale por unvertedero rectangular, [m3/s], de longitud L [m], viene dado por la expresin deBazin, ecuacin (5.5), de uso general en Francia:

    (5.5)

    es un coeficiente que depende de la altura de lmina h [m], y de la pro-fundidad del tanque H [m], segn la ecuacin (5.6).

    (5.6)

    El caudal de salida, calculado con este procedimiento, es vlido para alturasde lmina de 2,5 a 80 cm.

    La variacin del volumen de agua en el tanque, es la diferencia de loscaudales de entrada al de salida, segn la ecuacin (5.7).

    (5.7)

    La altura de la lmina ser el volumen total de agua entre la seccin, menosla altura del rebosadero, segn la ecuacin (5.8):

    (5.8)

    Para resolver el ejemplo numrico utilizando un programa en MatLab, sedimensiona el tanque con rea de la base de 150 m2, longitud de vertedero 10m y altura 4 m. El caudal medio de entrada se fija en 100 m3/h, con variacio-nes de 50%, como es el caso de un reactor biolgico, alimentado con cau-dales mnimos en horas nocturnas y mximo en horas diurnas. El tiempo deanlisis para este ejemplo se fij en 20 minutos, suficiente para observaresta dinmica.

    El programa de clculo se estructura en tres partes, un programa y dosfunciones. La primera funcin calcula el estado del sistema, volumen de aguaen el tanque X, en funcin de la diferencia de caudales de entrada, impuesto, ydel de salida. La segunda funcin calcula las salidas Y, altura de lmina y cau-dal de salida. En el programa principal se definen los datos de partida, desde elque se llama a la primera funcin, y sta a la segunda, para finalmente realizarlos clculos requeridos y presentacin grfica de resultados.

    h VA

    H=

    dVdt

    Q Qi e=

    = + + +

    0 405

    0 003 1 0 552

    2,,

    , ( )hh

    H h

    Q L h g= 1 5 2,

    APLICACIONES DE CLCULO NUMRICO 63

  • El listado del programa principal es:

    %--------------------- Vertedero.m -----------------------%clear, clfglobal A H L Qe1 Qe2 Qe3 tf%% Nomenclatura%---------------------------------------------------------%% A Superficie de la base% H Altura del vertedero% L Longitud del vertedero% Qe1 Caudal del primer tramo% Qe2 Caudal del segundo tramo% Qe3 Caudal del tercer tramo% V Volumen inicial de agua en el tanque% t0, tf Tiempos inicial y final de anlisis%% X Volumen variable del agua% U Caudal de entrada% Y(:,1) Caudal de entrada% Y(:,2) Caudal de salida% Y(:,3) Altura de lmina%% Parmetros y Estado Inicial%---------------------------------------------------------%A=150; H=4; L=10; tf=20*60;Qe1=50/3600; Qe2=100/3600; Qe3=150/3600; V=590;%% Integracin de la ecuacin de estado%---------------------------------------------------------%Opciones=odeset('RelT',1e-7,'AbsTol',1e-7);[t,X]=ode23('VerteX',[0,tf],V,Opciones);%% Clculo de las Salidas%---------------------------------------------------------%Y=verteY(t,X);%% Representacin de resultados%---------------------------------------------------------%T=t/60; tff=T(length(T));%subplot(311); plot(T,Y(:,1)*3600,'*-',T,Y(:,2)*3600,'o--')axis([t0 tff -5 154]), ylabel('Cuadales (m3/h)')%subplot(312);plot(T,Y(:,3)*1000,'*-'),axis([t0 tff -1 14])ylabel('Altura de Lmina (cm)')

    64 INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

  • %subplot(313); plot(T,X,'*-'), axis([t0 tff 590 603])ylabel('Volumen del Agua (m3)'),xlabel('Tiempo (Minutos)')%%---------------------------------------------------------

    La funcin que calcula el estado del sistema, volumen del tanque, es:

    function dX=VerteX(t,X)%--------------------- VerteX.m---------------------------%% Clculo del volumen del tanque%---------------------------------------------------------%%global A H L Qe1 Qe2 Qe3 tf%% Clculo del caudal de salida%---------------------------------------------------------%Y=VerteY(t,X); U=Y(1,1);%% Variacin de volumen del tanque%---------------------------------------------------------

    APLICACIONES DE CLCULO NUMRICO 65

    0 2 4 6 8 10 12 14 16 18 200

    50

    100

    150

    Cau

    dal

    es (

    m3/h

    )

    0 2 4 6 8 10 12 14 16 18 200

    5

    10

    Alt

    ura

    de

    Lam

    ina

    (cm

    )

    0 2 4 6 8 10 12 14 16 18 20590

    595

    600

    Volu

    men

    del

    Ag

    ua

    (m3

    )

    Tiempo (Minutos)

    Figura 5.7. Caudales de entrada, salida, altura de lmina y volumen de un tanque con caudal de entrada escalonada.

  • %dX=U-Y(1,2);%%---------------------------------------------------------

    El listado de la funcin que calcula las salidas del sistema es:

    function Y=VerteY(t,X)%---------------------- VerteY.m -------------------------%% Clculo de Caudal de Salida y Altura de Lmina%%---------------------------------------------------------%%global A H L Qe1 Qe2 Qe3 tf%N=length(t);Y=zeros(N,2);for i=1:N

    % Caudal de Entradaif t(i)

  • 5.5. DETERMINACIN DE RETRASOS Y DERIVADASEn los procesos de flujo, como en el caso precedente, hay una variable de

    salida, caudal de salida, retrasado con respecto al caudal de entrada mientrashay rebose. En otros ejemplos de la industria es muy frecuente encontrar va-riables sometidas a retrasos, mostrndose a continuacin un mtodo aproxi-mado de clculo numrico de variables afectadas por retrasos.

    El clculo de una variable sujeta a un retraso se calcula teniendo en cuentaque la transformacin de Laplace de un retraso puro es:

    [ f(t )] = es F(s) Operador Transformada de Laplace.

    Siendo: Tiempo de retraso. s Variable compleja.

    Las aproximaciones de retrasos ms comunes son las aproximaciones dePade de primer y segundo orden:

    En procesos qumicos en los que ocurren tiempos muertos, como en una co-lunma de rectificacin o retrasos hidrulicos, es ms til la aproximacin me-nos comn:

    La aproximacin ms sencilla de aplicar, a la vez que provoca error mni-mo, salvo en los instantes iniciales, es la primera aproximacin mencionada.

    (5.9)y sx s

    s

    s

    ( )( ) =

    +

    12

    12

    e

    ns

    s

    n

    +

    1

    1

    e

    s

    s

    es s

    s s

    s

    s

    +

    +

    + +

    12

    12

    6 126 12

    2 2

    2 2

    APLICACIONES DE CLCULO NUMRICO 67

  • 68 INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

    Para el clculo de las variables retrasadas, haciendo uso de la integracinnumrica de la ecuacin (5.10), se necesitan conocer las derivadas de las va-riables a las que se someten los retrasos.

    Las derivadas se calculan basndose en la propiedad de que, en el dominiode Laplace, multiplicar por s, al pasar al dominio del tiempo es derivar:

    f (0) se suele despreciar, ya que nicamente tiene influencia en los mo-mentos iniciales. La aproximacin para el clculo de derivadas se muestra en la

    d tdt

    s F s =

    ( ) ( ) ( )0

    Siendo: x(s) Variable de la que se realiza el retraso. y(s) Variable igual a x(s) retrasada .

    Realizando la transformacin inversa de la ecuacin (5.9), se obtiene:

    De donde se obtiene la derivada de la variable retrasada:

    (5.10)

    Esta ecuacin integrada conduce a:

    El clculo implicado en diagrama de bloques se muestra en la Figura 5.8.

    y t x t x t y t dt x t( ) ( ) ( ( ) ( )) ( )= =

    2

    y x y x' ( ) '= 2

    y y x x+ = 2 2

    ' '

    x(t)

    1

    2/x(t- )

    Figura 5.8. Diagrama de bloques de un retraso de primer orden.

  • De la Figura 5.9, se obtiene:

    a s = 0,01 s b + b

    Pasando al dominio del tiempo se obtiene:

    a' = 0,01 b' + b

    Despejando b e integrando se obtiene:

    Este es un procedimiento aproximado para obtener la derivada de una fun-cin a travs de su integral.

    Para visualizacin rpida de la aproximacin del clculo de variables re-trasadas y derivadas, se elabora un programa de demostracin en el que la fun-cin de entrada es el tiempo al cuadrado, y la funcin retrasada, el tiempo alcuadrado retrasado en tres unidades.

    En el programa principal, RetraLan.m se definen los parmetros de ope-racin, tiempo, retraso, condicin inicial, integrador, la representacin grficay la tabla de resultados numricos.

    %------------------RetraLan.m ----------------------

    t=0:.1:12;global tau tau=3;y10=0; y20=0; [t,y]=odegil4('Retraso',t,[y10 y20],0.01); Y=y(:,1); Yr=y(:,2); subplot(211),plot(t,Y), grid axis([0 12 -2 145])

    ylabel('\fontsize{12} t2')subplot(212),plot(t,Yr), grid

    b a b dt= ( )100

    Figura 5.9, en donde a representa una variable a la que se le calcula su deriva-da, representando b su derivada.

    APLICACIONES DE CLCULO NUMRICO 69

    s

    1+0,01 s

    a b

    Figura 5.9. Diagrama de bloques del clculo aproximado de derivadas.

  • axis([0 12 -3 82])ylabel('\fontsize{12} (t-3)2')xlabel('\fontsize{12} t)T=t(1):t(length(t));Yn=round(spline(t,Y,T));Ynr=round(spline(t,Yr,T));[T Yn Ynr]%---------------------------------------------------

    En la funcin Retraso.m, se define la funcin de partida F, de la que seobtiene, a modo de exposicin, el clculo de la derivada numrica,dy(1)=100*(F-y(1)), de la que se obtiene la funcin retrasada y(2).

    %-----------------Retraso.m ------------------------function dy=Retraso(t,y) global tauF=t.2; % Funcion.dy(1)=100*(F-y(1)); % Derivada de Funcion. dy(2)=(y(1)-y(2))*2/tau-dy(1); % Funcion retrasada. dy=[dy(1);dy(2)];%---------------------------------------------------

    Los resultados numricos y grficos se obtienen segn:

    >> RetraLanans =

    t t2 (t-3)20 0 01 1 -12 4 -13 9 -14 16 05 25 46 36 97 49 168 64 259 81 36

    10 100 4911 121 6412 144 81

    70 INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

  • En el programa principal se hizo uso de la funcin spline, para obtenerdatos interpolados. Su sintaxis es:

    Yn=spline(X,Y,Xn)

    Su funcionamiento se pone de manifiesto en el ejemplo siguiente: Se tratade obtener los cuadrados de los nmeros enteros, por interpolacin de los cua-drados de los intermedios correspondientes.

    >> X=0.5:5

    X =0.5000 1.5000 2.5000 3.5000 4.5000

    >> Y= X.2

    Y =0.2500 2.2500 6.2500 12.2500 20.2500

    >> Xn=1:5

    Xn=

    1 2 3 4 5>> Yn=spline(X,Y,Xn)

    Yn =1 4 9 16 25

    APLICACIONES DE CLCULO NUMRICO 71

    0 2 4 6 8 10 120

    50

    100 t

    2

    0 2 4 6 8 10 120

    20

    40

    60

    80

    (t

    3)2

    t

    Figura 5.10. Resultado grfico del clculo de retrasos.

  • La interpolacin as conseguida es perfecta.En el programa principal se utiliz length, para suministrar el nmero de

    elementos de un vector:

    >> length(Xn)ans =

    5

    5.6. AJUSTE DE DATOS EXPERIMENTALES A UNA RECTA

    El ajuste de datos a una recta es un caso particular de polyfit corres-pondiente al primer grado. Aqu se muestra su clculo por varias razones:para mostrar el manejo de datos, para practicar la evaluacin de sumatorios conMatLab, y porque muchas funciones no lineales pueden transformarse en line-ales, siendo la recta la mejor prueba de hiptesis de correlacin.

    Los mejores coeficientes de la recta son los que consiguen hacer mnimo el su-matorio de las desviaciones al cuadrado, de los puntos experimentales a la rectapostulada. El mtodo se resume en las ecuaciones (5.11), (5.12), (5.13) y (5.14).

    La ecuacin de la recta buscada se expresa por la ecuacin (5.11).Y = m X + b (5.11)

    Con datos procedentes de medidas experimentales hay una desviacin:

    = Y m X b

    Elevando al cuadrado la desviacin, y extendiendo al conjunto de datos, seobtiene el sumatorio de las desviaciones al cuadrado:

    2 = Y 2 + m2 X 2 + N b2 2 m X Y 2 b Y + 2 m b X

    Los coeficientes se determinan de las condiciones del mnimo:

    Igualando a cero, y simplificando estas expresiones, se obtiene un sistemade dos ecuaciones con dos incgnitas:

    m X 2 + b X = X Ym X + N b = Y

    ddm

    m X X Y b X

    ddb

    N b Y m X

    22

    2

    2 2 2

    2 2 2

    =

    = +

    72 INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIEN