Está en la página 1de 112

INTRODUCCIN RPIDA

A MATLAB Y SIMULINK
PARA CIENCIA E INGENIERA

MANUEL GIL RODRGUEZ


Cientfico Titular del Consejo Superior
de Investigaciones Cientficas (CSIC)

INTRODUCCIN RPIDA
A 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 ninguna
forma o por cualquier medio, ya sea electrnico, mecnico,
por fotocopia, por registro u otros mtodos, sin el permiso
previo y por escrito de los titulares del Copyright.

Ediciones Daz de Santos, S. A.


Doa Juana I de Castilla, 22.
28027 MADRID

E-mail: ediciones@diazdesantos.es
Internet://http:www.diazdesantos.es/ediciones

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

Diseo de cubierta: Angel Calvete


Fotocomposicin e impresin: Fernndez Ciudad, S. L.
Encuadernacin: Rstica-Hilo, S. L.
Impreso en Espaa

ndice

Presentacin ...........................................................................................

XI

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 ..............................................................

1
1
1
2
3
5
7
8
9
11
11
12
13
16
16
17
17
18
18
19
19
19
20
21

VII

VIII

NDICE

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 transformacin de Laplace ..................................................

25
25
25
27
27
28
29
30
31
31
31
31
32

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 ...............................................................................

35
35
36
38
38
40
40
40

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 .........................................................................................

41
41
44
45
45
47
48

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 ...........................

51
51
51
51
52
53
57
59
62
67
72

33

NDICE

IX

5.6.1. Ajuste de funciones no lneales por linealizacin .......


5.7. Anlis Espectral .....................................................................
5.8. Evitando la divisin por cero y rebose ...................................

74
78
80

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 ................................

81
81
85
86
88

BIBLIOGRAFA .....................................................................................

93

NDICE ALFABTICO ..........................................................................

95

Presentacin

MatLab (MATrix LABoratory) comenz siendo un programa interactivo de


anlisis integrado, especializado en clculos matriciales. En muy poco tiempo
tuvo 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 febrero de 1989 para MS-DOS, Mac y Workstations, era la versin 3.5 y vena en
tres discos de 5 1/4, estaban disponibles las toolboxes de Signal Processing,
Control Systems, System Identification, State-Space Identification, RobustControl, 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 seales, Max, Min, Sum, Product, Cumulative, Cumulative Product, Mean, Median,
Sort... Las funciones matriciales incluyen el determinante, el inverso, valores y
vectores propios, descomposiciones, factorizaciones...
Desde las primeras versiones, MatLab dispona de potentes herramientas de
representaciones grficas, ya en 2-d como 3-d, que en el transcurso de las sucesivas versiones se vieron muy potenciadas, permitiendo exportar los cuadros
grficos a otras aplicaciones.
Esta obra abarca lo esencial de MatLab y Simulink, que ya no cambian con
las versiones que van saliendo. Est especialmente indicada para alumnos de
Ciencias, Ingeniera, Postgrado o profesionales que deseen familiarizarse, en un
tiempo mnimo con las principales herramientas de clculo suministradas por
MatLab a travs de ejercicios prcticos a lo largo de este manual.
Manuel GIL RODRGUEZ

XI

1
Primeros pasos en MatLab

1.1. INTRODUCCIN
MatLab, desde las primeras versiones dispuso de help y demo, para iniciacin rpida. La informacin suministrada a travs de los mens de estas ayudas, correspondientes a las ltimas versiones, crecieron de forma exponencial, siendo de utilidad prctica disponer de un libro resumen de MatLab, en
donde se encuentren los comandos de uso ms frecuente, a la vez que se muestren sus aplicaciones prcticas en ejercicios, desde lo ms sencillo, hasta otros
de mayor complejidad.
Este Captulo es adecuado para principiantes absolutos, y de afianzamiento
a 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 ventanas estar el cursor parpadeando a la derecha de >>, es la ventana de comandos desde donde se ejecutan los mismos, las otras son informativas:
>> 3 + 4
ans =
7
>> 3*5
ans =
15
>> 15/3
ans =
5
1

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

>> 15\3
ans =
0.2000
>> 23
ans =
8
>> sin(2*pi*30/360)
ans =
0.5000

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 este
espacio se utilizan los comandos who y whos.
Los archivos directamente accesibles desde el espacio de trabajo, se muestran 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

PRIMEROS PASOS EN MATLAB

>> t = t(:)
t =
1
4
7
10

% Crear el vector t en columna.

>> A = 2*t; B = 2;
>> who
Your variables are:
t

>> whos
Name
t
A
B

Size
1 4
1 4
1 l

Bytes
32
32
8

Class
double array
double array
double array

Grand total is 9 elements using 72 bytes


>> what
M-files in the current directory D:\MatLab\work
AjusNL
Datos
EcudifP
AjusN1Fun
Ecudif
Fun
MAT-files in the current directory D:\MatLab\work
Datos
MDL-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 1


elemento, de modo que son 9 elementos a 8 bytes por elemento, lo que hace un
total de 72 bytes.
A partir de la versin 6, release 12, MatLab incorpor workspace, potenciando la capacidad de whos.
1.4. VARIABLES
En MatLab no es necesario hacer declaraciones previas acerca de las variables. El contenido de las variables de caracteres ha de ir delimitado por el
signo '.
>> numero_de_visitantes = 25
numero_de_visitantes =
25

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

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 su
valor es 25.
size(numero_de_visitantes) % Dimensin de variables.
ans =
1

Nombre='Pepe';
size (Nombre)

% Variable de caracteres.

ans =
1

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 deben
contener espacios en blanco.
3. Los nombres de las variables no pueden coincidir con los nombres de las
keywords, 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'

PRIMEROS PASOS EN MATLAB

>> if = 5
??? if = 5
Error: Expected a variable, function, or constant, found=.

Los nombres de las variables pueden ser tan extensos como se quiera, pero
MatLab slo reconoce los 31 primeros caracteres.
Las variables se eliminan del espacio de trabajo con el comando clear:
clear
clear variables
clear global
clear functions
clear all
clear pipo*

Elimina las variables del espacio de trabajo.


Es equivalente al comando anterior.
Elimina las variables globales.
Elimina todas las funciones compiladas.
Elimina todas las variables, globales y funciones.
Elimina las variables que empiezan por pipo.

MatLab suministra amplia informacin adicional mediante help clear.


1.5. FORMATO DE NMEROS
MatLab presenta los resultados numricos en varios formatos, segn se expresa 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 format 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
for
positive, 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.

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

Al mostrar resultados numricos, MatLab sigue estas dos reglas:


1. MatLab intenta mostrar nmeros enteros. Si el entero es muy grande, se
presenta 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, se
muestran en formato exponencial.
A continuacin se muestran ejemplos demostrativos de formatos numricos:
>> 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
>> format rat
>> A

0.0001

A =
10000 1/10000

PRIMEROS PASOS EN MATLAB

1.6. PROGRAMAS
MatLab acepta comandos directos, para inmediatamente producir el resultado o ejecutar una serie de comandos almacenados en un archivo, con la extensin .m.
Un archivo.m, consiste en una secuencia de sentencias MatLab, posiblemente incluyendo referencias a otros archivo.m, o recursivamente a s mismo.
A estos archivos los llamamos programas MatLab, en ingls scripts. Las variables de los programas se mantienen en el espacio de trabajo, pudiendo ser invocadas en cualquier momento para ver su contenido.
En una sentencia, lo que sigue a % no se ejecuta, se considera un comentario.
Si se desea construir una tabla con inversos, cuadrados y races cuadradas
de 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, segn:
% ----------------Numeros.m ----------------------------------x=1:10; % Crea un vector de 1 a 10 de 1 en 1. Vector en lnea.
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 todas


las sentencias se finalizaron con ;, no se muestra ningn valor numrico. Al
ejecutar x, se obtendr la tabla desada:
>> Numeros
>> x
x =
1.0000
2.0000
3.0000
4.0000
5.0000
6.0000
7.0000
8.0000
9.0000
10.0000

1.0000
1.0000
0.5000
4.0000
0.3333
9.0000
0.2500
16.0000
0.2000
25.0000
0.1667
36.0000
0.1429
49.0000
0.1250
64.0000
0.1111
81.0000
0.1000 100.0000

1.0000
1.4142
1.7321
2.0000
2.2361
2.4495
2.6458
2.8284
3.0000
3.1623

Pulsando la tecla , se consiguen las lneas de los comandos previamente


ejecutadas.

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

1.7. FUNCIONES
El otro tipo de archivos utilizado por MatLab son las funciones, cuya primera caracterstica es que sus variables son locales en su entorno y no definidas
en el espacio de trabajo, ni en otras funciones.
Buena parte de la potencia de MatLab se basa en su extenso conjunto de
funciones, las bsicas y las distribuidas de forma separada para aplicaciones especficas, MatLab toolboxes, y otras que desarrollan los usuarios.
Las funciones toman unas variables de entrada para calcular unos datos de
salida, sea:
Fun( x ) =

1
1
+
5
2
( x 1) + 0,1 ( x 3)2 + 0, 2

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 resultados


de salida que se almacenan en y, que se muestran grficamente.
Hay funciones del sistema o construidas por un usuario, que toman diferente nmero de argumentos de entrada que de salida. As la funcin max, toma un
vector 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

PRIMEROS PASOS EN MATLAB

6
2

Figura 1.2. Representacin grfica de Fun.

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 declaracin de funcin.
4. Las variables del interior de las funciones son variables locales.
5. El conjunto de lneas consecutivas de comentarios que siguen a function, componen el texto de ayuda de esa funcin, obtenible mediante 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 lnea


