Download - Guia Rapida Para Matlab y Simulink
-
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