de la funcin.
7. Si una funcin llama a un programa, ste es evaluado en el espacio de
trabajo de la funcin y no en el workspace de MatLab.
8. Cada funcin tiene su espacio de trabajo separado del de MatLab, de
modo que la conexin entre estos ambientes se realiza a travs de las variables de entrada y salida de la funcin.

10

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

9. Para compartir variables del interior de las funciones y del espacio de


trabajo, se declaran variables globales donde se necesiten mediante la
instruccin global.
>> global X a b

% Declaracin de variables globales

Para facilitar el manejo de funciones, MatLab incorpor recientemente @, y


feval, 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 el


primero evala directamente lo que se invoca, mientras que eval llama al interpretador completo de MatLab. La diferencia en tiempo de ejecucin de ambas 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

PRIMEROS PASOS EN MATLAB

11

1.7.2. Funciones en lnea


Un segundo modo de definir funciones, sin editar archivos, se logra con
inline:
>> 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 recursiva


En muchas aplicaciones se presenta la recursividad, funcin que en su interior se llama a s misma. El ejemplo ms secillo de recursividad es el clculo
del factorial de un nmero:
N! = N (N 1)!
definiendo 1! como 1.
La funcin Factorial.m, toma un nmero de entrada, y suministra como salida 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 parte


entera.
>> Factorial(3.3)
ans =
6

12

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

1.8. NMEROS COMPLEJOS


MatLab admite operaciones con nmeros complejos, permitiendo usar indistintamente 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)

PRIMEROS PASOS EN MATLAB

13

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 [], vector
en lnea, o con []', vector en columna. Los elementos se separan por espacios
o 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 y


logspace, ambos con dos o tres argumentos, y con :, ya mencionado:
>> x = logspace(0,2,5) % Vector de 5 componentes de 100 a
102.
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

>> y = x.2

% El punto antes del exponente


% hace que la exponenciacin
% sea elemento a elemento.

y =
0

>> a = [x;y]

16
% Crear una matriz anexando
% vectores.

14

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

a =
0
0

1
1

2
4

3
9

4
16

>> A = a'

% Crear la matriz A, transpues% ta de a.

A =
0
1
2
3
4

0
1
4
9
16

B = [A; 5 25]

% Aadir una lnea a una ma% triz.

B =
0
1
2
3
4
5

0
1
4
9
16
25

>> C = reshape(B,3,4)

% Reconfigurar la matriz B
% con 3 lneas y 4 columnas.

C =
0
1
2

3
4
25

0
1
4

9
16
50

>> C(2,:)=[]

%
%
%
%

C =
0
2

3
25

0
4

9
50

>> C(:,3) = []
C =
0
2

3
25

9
50

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

2
5

Eliminar la 2a lnea. Los


dos puntos indican para
todos los valores de esa
dimensin.

% Eliminar la 3a columna,
% 0 4.

PRIMEROS PASOS EN MATLAB

>> A2

15

% Diferencia entre y .

ans =
7
18

12
31

>> A.2
ans =
1
9

4
25

>> 1../A
ans =
1.0000
0.3333

0.5000
0.2000

>> det(A)
ans =
-1
>> inv(A)
ans =
-5.0000
3.0000

2.0000
-1.0000

Las exponenciaciones, elemento a elemento y matricial, tambin se realizan


con los comandos power y mpower, segn:
>> x =[2 3 4];
>> y = power(x,2)

% Equivalente a y = x.2

y =
4

16

>> x = [2 3;1 4];


>> y = mpower(x,2)
y
7
6

18
19

% Equivalente a y = x2

16

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

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 =
3
2

poly sobre las races devuelve los coeficientes del polinomio:


>> poly(r)
ans =
1

-5

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

-3

Cuyo resultado equivale a x3 + x2 + x 3.


La divisin de polinomios se realiza mediante deconv:
>> PolDiv = deconv(PolProd,Pol2)
PolDiv =
1

PRIMEROS PASOS EN MATLAB

17

1.10.2. Desarrollo en fracciones simples


Mediante residue, aplicado a dos polinomios, se obtienen fracciones
simples, cuya suma es equivalente al cociente de los polinomios:
>> P1 = [5 -20 9];
>> P2 = [1 -5 4];
>> [r,s,t] = residue(Pl,P2)
r =
3
2
s =
4
1
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 independiente:
5 x2 20 x + 9
3
2
=
+
+5
x 4 x 1
x2 5 x + 4

Si se conocen los numeradores, las races de los denominadores y los trminos independientes, se pueden generar los polinomios:
>> [p1,p2] = residue(r,s,t)
p1 =
5

-20

-5

p2 =

Siendo p1 y p2, los polinomios obtenidos, con los numeradores, races y


trminos 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

18

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

1.10.4. Integracin de polinomios


La integral de un polinomio se obtiene mediante polyint(p), o con
polyint(p,C); en el primer caso se supone que la constante de integracin
es 0, y en el segundo C:
>> polyint(p2)
ans =
0.3333

-2.5000

4.0000

4.0000

2.0000

>> polyint(p2,2)
ans =
0.3333

-2.5000

Equivalente a:
1 3 5 3
x x + 4x + 2
3
2

1.10.5. Interpolacin polinomial


Matlab permite varios modos de interpolacin, relacionados y descritos
en help interp1; a continuacin se muestran unos ejemplos:
>>
>>
do
>>

x = [2 4 6];
y = power(x,2);
de
y5 = interp1(x,y,5)

% Por defecto se utiliza el mto% interpolacin lineal.

y5 =
26
>> y5c = interp1(x,y,5,'cubic')
y5c =
24.8750
>> y5s = interp1(x,y,5,'spline')
y5s =
25

% Interpolacin cbica.

PRIMEROS PASOS EN MATLAB

19

1.11. matlabpath
El path de MatLab, llamado matlabpath, establece el camino para
buscar variables, programas y funciones de MatLab que sean llamados directamente desde la ventana de comandos, o durante la ejecucin de programas.
Al invocar un comando, MatLab lo busca, y ejecuta el que primero coincida con el nombre invocado, segn el siguiente orden:
1.
2.
3.
4.

Si es una variable del workspace.


Si es una funcin incorporada.
Si es un archivo.m presente en el directorio actual.
Lo busca siguiendo el orden establecido en matlabpath.

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


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

1. 12. lookfor
lookfor aplicado a una variable de caracteres, busca esos caracteres en la
primera lnea de comentarios de los archivo.m encontrados en el matlabpath.
>> lookfor Fun.m
Fun.m: %---------------- Fun.m --------------------

1.13. LATEX
La funcin latex(A) devuelve la representacin LATEX de una expresin
simblica:
>> 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}

20

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

1.14. FUNCIONES DEL TIEMPO


MatLab suministra datos relacionados con el tiempo, como una variable de
caracteres, 12-Oct-1498, como una variable numrica, 739476 o como
un 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 segundos].


now devuelve la fecha y hora en un nmero, datestr convierte una fecha
numrica 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

29

>> datenum(date)
7.3161e + 05

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


>> date
ans =
29-Jan-2003

Numerosas transformaciones de fechas pueden encontrarse mediante help


datestr.

PRIMEROS PASOS EN MATLAB

21

Para temporizaciones se usan tic, para comienzo, y toc para finalizar la


temporizacin 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 presenta
una ventana de Historia de Comandos, en donde se listan las rdenes efectuadas, de modo que en una sesin nueva se pueden buscar comandos ejecutados
en sesiones precedentes.
Para guardar el espacio de trabajo en un archivo, para posteriormente recuperarlo, se utilizan los comandos load y save, segn:
>> clear
>> X=rand(2,3)
X =
0.3046
0.1897

0.1934
0.6822

>> Y=round(X)
Y =
0
0

0
1

0
1

0.3028
0.5417

22

>>
>>
>>
>>
>>
>>

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

save mi_archivo
clear
who
load mi_archivo
who

Your variables are:


X
Y
>> X
X =
0.3046
0.1897

0.1934
0.6822

0.3028
0.5417

>> Y
Y =
0
0

0
1

0
1

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


significado:
>> A=[1.5 2.49; 0.2 9.99]
A =
1.5
0.2

2.49
9.99

>> ceil(A)
ans =
2
3
1 10
>> floor(A)
ans =
1
0

2
9

save y load permiten salvar o cargar variables determinadas, separadas


por espacios, a la vez que admiten el formato ASCII, aadiendo al final de estos comandos -ascii, como se especifica en el siguiente ejemplo:
>> save exp_mayo.dat X -ascii

PRIMEROS PASOS EN MATLAB

23

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 almacena una copia de todas las entradas realizadas desde el teclaclo en un archivo,
en el directorio actual, en formato ASCII:

2
Clculo simblico

2.1. INTRODUCCIN
MatLab 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 internacionalmente.
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, simplificar, factorizar, derivar, integrar, lmites, resolucin de sistemas de ecuaciones algebraicas o diferenciales, transformaciones integrales, la mayora de
las 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 SIMBLICAS
En Matlab hay dos tipos de objetos, numricos y literales, strings. La Symbolic Math Toolbox usa objetos simblicos para representar variables y operadores, por ejemplo:
>> x=sym('x')
x =
x

25

26

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

Un objeto numrico puede convertirse en simblico segn:


>> M=magic(2)

% M, variable numrica.

M =
1
4

3
2

>> N=sym(M)

% N, variable simblica.

N =
[1, 3]
[4, 2]
>> syms a b c d
>> Mat=[a,b;c,d]

% Definicin de simblicos.

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 - b
c + d

Para la simplificacin y transformaciones de expresiones se utilizan los operadores collect, expand, horner, factor, simple y simplify, algunos de los cuales se aplican en lo que sigue.
1/2

2 15

1/2

/5 sin(15

/2 t) exp(3/2 t)

80
70
60
50

40
30
20
10
0
10
3

0
t

Figura 2.1. Representacin grfica de y.

CLCULO SIMBLICO

27

2.3. EJEMPLOS DE CLCULO SIMBLICO


2.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)

2/5 15

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

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


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

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


>> y
Y=
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, mediante 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)

28

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

1/2

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

1/2

sin(1/2 15

t)+15

1/2

t))

60
40
20
0
20
40
60
80
100
3

0
t

Figura 2.2. Representacin grfica de dy.

2.3.2. Sistemas de ecuaciones


Los sistemas de ecuaciones se resuelven mediante la instruccin solve, tomando como argumentos el primer miembro de las ecuaciones igualadas a 0,
segn:
x+ y= 5
x 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 devuelve


una expresin numrica, que se ejecuta mediante double, transformacin a
doble precisin.

CLCULO SIMBLICO

29

2.3.3. Ecuaciones diferenciales


La funcin dsolve calcula las soluciones simblicas de ecuaciones diferenciales ordinarias. Los argumentos de dsolve deben ser expresiones de caracteres, strings, conteniendo el signo =. Para indicar la derivada primera se
utiliza 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 siguiente ecuacin diferencial:
d2 y
dy
+3
+ 6y = 0
2
dt
dt

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 se


muestran 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)

30

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

2.4. TRANSFORMACIN DE LAPLACE E INVERSA


La transformacin de Laplace calcula la integral:

 (s) = 0 f (t) e st dt

permite transformar f(t) en el dominio del tiempo, a (s), en el dominio de la


variable 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 compleja 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)

CLCULO SIMBLICO

31

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 indistintamente taylor, con 3 o 4 argumentos:
>> syms x
>> f=exp(-x);
>> pretty(taylor(f,x,3,8))
2
exp(-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 toma
como argumento la expresin con sintaxis de Maple V, mediante las instrucciones 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 la
transformacin de Laplace, es necesario cargar previamente el paquete de
transformaciones integrales with(inttrans):
>> maple('with(inttrans)')
% Se carga el paquete de ...
% transformaciones integrales.

32

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

ans =
[addtable, fourier, fouriercos, fouriersin, hankel, hilbert,...
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 = 0
con 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)

CLCULO SIMBLICO

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) = 1
y (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 =

33

34

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

{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)}

1
y (t ) = (e 4 t 1) e 3t
4

3
Sentencias de control de flujo

3.1. input
La forma de input, se indica en los ejemplos siguientes, segn se trate de
variables literales o numricas:
>> R=input('> Cul es tu nombre ? ','s')
> Cual es tu nombre ? Pepe
>> ['Hola',R]
ans =
Hola Pepe
>> ['Hola';R]
Hola
Pepe
>> P=input('> Dime el radio de la rueda ? ')
> Dime el radio de la rueda ? 5
>> P+1
ans =
6

35

36

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

3.2. if - else - end


El salto condicional de flujo ms sencillo, se construye de la siguiente manera:
if condicin
comandos
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 relacionales
eq
ne
lt
gt
le
ge

==
~=
<
>
<=
>=

Igual
No igual
Menor que
Mayor que
Menor que o igual
Mayor que o igual

En la primera de las siguientes instrucciones se responde con hola, ya


que es verdad que 'a' es igual a 'a'. En la segunda esto se obvia, dado que la
condicin es falsa.
>> if 'a'=='a', 'hola', end
ans =
hola
>> if 'a'=='b', 'hola', end

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


siguiente construccin:
if condicin
Ejecucin de comandos de esta zona,
si la condicin es verdad
else
Ejecucin de comandos de esta zona,
si la condicin es falsa
end

Si hubiese tres alternativas, la construccin sera:

SENTENCIAS DE CONTROL DE FLUJO

37

if condicin 1
Ejecucin de instrucciones si la condicin 1 es verdad
elseif condicin 2
Ejecucin de instrucciones si la condicin 2 es verdad
elseif condicin 3
Ejecucin de instrucciones si la condicin 3 es verdad
else
Ejecucin de instrucciones si ninguna condicin es
verdad
end

En un comercio se vende un vino a un precio condicionado por la cantidad


requerida. Hasta 5 botellas el precio unitario es de 6 , desde 6 a 12 botellas el
precio es de 5,5 , y a partir de 13, a 5 la botella. Elaborar un programa, que
pregunte cuntas botellas se desean e indique el precio unitario y el total del
gasto.
%------------ Vino.m -------------C=input('Cuantas Botellas ?');
if C<=5
Pu=6;
Pt=Pu*C;
elseif C<=12
Pu=5.5;
Pt=Pu*C;
else
Pu=5;
Pt=Pu*C;
end
Pu
Pt
% ----------------------------------

A continuacin se muestra la ejecucin de este programa:


>> Vino
Cuantas Botellas ? 8
Pu =
5.5000
Pt =
44

38

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

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 verdad.


Se expone a continuacin la generacin de una tabla que suministre los inversos, cuadrados y races cuadradas del 1 al 3:
% ------------------ Tabla.m -----------------I=0;
while I<4
I=I+1;
J(I)=I;
A(I)=1/I;
B(I)=power(I,2);
C(I)=sqrt(I);
end
D=[I;J;A;B;C];
D=reskape(D,3,4);
% -------------------------------------------->> Tabla
>> D
D =
1.0000
2.0000
3.0000

1.0000
0.5000
0.3333

1.0000
4.0000
9.0000

1.0000
1.4142
1.7321

3.4. for - end


El bucle o lazo de control for, permite realizar un conjunto de instrucciones iguales, variando uno o varios subndices, su forma genrica es:
for I = vector
Comandos
end

A continuacin se muestra la generacin de la tabla anterior utilizando


for.

SENTENCIAS DE CONTROL DE FLUJO

39

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


J(I)=I;
A(I)=1/I;
B(I)=power(I,2);
C(I)=sqrt(I);
end
D=[I;J;A;B;C];
D=reshape (D,3,4);
% ------------------------------------>> Tabla1
>> D
D =
1.0000
2.0000
3.0000

1.0000
0.5000
0.3333

1.0000
4.0000
9.0000

1.0000
1.4142
1.7321

El funcionamiento de for, en el programa anterior, comienza tomando I el


valor de 1, recorriendo los comandos del bucle de arriba hacia abajo, crendose J(1) con el valor 1, A(1) con el valor del inverso de 1... Al llegar al final, I se
incrementa 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 modo
que continuar el ciclo, se crear J(2) con el valor 2, A(2) con el valor de 1/2 y
as sucesivamente. Cuando I alcance el valor de 4 ya no se ejecutarn las sentencias 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, anidamiento, para ejercitar el funcionamiento de los subndices.
Para cada variacin de un valor del ndice del for externo, se ejecutan todas las variaciones del interno. El funcionamiento del siguiente ejemplo comienza con I=1 y J, tomando los valores de 1, 2, 3 y 4, entonces I pasa al valor
2, y J vuelve a tomar los valores de 1, 2, 3 y 4, y as hasta completar la ltima
vuelta con I=3.
% ------------- Tabla2.m ---------------------A=[];
% Crear una matriz vacia.
x=[1 -1 2 0.5];
for I=1:3
for 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 la


J vara en horizontal, del principio al final de cada lnea, tomando siempre los

40

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

valores de 1 para la primera columna, 2 para la segunda, 3 para la tercera y 4


para 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
2.0000
3.0000

1.0000
0.5000
0.3333

1.0000
4.0000
9.0000

1.0000
1.4142
1.7321

3.5. continue
Si aparece un continue en un lazo for end o while end, el clculo
pasa 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 se
puentea a la siguiente instruccin del end de ese bucle, es decir se finaliza ese
bucle.
3.7. switch end
switch ejecuta un grupo determinado de sentencias basado en el valor de
una variable o expresin:
switch Expresin
% Escalar o de caracteres.
case Valor 1
Sentencias % Se ejecutan si Expresin igual Valor 1.
case Valor 2
Sentencias
.
.
.
otherwise
Sentencias % Se ejecutan para Valor no contemplado.
end

4
Grficos en MatLab

4.1. TIPOS DE GRFICOS


Desde las primeras versiones, MatLab traa suficientes utilidades grficas,
que en las versiones posteriores fueron incorporando cantidades ingentes de
nuevas 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 grficos
mencionados.
41

42

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

4 >> subplot(221)
>> fplot(Fun,[pi pi])
2

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

2
4
6
2

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

Figura 4.1. Diferentes tipos de grficos.


5

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

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

2
0

0
2
4

6
2

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

120
150

90 0,5
0,4 60
0,3
0,2

180

330

210
240
5
2

30

Figura 4.2. Matriz de grficos.

270

300

GRFICOS EN MATLAB

>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>

43

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, obtenida


con las instrucciones:
x=[-3:.1:4]';
y=Fun(x);
y1=sin(x);
y2=tan(x);
A=[y,y1,y2];
plotmatrix(x,A,'h-')
Ttulo del grfico
6
Funcin

4
2
0
2
4
1
Seno de X

>>
>>
>>
>>
>>
>>

Seno de X
0,5
0

0,5
1
20

Tangente de X
0
20
3

0
1
Eje de las X

Figura 4.3. Matriz de grficos.

44

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

35
30
25
20
15
10
5
0
1
1

0,5
0,5

0,5

0,5
1

Figura 4.4. Grfico en 3-d.

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 GRFICOS


Las 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..., posicin)
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 fechas, vase help datetick.

GRFICOS EN MATLAB

6%

45

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

19%

44%

31%

Figura 4.5. Grfico en tarta.

4.3. TEXTOS EN GRFICOS


Para poder mostrar ecuaciones en cuadros grficos, ya sea en las leyendas
de los ejes, o en otras partes del cuadro, MatLab incorpora un subconjunto de
comandos LATEX, y una coleccin de smbolos de uso frecuente en las ecuaciones, entre otros se encuentra el alfabeto griego, minsculas y maysculas.
El conjunto de caracteres puede verse en la documentacin en lnea de
MatLab, 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 nombre
en ingls precedido de \, con la primera letra en minscula o mayscula.
En el siguiente ejemplo se muestra cmo poner varias lneas de texto en las
leyendas de los ejes, cmo incorporar una ecuacin en un eje y en el interior de
cuadros 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}')

46

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

5
4
3

y=sin(x) e - x

y= sin(x) e - x

1
0
1
2
3
4
5
10

10

Eje de las X
Distancia m

Figura 4.6. Ecuaciones en el interior de cuadros grficos.

4.4. LAPRINT
Al incluir cuadros grficos procedentes de MatLab, en textos LATEX, escalados ya con resizebox o scalebox, suele haber recortes indeseados y
desproporcin en los textos de los cuadros grficos en los documentos finales.

6
4
2
0
2
4
6
1

8
1

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

GRFICOS EN MATLAB

47

LaPrint es un archivo, laprint.m, cuya versin ms reciente puede obtenerse en www.uni-kassel.dr/~linne, que reemplaza todas las anotaciones
de 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, usando
epsfig y psfrag, de modo que la figura incorporada en el documento final sea
idntica, incluidas sus fuentes de texto, a la figura original en MatLab.
Para utilizar laprint.m, es necesario copiarlo a cualquier carpeta del
matlabpath. Una vez que se ha construido el cuadro grfico en MatLab, se
ejecuta laprint.m en la ventana de MatLab. El archivo.tex producido,
se inserta en el documento LATEX, en donde convenga, y el archivo.eps
en la carpeta correspondiente.
4.5. ESTILOS DE LNEAS, MARCAS Y COLORES
Los estilos de lneas, marcas y colores se presentan en la Tabla 4.1.
Smbolo
b
g
r
c
m
y
k
w

Color
Azul
Verde
Rojo
Cian
Magenta
Amarillo
Negro
Blanco

Smbolo

Marca

Smbolo

o
x
+
*
s
d

M
<
>
p
h

o
x
+
*

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 lneas 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'), grid
axis([-4*pi,4*pi,-.7,1])
text(2,sin(2).*exp(-.25*abs(2)),...
'\fontsize{16}\leftarrow sin(t)\cdote^{-0.25\cdotabs(t)}
')

48

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

xlabel('\fontsize{l5} t')
ylabel('\fontsize{l5} sin(t)\cdote^{-0.25\cdotabs(t)}')
hold on
a=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])

cos(t)e0,25 abs(t)
0,8
0,6

sin(t)e 0,25abs(t)

sin(t)e 0,25 abs(t)

0,4
0,2
0
0,2
0,4
0,6
10

0
t

10

Figura 4.8. Gruesos de lneas, color...


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

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

GRFICOS EN MATLAB

49

6
4

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

2
0
2
4
6
2

6
4
2

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

0
2
4
6
2

Figura 4.9. Relleno de reas en grficos.

33%

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

8%

14%

25%

19%

Valor destacado

Figura 4.10. Grfico en tarta en 3-d.

5
Aplicaciones de clculo numrico

5.1. INTEGRACIN NUMRICA


Matlab dispone de dos funciones para integracin, quad, basado en la regla
de Simpson, y quadl, evaluacin mediante la tcnica de cuadratura de Lobatto.
En el siguiente ejemplo se muestra el clculo de la integral de la funcin
Fun, 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 OPTIMIZACIN


Las principales funciones de MatLab para optimizacin son: fminbnd, que
encuentra el mnimo de una funcin de una variable; fminsearch, correspondiente a fmins de versiones anteriores, calcula mnimos de funciones
multivariables; lsqcurvefiting para ajustes de datos a diferentes tipos
de 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 segn:
51

52

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

>> 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 instruccin
fsolve, cuya aplicacin se realiza segn el ejemplo que sigue.
Sea el sistema:
Sea el sistema

= 7, 389

x+y=5
x y = 1
e z x

La solucin se consigue con el programa EcusP.m


% --------------- EcusP.m ---------------------------clear
Opciones=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);
% ------------------------------------------------------------

APLICACIONES DE CLCULO NUMRICO

53

La ejecucin de EcusP produce el siguiente resultado:


> EcusP
Optimizacin terminated successfully:
Relative function value changing by less than OPTIONS.TolFun
x =
2.000
3.000
1.000
>>

5.2.3. Minimizacin y ajuste de datos


El objetivo de fminsearch es encontrar un mnimo de una funcin multivariable sin restricciones. Se invoca de la forma:
pk=fminsearch('pHAjusMin',[3 l0],Opciones)

En este caso, se llama a la funcin a minimizar, pHAjusMin, suministrando a continuacin los valores iniciales de los parmetros a minimizar, siendo
opcional aadir una variable de opciones, seleccionables con optimset.
La aplicacin y funcionamiento de fminsearch se comprende fcilmente 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 funcin del pH, datos experimentales.
Las reacciones de biodegradacin, actividad microbiana, transcurren a un
pH ptimo, prximo a la neutralidad y disminuyen hasta anularse, al separarse
a zonas agresivas, como son las zonas de pHs cidos o alcalinos.
El efecto del pH en la velocidad especfica de generacin de lodos se representa adecuadamente por una funcin tipo campana:
( pH ) =

1
1 + 10

pk1 pH

+ 10 pH pk2

(5.1)

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

54

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

1
0,9
pk1 = 5,2036
0,8
pk2 = 10,1128
0,7

(pH)

0,6
0,5
0,4
0,3
0,2
0,1
0

10

12

14

pH

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

El listado del ajuste mediante la ecuacin (5.1), se presenta a continuacin:


% --------------- pHAjus.m ---------------------------clear,clf
global pH mu
pH=[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 on
pHc=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
%--------------------------------------------------

APLICACIONES DE CLCULO NUMRICO

55

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 este


caso minimizar la suma de los cuadrados de las desviaciones de los experimentales a los calculados.
La funcin lsqcurvefit es ms especfica para el ajuste de datos; se ejecuta 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 representa los valores iniciales de partida, X e Y son los datos experimentales, LI
representa el lmite inferior de los valores de los parmetros a calcular, LS es el
lmite superior, y Opciones es un conjunto de valores en los que se definen
parmetros 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);
%-----------------------------------------

56

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

En la Figura 5.2 se muestra el resultado de este ajuste, en la que se muestran


los valores de partida y los encontrados, teniendo en cuenta que a cada Y, se le
sum aleatoriamente una cantidad comprendida en el intervalo 0.5.
6
5

A= 2

Ac=2,096

B=0,2

Bc=0,19176

Asen Xe BX

3
2
1
0
1
2
3
8

0
X

Figura 5.2. Ajuste de datos con Isqcurvefit.

En el ajuste de datos experimentales a funciones es frecuente probar con polinomios, para ello MatLab desarroll la funcin polyfit, cuya utilizacin se
muestra en el ejemplo siguiente.
30
25
Ac=0,95551
Bc= 4,6119
Cc= 5,6322

x 2+5x+6

20
15
10
5
0
5
8

3
x

Figura 5.3. Ajuste de datos con polyfit.

APLICACIONES DE CLCULO NUMRICO

57

Se definen 10 valores de x, linealmente espaciados, a los que se le aplica


una 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 polyfit
sobre x e Y, se pretende recalcular los coeficientes del polinomio original, segn
las 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 ECUACIONES


DIFERENCIALES
Las ecuaciones diferenciales que representan a los procesos reales suelen
ser ecuaciones diferenciales no lineales, impidiendo su integracin simblica,
de modo que es necesario recurrir a mtodos numricos, cuya solucin til ser
una 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 diferenciales. Las funciones ms utilizadas son ode23 y ode45, basadas en el
mtodo de Runge-Kuta de 2 y 4 parmetros respectivamente, algunas de las
otras funciones se utilizan para ecuaciones con rigideces, stiff.
Las funciones de integracin mencionadas son de paso de integracin variable, 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 integracin se reduce a h/2, si la superan el paso de integracin se incrementa, y
as sucesivamente. En opciones de integracin se posibilita limitar el paso de
integracin a topes mximo y mnimo.
En ocasiones ocurre que integrando una ecuacin diferencial en un determinado valor existen diferencias significativas en la solucin encontrada,
an reducindose sucesivamente el paso de integracin, que si se supera un
nmero determinado de reducciones, el sistema se para a causa de valores
singulares, pudiendo ser de utilidad disponer de una funcin de integracin de
ecuaciones diferenciales de paso fijo, definido por el usuario, para lo cual se
elabor la funcin odegil4, cuyo listado y aplicaciones se muestra ms adelante.
Los mtodos numricos evalan nicamente ecuaciones diferenciales
de primer orden, de modo que para evaluar ecuaciones diferenciales de orden superior, han de definirse variables auxiliares para componer sistemas

58

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

de ecuaciones diferenciales de primer orden, equivalentes a las de orden superior.


En el Captulo anterior se resolvi simblicamente la ecuacin:
d2y
dy
+3
+ 6y = 0
2
dt
dt

(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 de
primer grado:
z' = 3z 6y

(5.3)

y' = z

(5.4)

Se pretende integrar desde hasta , para lo cual es necesario conocer los


valores 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 las


ecuaciones 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])
%---------------------------------------------------

APLICACIONES DE CLCULO NUMRICO

59

250

Funcin y derivada

200
150

100
y

50
0
50
100

0
Tiempo

Figura 5.4. Grfico del resultado de la integracin numrica.

En el siguiente listado se muestra el programa de definicin de las ecuaciones 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)=z
dy(2)=y(1);
% y(2)=y
dy=[dy(1);dy(2)];
%-----------------------------------------------------------

5.3.1. Mtodo de Runge-Kuta


El mtodo ms comn de resolucin numrica de ecuaciones diferenciales
es el mtodo de Runge-Kuta de cuarto orden, cuya aplicacin se resume a
continuacin.
Sean las ecuaciones diferenciales tales como:

60

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

d y1
= 1 (t, y1 , y2 , yn )
dt
d y2
= 2 (t, y1 , y2 , yn )
dt
M
d yn
= n (t, y1 , y2 , yn )
dt

Su integracin se realiza evaluando los siguientes parmetros:


pk = h (tk , yk )
h
p
qk = h tk + , yk + k

2
2
h
q
rk = h tk + , yk + k

2
2
sk = h (tk + h, yk + r )

Las ecuaciones integradas numricamente se obtienen mediante:


yk ,i+1 = yk ,i +

pk + 2 qk + 2 rk + sk
6

Para integracin de ecuaciones diferenciales por el mtodo de Runge-Kuta


de cuatro parmetros se elabor la funcin odegil4.m de paso de integracin
fijo:
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;

APLICACIONES DE CLCULO NUMRICO

61

N=(x(length(x))-x(1))/h;
Ne=length(y0);
for I=1:N
T=t(I);
Y=y(I,:);
for J=1:Ne
p=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);
end
t(I+1)=t(1)+h*I ;
Inc=(p+2*q+2*r+s)/6;
y(I+1,:)=y(I,:)+Inc;
end
y=spline(t,y',x);
y=[reshape(y,Ne,length(x))]';
t=x;
%-------------------------------------------------------------

La aplicacin prctica se materializa en el siguiente ejemplo, en el que se


evala a modo de demostracin la integracin de 2t, 3t2, 4t3 y cos(x), cuyas 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]
ans =
t
0
1.0000
2.0000
3.0000
4.0000
5.0000

% Presentacin de resultados.
t2
0.0000
1.0000
4.0000
9.0000
16.0000
25.0000

t3
0.0000
1.0000
8.0000
27.0000
64.0000
125.0000

t4
seno(t)
0.0000
0.0000
1.0000
0.8415
16.0000
0.9093
81.0000
0.1411
256.0000 -0.7568
625.0000 -0.9589

62

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

5.4. MODELO DINMICO DE UN TANQUE


Cuando 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 lquido por encima del borde de vertido. Esta lmina adquiere un espesor dependiente del caudal de entrada y de las dimensiones del tanque. A su vez, la
altura de esa lmina provoca la cuanta del caudal de salida.
El caudal de entrada es una variable impuesta, entrada, en simulacin se le
asignarn diferentes valores para observar la respuesta del sistema. El volumen
indicar el estado del sistema. La altura de lmina y caudal de salida constituyen la salida del sistema.
Siguiendo la nomenclatura del Anlisis de Sistemas, este sencillo proceso se
muestra en la Figura 5.5.

X
V

Qi

Qe
h

Figura 5.5. Esquema general de un sistema dinmico.

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.

L
h
Qe

Qi

V
H
A

Figura 5.6. Esquema de un tanque con rebosadero lateral.

APLICACIONES DE CLCULO NUMRICO

63

Considerando que el lquido circulante es agua, el caudal que sale por un


vertedero rectangular, [m3/s], de longitud L [m], viene dado por la expresin de
Bazin, ecuacin (5.5), de uso general en Francia:
Q = L h1,5 2 g

(5.5)

es un coeficiente que depende de la altura de lmina h [m], y de la profundidad del tanque H [m], segn la ecuacin (5.6).
= 0, 405 +

0, 003
h2
1 + 0, 55
h
( H + h)2

(5.6)

El caudal de salida, calculado con este procedimiento, es vlido para alturas


de lmina de 2,5 a 80 cm.
La variacin del volumen de agua en el tanque, es la diferencia de los
caudales de entrada al de salida, segn la ecuacin (5.7).
dV
= Qi Qe
dt

(5.7)

La altura de la lmina ser el volumen total de agua entre la seccin, menos


la altura del rebosadero, segn la ecuacin (5.8):
h=

V
H
A

(5.8)

Para resolver el ejemplo numrico utilizando un programa en MatLab, se


dimensiona el tanque con rea de la base de 150 m2, longitud de vertedero 10
m y altura 4 m. El caudal medio de entrada se fija en 100 m3/h, con variaciones de 50%, como es el caso de un reactor biolgico, alimentado con caudales mnimos en horas nocturnas y mximo en horas diurnas. El tiempo de
anlisis para este ejemplo se fij en 20 minutos, suficiente para observar
esta dinmica.
El programa de clculo se estructura en tres partes, un programa y dos
funciones. La primera funcin calcula el estado del sistema, volumen de agua
en el tanque X, en funcin de la diferencia de caudales de entrada, impuesto, y
del de salida. La segunda funcin calcula las salidas Y, altura de lmina y caudal de salida. En el programa principal se definen los datos de partida, desde el
que se llama a la primera funcin, y sta a la segunda, para finalmente realizar
los clculos requeridos y presentacin grfica de resultados.

64

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

El listado del programa principal es:


%--------------------- Vertedero.m ----------------------%
clear, clf
global 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)')

APLICACIONES DE CLCULO NUMRICO

65

%
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
%---------------------------------------------------------

Caudales (m3 /h)

150
100
50

Volumen del Agua (m3 )

Altura de Lamina (cm)

0
0

10

12

14

16

18

20

10

12

14

16

18

20

10
12
Tiempo (Minutos)

14

16

18

20

10
5
0

600

595

590

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


con caudal de entrada escalonada.

66

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

%
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 Entrada
if t(i)<tf/3
Y(i,1)=Qe1;
elseif t(i)<2*tf/3
Y(i,1)=Qe2;
else
Y(i,1)=Qe3;
end
h=X(i)/A-H;
if h<=0
Y(i,2)=0; Y(i,3)=0;
else
mu=0.405+0.003/h*(1+ 0.55*h2/(h+H)2);
% Caudal de salida y altura de lmina
Y(i,2)=mu*L*h*(2*9.8*h)(1/2);
Y(i,3)=h;
end
end
%---------------------------------------------------------

En la Figura 5.7 se representan los resultados de la simulacin obtenida,


caudal de salida, altura y volumen de lmina de un tanque alimentado con un
caudal de entrada escalonado.
Observando la Figura 5.7 se aprecia que la dinmica de este proceso no es
instantnea; al aumentar el caudal de entrada, la altura de lmina aumenta de
forma gradual, tardando en este ejemplo alrededor de 5 minutos en alcanzar el
estado estacionario. El caudal de salida, por ser funcin de la altura de la lmina, lleva una dinmica anloga.

APLICACIONES DE CLCULO NUMRICO

67

5.5. DETERMINACIN DE RETRASOS Y DERIVADAS


En los procesos de flujo, como en el caso precedente, hay una variable de
salida, caudal de salida, retrasado con respecto al caudal de entrada mientras
hay rebose. En otros ejemplos de la industria es muy frecuente encontrar variables sometidas a retrasos, mostrndose a continuacin un mtodo aproximado de clculo numrico de variables afectadas por retrasos.
El clculo de una variable sujeta a un retraso se calcula teniendo en cuenta
que 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 de
Pade de primer y segundo orden:

e s

s
2

1+ s
2
1

2 s 2 6 s + 12
2 s 2 + 6 s + 12

En procesos qumicos en los que ocurren tiempos muertos, como en una colunma de rectificacin o retrasos hidrulicos, es ms til la aproximacin menos comn:
e s

1
s + 1
n

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

y( s ) 1 2 s
=
x(s) 1 + s
2

(5.9)

68

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

Siendo:

x(s)
y(s)

Variable de la que se realiza el retraso.


Variable igual a x(s) retrasada .

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


y+

y' = x x'
2
2

De donde se obtiene la derivada de la variable retrasada:


y' =

2
( x y) x'

(5.10)

Esta ecuacin integrada conduce a:


y( t ) = x ( t ) =

2
( x (t ) y(t )) dt x (t )

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


x(t)
2/

x(t- )

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

Para el clculo de las variables retrasadas, haciendo uso de la integracin


numrica de la ecuacin (5.10), se necesitan conocer las derivadas de las variables a las que se someten los retrasos.
Las derivadas se calculan basndose en la propiedad de que, en el dominio
de Laplace, multiplicar por s, al pasar al dominio del tiempo es derivar:
d (t )
= s F( s) (0)

dt

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

APLICACIONES DE CLCULO NUMRICO

69

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

1+0,01 s

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

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:

b = 100 a b dt

Este es un procedimiento aproximado para obtener la derivada de una funcin a travs de su integral.
Para visualizacin rpida de la aproximacin del clculo de variables retrasadas y derivadas, se elabora un programa de demostracin en el que la funcin de entrada es el tiempo al cuadrado, y la funcin retrasada, el tiempo al
cuadrado retrasado en tres unidades.
En el programa principal, RetraLan.m se definen los parmetros de operacin, tiempo, retraso, condicin inicial, integrador, la representacin grfica
y 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

70

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

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 se


obtiene, 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 tau
F=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:


>> RetraLan
ans =
t
t2 (t-3)2
0
0
0
1
1
-1
2
4
-1
3
9
-1
4
16
0
5
25
4
6
36
9
7
49
16
8
64
25
9
81
36
10
100
49
11
121
64
12
144
81

APLICACIONES DE CLCULO NUMRICO

71

t2

100

50

0
0

10

12

6
t

10

12

80

(t3)2

60
40
20
0
0

Figura 5.10. Resultado grfico del clculo de retrasos.

En el programa principal se hizo uso de la funcin spline, para obtener


datos interpolados. Su sintaxis es:
Yn=spline(X,Y,Xn)

Su funcionamiento se pone de manifiesto en el ejemplo siguiente: Se trata


de obtener los cuadrados de los nmeros enteros, por interpolacin de los cuadrados de los intermedios correspondientes.
>> X=0.5:5
X =
0.5000

1.5000

2.5000

3.5000

4.5000

2.2500

6.2500

12.2500

20.2500

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

Yn =
1

16

25

72

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

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 correspondiente al primer grado. Aqu se muestra su clculo por varias razones:
para mostrar el manejo de datos, para practicar la evaluacin de sumatorios con
MatLab, y porque muchas funciones no lineales pueden transformarse en lineales, siendo la recta la mejor prueba de hiptesis de correlacin.
Los mejores coeficientes de la recta son los que consiguen hacer mnimo el sumatorio de las desviaciones al cuadrado, de los puntos experimentales a la recta
postulada. 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=mX+b

(5.11)

Con datos procedentes de medidas experimentales hay una desviacin:

=YmXb
Elevando al cuadrado la desviacin, y extendiendo al conjunto de datos, se
obtiene 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:
d 2
= 2 m X 2 2 X Y 2 b X
dm
d 2
= 2 N b 2 Y + 2 m X
db

Igualando a cero, y simplificando estas expresiones, se obtiene un sistema


de dos ecuaciones con dos incgnitas:
m X 2 + b X = X Y
m X + N b = Y

APLICACIONES DE CLCULO NUMRICO

73

Resolviendo el sistema se obtienen los coeficientes de la recta:


b=

Y X 2 X X Y
N X 2 ( X )2

(5.12)

N X Y X Y
N X 2 ( X )2

(5.13)

m=

El grado de bondad del ajuste se analiza mediante el coeficiente de correlacin, cuya expresin general toma la forma de:
r=

(Yc Y )2
(Y Y ) 2

El coeficiente de correlacin especfico para la recta es:


r=

N X Y X Y
( N X ( X )2 ) ( N Y 2 ( Y )2 )
2

(5.14)

Los datos con los que se va a trabajar se guardarn en un archivo separado,


con nombre alusivo a su contenido, formando una matriz a la que se la denomina datos, en cuya primera columna estn las X, y en la segunda las Y:
%----------------- DatosAL.m ----------------------datos=[1 6.23
2 8.58
3 10.84
4 12.48
5 13.35
6 15.81
7 18.87
8 20.83
9 21.82];
%---------------------------------------------------

El programa principal de ajuste a una recta por mnimos cuadrados, segn


las ecuaciones previas, es:
%----------------- Ajulineal.m --------------------DatosAL
X=datos(:,1);
Y=datos(:,2);
N=length(X);
SX=sum(X);
SX2=sum(X.2);

74

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

SY=sum(Y);
SY2=sum(Y.2);
SXY=sum(X.*Y);
b=(SY*SX2-SX*SXY)/(N*SX2-SX2);
m=(N*SXY-SX*SY)/(N*SX2-SX2);
r=(N*SXY-SX*SY)/((N*SX2-SX2)*(N*SY2-SY2)).5;
Yc=m*X+b;
plot(X,Y,'*',X,Yc,'-')
text(1.5,15,'r='),
text(2,15,num2str(r))
text(1.5,17,'b='),
text(2,17,num2str(b))
text(1.5,19,'m='),
text(2,19,num2str(m))
xlabel('X'),
ylabel(Y)
%---------------------------------------------------

22
20
m= 1,975
18
b= 4,4372
16
r= 0,99502
14
12
10
8
6

Figura 5.11. Ajuste de datos a una recta.

En la Figura 5.11 se muestra el resultado numrico y grfico del ajuste de


datos experimentales a una recta; los datos se muestran con el signo *, y en
lnea continua la recta calculada.
Como r se aproxima a la unidad, indica excelente grado de ajuste.
5.6.1. Ajuste de funciones no lineales por linealizacin
Las funciones no lineales con uno o dos parmetros son susceptibles de linealizacin por transformaciones de variables, para lograr nuevas variables relacionadas linealmente, a las que se le aplica el ajuste lineal expuesto. Este tratamiento de datos tiene la ventaja de que siempre es ms fcil elucidar si una

APLICACIONES DE CLCULO NUMRICO

75

distribucin de datos es lineal o no, con relacin a comparar distribuciones de


datos a curvas diferentes.
A continuacin se muestra un ejemplo de linealizacin del mbito de la destilacin, operacin bsica de la Ingeniera Qumica.
En el equilibrio lquido-vapor de mezclas binarias, no azeotrpicas, la
composicin del vapor en funcin de la composicir del lquido sigue la ecuacin de uso restringido:
y=x+

C R x (1 x )
[ x + R (1 x )]2

(5.15)

en donde:
x Fraccin molar del componente ms voltil del lquido.
y Fraccin molar del componente ms voltil del vapor.
R Constante, que indica la posicin del mximo en la representacin y-x.
C Constante, que indica el valor del mximo en la representacin y-x.
Si en la fraccin de la ecuacin (5.15) se divide numerador y denominador
por (1 x)2, se obtiene:
x
1 x
yx =
2
x + R
1 x

C R

(5.16)

Realizando los siguientes cambios de variables:


D=yx
A=CR
U=

x
1 x

la ecuacin (5.16) toma la forma de:


D=

A U
(U + R)2

Realizando un nuevo cambio:


V2 =

U
D

(5.17)

76

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

la ecuacin (5.17) toma la forma de:


(U + R)2 = A V2
Ecuacin que, reordenada, toma la forma lineal:
V=

R
U
+
A
A

(5.18)

La ecuacin (5.18) relaciona linealmente V con U. Si la distribucin de los


datos (x,y) sometidos a las transformaciones expuestas siguen una trayectoria
lineal, indica que la ecuacin (5.15) es consistente.
De la recta obtenida se determinan su pendiente y ordenada en el origen, relacionados con R y C segn:
m=

1
1
=
A RC

b=

R
=
A

R
RC

Deshaciendo los cambios hechos, los coeficientes de el ecuacin (5.15) son:


1
bm
b
R=
m

C=

Con los valores as calculados de R y C, y los valores de x, se calculan unas


yc, que debern estar muy prximos a las y de partida.
De la bibliografa especializada se obtuvieron los datos de equilibrio isobrico, 760 mm de Hg. lquido-vapor de Benceno-nButanol, que se utilizan en
el programa Equilibrio.m, en donde se aplican los clculos expuestos.
%----------------- Equilibrio.m ---------------datos=[.0064 .0201
.0087 .0285
.0098 .0318
.0103 .0495
.0111 .0568
.0152 .0666
.0198 .0778
.0208 .0939
.0250 .0984
.0331 .1295
.0488 .1898

APLICACIONES DE CLCULO NUMRICO

77

.0553 .2170
.0568 .2199
.0620 .2356
.0753 .2824
.0864 .3152
.1120 .3840
.1209 .4082
.1553 .4881
.1779 .5361
.1992 .5693
.2390 .6421
.2718 .6712
.2852 .6836
.3440 .7493
.3978 .7874
.4528 .8161
.5295 .8601
.5753 .8689];
%----------------------------------------------x=datos(:,1); y=datos(:,2);
D=yx; U=x./(1x); V=sqrt(U./D);
est=polyfit(U,V,1);
m=est(1); b=est(2);
subplot(221), plot(x,y,'o-')
subplot(222), plot(U,V,'o',U,m*U+b,'-')
C=1/(b*m); R=b/m;

V=(U/(yx))0,5

m= 1,152
b= 0,55015

R= 0,47756
C= 1,5779

1,5

0,5

0,2

0,4

0,6
0,8
U=x/(1x)

1,2

0,8

0,6
0,4
0,2
0,05

0,1

0,15

0,2

0,25

0,3
x

0,35

0,4

0,45

0,5

0,55

Figura 5.12. Composicin benceno en la fase vapor frente a composicin de benceno


en la fase lquida.

78

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

yc=x+C*R*x.*(1-x)./(x+R*(1-x)).2;
subplot(212),plot(x,y,'o',x,yc,'-')
%-----------------------------------------------

En la Figura 5.12, en la parte superior, se muestran los datos sometidos a las


transformaciones indicadas, y la recta ajustada a estos datos, haciendo uso de
polyfit, observndose un buen grado de concordancia. En el grfico inferior se
representan los datos (x,y) de partida, representados por o, y en lnea continua se
muestra la ecuacin (5.15) a partir de las x y con los datos calculados R y C.
5.7. ANLIS ESPECTRAL
El procesado de seales digitales para anlisis espectral y series temporales,
se facilita con la funcin fft, fast fourier transform.
En el anlisis de seales con perturbaciones, el problema ms frecuente es
la determinacin de las frecuencias.
En el siguiente ejemplo se crea una seal compuesta, a la que se le aade un
ruido aleatorio de cuanta anlogo a la seal.
El perodo de muestreo se toma en milisegundos, creando una base de
tiempo de 0 a 0,5 segundos.
>> t=[0:0.001:0.5]';
>> size(t)
ans =
501

Se crea una seal sinusoidal compuesta de 50, 100 y 200 Hz.


>> x=sin(2*pi*50*t)+sin(2*pi*100*t)+sin(2*pi*200*t);

Esta seal se distorsiona con un ruido aleatorio de 0 a 3.


y=x+3*rand(length(t),1);

La representacin grfica de y frente a t conduce a una representacin en la


que la periodicidad est oculta.
El objetivo de este tratamiento es encontrar las frecuencias de esta seal distorsionada, para ello se procede con estos datos distorsionados, como datos de
partida, (t,Y) para calcular las frecuencias.
A las y a analizar, se les aplica la transformada de Fourier.
Y=fft(y);

APLICACIONES DE CLCULO NUMRICO

79

Ahora se calcula la potencia espectral o energa, mediante:


P=Y.*conj(Y);
>> size(P)
ans =
5001

La frecuencia se forma mediante la instruccin:


>> f=1000*(1:256)/512;
>> size(f)
ans =
1
256
>> f=f';
>> size(f)

y=x+3 rand(length(t),1)

x=sin(2 pi 50 t)+sin(2 pi 100 t)+sin(2 pi 200 t)

ans =
256

2
1
0
1
2
0

Potencia Espectral

0,05
0,1
Tiempo (seg.)

5
4
3
2
1
0
1
2
0

0,05
0,1
Tiempo (seg.)

x 10 4

6
5
4
3
2
1
0

50

100

150
Frecuencia

200

250

Figura 5.13. Anlisis de frecuencias.

Las representaciones grficas se consiguen con:


>> subplot(221),
plot(t(1:50),x(1:50))
>> ylabel('x=sin(2pi50t)+sin(2pi100t)+sin(2pi200t)')

80

>>
>>
>>
>>
>>
>>
>>
>>

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

xlabel('Tiempo')
subplot(222),
plot(t(l:50),y(1:50))
ylabel('y=x+3rand')
xlabel('Tiempo')
subplot(212),
plot(f,P(1:256))
axis([ 0 500 0 70000])
ylabel('Potencia espectral')
xlabel('Frecuencia')

En la Figura 5.13 se muestran las variables relacionadas en los clculos expuestos, destacando claramente las potencias espectrales en las frecuencias
buscadas sobre el rizado de la lnea de base.
5.8. EVITANDO LA DIVISIN POR CERO Y REBOSE
La exactitud con que funciona MatLab es eps, cuyo valor es 2,2204 1016.
Al dividir una expresin por una variable x, que en un proceso de clculo
tomase el valor 0, provoca un warning Divide by zero. Este inconveniente
se obvia mediante:
x=x+(x==O)*eps;

Este procedimiento nicamente cambia el valor de x, cuando su valor es 0,


asignndole el valor de eps.
Los nmeros ms grande y ms pequeo, en valor absoluto, que utiliza MatLab son realmax y realmin, de valores 1,7977 10308 y 2,2251 10308, respectivamente.
Para evitar que una variable x, no exceda de un valor lmite dado de saturacin o rebose, X, se procede segn:
x=x.*(abs(x) < X)+X.*(abs(x)>X);

6
Simulink

6.1. INTRODUCCIN A SIMULINK

Figura 6.1. Ventana de paquetes de libreras de Simulink.


81

82

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

Simulink es un software para simulacin, anlisis y modelado de sistemas


dinmicos, que acompaa a MatLab, en forma de toolbox. Su interface grfica
permite ver los modelos.

Figura 6.2. Libreras de bloques de operadores continuos.

Simulink soporta sistemas lineales y no lineales, continuos, discretos e hbridos. Simulink viene con muchos ejemplos a modo de demos para facilitar su
uso.

Figura 6.3. Libreras de bloques no continuos.

En la Figura 6.1 se presentan los mens de las libreras que suministran conjuntos de bloques operacionales, cuyos contenidos se muestran en las Figuras 6.2, a 6.8, con los que se compondrn los modelos deseados.

SIMULINK

83

Figura 6.4. Bloques generadores de seales.

La notacin matemtica de los bloques es la utilizada en los tratados de


Control Automtico, en los que se utiliza la variable compleja s, que tiene, entre otras, la propiedad de que multiplicar por s representa derivar, y dividir por
s representa integrar.

Figura 6.5. Libreras de funciones y tablas.

En los diagramas de bloques lo que sale es el producto de lo que entra por


el contenido del bloque.

84

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

Figura 6.6. Libreras de bloques matemticos.

Figura 6.7. Libreras de seales y sistemas.

SIMULINK

85

Figura 6.8. Libreras de salidas.

6.2. CONSTRUCCIN DE UN MODELO MUY SENCILLO


A continuacin se describe paso a paso cmo se elabora el esquema Simulink del modelo ms sencillo, la integracin de 2 t, con condicin inicial 0,
cuyo resultado es t2.
1. Desde la ventana de comandos de MatLab se ejecuta simulink, o se
activa pulsando sobre su icono en la barra de tareas, obtenindose la
ventana de libreras de Simulink
2. De la ventana de libreras se consigue la ventana de construccin del
modelo, pulsando File, New, Model, con lo que se obtiene una
nueva ventana vaca, para construir ah el modelo deseado.
3. Se despliega Sources de la ventana de libreras. Se arrastra o copia
Clock a la ventana del modelo. Clock suministrar t, tiempo continuo.
4. Se abre la ventana Math de la ventana de libreras, y se copia Gain,
ganancia, a la ventana del modelo. Gain se coloca delante de Clock.
Para conectar Gain a Clock, se posiciona el ratn en el ngulo de salida de Clock, manteniendo pulsado el botn izquierdo del ratn, se
desplaza a la entrada de Gain. De este modo Clock y Gain quedan
unidos. Pulsando dos veces sobre Gain se seleciona su valor a 2. La salida de Gain es su entrada multiplicada por su valor seleccionado. La
salida de Clock suministra t, y la salida de Gain suministra 2 t.
5. Pueden ponerse comentarios informativos donde se desee haciendo doble click en el lugar elegido para pasar a modo texto. Para cambiar tamaos y tipos de letra, se coloca el puntero del ratn encima del texto, al
pulsar el botn derecho se accede a Propiedades del texto.

86

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

Figura 6.9. Esquema de la integracin de 2 t.

6. Desplegando Continuous de la ventana de libreras, se copia Integrator a la ventana del modelo. Se une la salida de Gain con la
entrada de Integrador. Pulsando dos veces sobre Integrador, se
abre una ventana de propiedades del bloque integrator, en este caso
nicamente se selecciona la condicin inicial a 0, valor por defecto.
7. La salida del integrator, es la integral de su entrada, por tanto, con l se
logra el objetivo buscado, t2.
8. Para ver la integracin conseguida, es necesario llevar esa salida a un
visualizador, X Y graph, que se halla en la librera Sinks, desde
donde se copia a la ventana del modelo, cuyas entradas corresponden a
las salidas del reloj, X, y del integrador, Y.
9. Los mtodos y parmetros de integracin, son seleccionables desde la
ventana del modelo en Simulation parameters, del men Simulation.
10. Para ejecutar la simulacin se activa Start del men Simulation
de la ventana del modelo. Para ver el resultado grfico se pulsa dos veces en X Y graph.
11. Para llevar variables del modelo de simulacin al entorno MatLab, se
utiliza el mdulo To workspace de la librera Sinks. Este mdulo
se conecta en la salida del bloque del que se desea guardar sus datos;
pulsando dos veces sobre este mdulo, se accede a la asignacin del
nombre de la variable y al formato en que se desean guardar los datos.
6.3. SOLUCIN SIMULINK DE UNA ECUACIN DIFERENCIAL
Para representar un modelo, ecuaciones diferenciales, se abre el espacio de
representacin mediante Nuevo, del men Archivo de la ventana de libreras
de Simulink, hacia donde se arrastrarn los iconos operacionales desde las libreras correspondientes, para componer el modelo mediante las conexiones y
relleno con los parmetros pertinentes.

SIMULINK

87

En la Figura 6.10 se representa el diagrama de bloques de la ecuacin


(5.2); y su solucin grfica, en la Figura 6.11.

Figura 6.10. Esquema analgico de la resolucin de la ecuacin diferencial


de segundo grado.

Figura 6.11. Resultado grfico de la integracin de la ecuacin diferencial


de segundo grado.

88

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

Como la ecuacin diferencial es de segundo grado, es necesario integrar dos


veces. El primer integrador tiene por entrada la derivada segunda, y su salida
ser la derivada primera, que ser la entrada del segundo integrador, para suministrar la primitiva en funcin del tiempo.
La entrada del primer integrador es el segundo miembro de la ecuacin diferencial expresada como:
d2y
dy
= 3 6 y
2
dt
dt

6.4. SIMULACIN DINMICA DE UN ECUALIZADOR


Al ecualizador, tanque de regulacin de caudal y amortiguador de oscilaciones de concentracin de influentes, en procesos de aguas, llega una corriente de caudal y concentracin de sustancias variables, y se pretende determinar el volumen variable ocupado por el lquido en el ecualizador cuando se
extrae un caudal de valor medio de las ltimas 24 horas, media mvil, a la vez
que determinar la concentracin de las sustancias, sustrato, variables en la salida.

Qi(t)
Ci(t)

Volumen
de seguridad

Variacin
de volumen

Volumen
inicial

V(t)

C(t)

Q
C(t)

Figura 6.12. Esquema y variables de un ecualizador.

SIMULINK

89

La variacin de volumen de lquido en el ecualizador est determinado, por


lo que entra y por lo que sale en un instante:
dV
= Qi Q
dt

(6.1)

Si en el tanque ecualizador no hay reaccin qumica alguna, conservacin


de componentes, la concentracin de cada componente que se mezcla con el
contenido del tanque de volumen variable sigue la ecuacin:
dC Qi
dV C
= Ci Q +

dt
V
dt V

(6.2)

La variacin de volumen, puede calcularse analticamente, si se considera


que el caudal de entrada es sinusoidal, tal como:
2
Qi (t ) = Q + Qv sin
t
T

(6.3)

El volumen del lquido en el ecualizador estar dado por:


V = V (0) + Qv

2 t
T

sin
0

(6.4)

Cuyo resultado es:


V = V (0) +

2
Qv T
1 cos
t
T
2

(6.5)

Ecuaciones en las que V(0), representa el contenido del tanque en el instante


inicial; T, el perodo de una oscilacin completa; y Qv, representa la amplitud de
la oscilacin del caudal y C la concentracin.
En la Figura 6.13 se muestra el esquema de clculo Simulink para resolver
la ecuacin (6.1). En el bloque denonimado Qi, se suministran los datos del caudal de entrada frente al tiempo, correspondientes a un ciclo, mediante la Repeating table, que pide una tabla de valores, tiempo-valor, correspondientes a un ciclo completo, en este caso:
[0 2 4 6 8 10 12 14 16 18 20 22]
[211 168 155 162 220 330 460 533 475 370 290 250]

90

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

Figura 6.13. Esquema Simulink para el clculo de la evolucin del volumen contenido
en un ecualizador con caudal variable.

El bloque Mux permite conducir por una lnea varias seales. En el ejemplo,
Mux se utiliza para realizar operaciones en los bloques f(u), y para representar varias seales en un grfico.
2500

Caudales, (m3/h), Volumen (m3)

Qi
Q
Volumen
2000

1500

1000

500

20

40

60

80

100

120

Tiempo, (Horas)

Figura 6.14. Resultado grfico del clculo de la evolucin del volumen contenido
en un ecualizador con caudal variable.

En el bloque Qm(t-24), se realiza la operacin u(l)/u(2), la seal


u(1) corresponde a la integral del caudal retrasado, y u(2) corresponde al
tiempo retrasado.

SIMULINK

91

El bloque Qi(t-24) suministra el caudal de entrada retrasado en 24 horas;


durante las primeras 24 horas, suministra un valor de designacin inicial. El
bloque Vol, integra el caudal retrasado, para obtener el volumen aportado
por el caudal retrasado, que dividido entre t 24 produce el caudal medio retrasado en las ltimas 24 horas.
El bloque denominado Limitador, tiene por objeto limitar posibles valores de rebose, por valores iniciales muy altos o muy bajos. El bloque Volumen
integra la diferencia del caudal de entrada menos el caudal medio retrasado.

Figura 6.15. Esquema Simulink para el clculo del volumen y composicin


de un ecualizador, con alimentacin de caudal y concentracin variables.

Los resultados de la simulacin de los caudales y del volumen ocupado en el


tanque se presentan en la Figura 6.14, en la que se observa que el caudal medio
de las ltimas 24 horas, caudal de salida, en el comienzo de la simulacin, tiene
un valor constante hasta llegar al tiempo de 24 loas, seguido de un valor constante, lmite superior, y a continuacin oscila, con tendencia hacia un valor
constante, debido a que el caudal de entrada se repite de la misma manera.
El volumen del lquido sufre una primera aportacin muy grande, debido a
que en el comienzo, el caudal purgado est en un valor mnimo, observndose
que tiende a una oscilacin constante.
En la Figura 6.15 se muestra el esquema de clculo Simulink para resolver
las ecuaciones (6.1) y (6.2); cabe destacar nicamente que el integrador C va
provisto de limitadores, a fin de evitar valores anmalos iniciales que enlentecen el clculo en alcanzar el estado estacionario.
El bloque Ci suministra los datos de la concentracin de entrada de un supuesto componente qumico o sustrato:
[0 2 4 6 8 10 12 14 16 18 20 22]
[150 130 89 109 165 195 398 413 364 270 215 174]

92

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

La Figura 6.16 muestra la reduccin de la variabilidad de la concentracin


de salida del ecualizador, lnea continua, frente a la concentracin de entrada, lnea discontinua.
450
C
Ci

400

Conc. Entrada/salida (mg/l)

350

300

250

200

150

100

50

20

40

60

80
100
120
Tiempo (Horas)

140

160

180

200

Figura 6.16. Concentracin de salida del ecualizador, lnea continua,


frente a concentracin de entrada.

Las Estaciones Depuradoras de Aguas Residuales que se vienen instalando


desde hace unos aos, incluyen el tanque de homogeneizacin o ecualizacin,
que si es de tamao suficiente y con buen control de operacin, ahorrar energa, diluir posibles txicos o permitir su by-pass a esta zona segura, evitar los problemas de las variaciones bruscas de caudal y cortribuir a la estabilidad del proceso biolgico posterior.

Bibliografa

[1] Brian D. Hanhn. Essential MatLab for scientists and engineers. Buterworth-Heinemann. (2002).
[2] Brian D. Hunt. A guide to MatLab for beginners and experienced users.
Cambridge Univ. Press. (2001).
[3] Duane Hanselman, Bruce R. Littlefield. Mastering MatLab 6. The MatLab
curriculum series. Prentice Hall. (2000).
[4] James B. Dabney; Thomas L. Harman. Mastering simulink 4 S/E. The
MatLab curriculum series. Prentice Hall. (2001).
[5] Edward B. Magrab. Engineers guide to MatLab. Prentice Hall. (2000).
[6] Rudra Pratrap. Getting starting with MatLab, Version 6: Quick introduction. Oxford University Press. (2001).
[7] Stephen J. Chapman. MatLab programming for engineers. Brooks-Cole
Pub. Co. (2001)
[8] Gil Rodrguez M. Clculos avanzados en procesos de descontaminacin de
aguas. Consejo Superior de Investigaciones Cientficas. (2003).

93

ndice alfabtico

..., 21
LATEX, 19, 45
TEXtos en grficos, 45

continue, 40
conv, 16
date, 20
datenum, 20
datestr, 20

Ajuste de datos, 56
Ajuste lineal, 72
angle, 12
ans, 12
area, 48
ascii, 22, 23
atan2, 13
axes, 44
axis, 43, 44

datetick, 44
datevec, 20
deconv, 16
demo, 1
Derivadas, 27, 67
de polinomios, 17
det, 15, 26
diary, 23
diff, 27, 32
double, 28
dsolve, 29, 32

bar, 41
bar3, 46
Bazin, ecuacin, 63
break, 40
case, 40
ceil, 22
clear, 5
clf, 44, 54
clock, 20
Color, 47, 48
Complejos, nmeros, 12
conj, 12, 79

else, 36, 37
elseif, 37
eps, 80
errorbar, 41
etime, 21
ezplot, 27
factor, 27
95

96

INTRODUCCIN RPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERA

Factorial, 11
feval, 10
fft, 78
fix, 11
floor, 22
fminbnd, 52
fmins, 51
fminsearch, 53
fontsize, 45, 48
for-end, 10, 38
format, 5, 6
fplot, 41
Fracciones simples, desarrollo, 17
Funciones del tiempo, 20
function, 8
fzero, 62
global, 10, 69
grid, 8
gtext, 44
help, 1, 9
hold on/off, 44
if else end, 36
ilaplace, 30
imag, 12
inline, 11
input, 35
int, 27
integrador, 86
Integrales, 27
de polinomios, 18
interp1, 18
Interpolacin
cubic, 18
polinomial, 18
spline, 18, 71
inv, 15
invlaplace, 33
keywords, 4

laplace, 30, 32, 33


LaPrint, 46
leftarrow, 48
legend, 44
length, 55, 72
limit, 31
line, 44, 54
LineWidth, 44, 48
linspace, 2, 13
load, 21
loglog, 41
logspace. 13
long, 6
lookfor, 9
lsqcurvefit, 55
magic, 26
Maple V, 25, 31, 32
matlabpath, 19
Matriz, 13
max, 8
mpower, 15
mux, 90
now, 20
num2str, 57
ode113, 57
ode15s, 57
ode23, 57
ode23s, 57
ode23t, 57
ode23tb, 57
ode45, 57
odegil4, 57, 60
optimset, 55
Orden de ejecucin, 19
otherwise, 40
path, 19
pie, 41
plot, 8, 41
plot3, 41

NDICE ALFABTICO

plotmatrix, 41, 43
plotyy, 41
polar, 43
Polinomios, 16
poly, 16
polyder, 17
polyfit, 56
polyint, 18
polyval, 16
power, 15
pretty, 26
quad, 51
quadl, 51
rand, 21
rat, 5
real, 12
realmax, 80
realmin, 80
recursion, 11
reshape, 14
residue, 17
Retrasos, 67
return, 9
root, 16
round, 29, 70
Runge-Kuta, 57, 59
save, 21
scripts, 9
semilogx, 41
semilogy, 41
short, 5

Simblico, clculo, 25
simplify, 27
size, 4
solve, 28
spline, 71
sqrt, 6, 7, 21
stairs, 41
stem, 41
subplot, 43, 44
subs, 58
sum, 55
switch, 40
sym, 25
syms, 26
taylor, 19, 31
text, 44, 54, 55
title, 44
Transposicin, 7
variables, 3
Vector, 13
Vertedero, 63
what, 21
which, 19
while-end, 38
who, 2, 3
whos, 2, 3
workspace, 2
xlabel, 44
ylabel, 44

97