Documentos de Académico
Documentos de Profesional
Documentos de Cultura
A MATLAB Y SIMULINK
PARA CIENCIA E INGENIERA
INTRODUCCIN RPIDA
A MATLAB Y SIMULINK
PARA CIENCIA E INGENIERA
E-mail: ediciones@diazdesantos.es
Internet://http:www.diazdesantos.es/ediciones
ISBN: 84-7978-596-9
Depsito legal: M. 43.971-2003
ndice
Presentacin ...........................................................................................
XI
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
25
25
25
27
27
28
29
30
31
31
31
31
32
35
35
36
38
38
40
40
40
41
41
44
45
45
47
48
51
51
51
51
52
53
57
59
62
67
72
33
NDICE
IX
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
95
Presentacin
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
>> 15\3
ans =
0.2000
>> 23
ans =
8
>> sin(2*pi*30/360)
ans =
0.5000
>> t = t(:)
t =
1
4
7
10
>> 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
Nombre='Pepe';
size (Nombre)
% Variable de caracteres.
ans =
1
>> 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*
0.0001
A =
10000 1/10000
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.
% ------------------------------------------------------------
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
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
6
2
10
% Creacin directa de F.
F =
@Fun
>> feval(F,2)
ans =
-3.2576
F =
@Fun
@cos
11
12
+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)
13
Angulo =
0.4636
>> Angulo = atan2(imag(A),real(A))
0.4636
>> Aa = r*exp(Angulo*i)
Aa =
10.0000 + 5.0000i
3.1623
10.0000
31.6228
100.000
>> y = x.2
y =
0
>> a = [x;y]
16
% Crear una matriz anexando
% vectores.
14
a =
0
0
1
1
2
4
3
9
4
16
>> A = a'
A =
0
1
2
3
4
0
1
4
9
16
B = [A; 5 25]
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 3a columna,
% 0 4.
>> 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
% Equivalente a y = x.2
y =
4
16
18
19
% Equivalente a y = x2
16
1. 10. POLINOMIOS
Sea el polinomio p = x2 5x + 6, con vector de coeficientes C:
>> C = [1 -5 6];
-5
-3
17
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 =
es decir, 10x 20
18
-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
x = [2 4 6];
y = power(x,2);
de
y5 = interp1(x,y,5)
y5 =
26
>> y5c = interp1(x,y,5,'cubic')
y5c =
24.8750
>> y5s = interp1(x,y,5,'spline')
y5s =
25
% Interpolacin cbica.
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.
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
0.0290
0.0160
0.0400
0.0502
29
>> datenum(date)
7.3161e + 05
21
0.1934
0.6822
>> Y=round(X)
Y =
0
0
0
1
0
1
0.3028
0.5417
22
>>
>>
>>
>>
>>
>>
save mi_archivo
clear
who
load mi_archivo
who
0.1934
0.6822
0.3028
0.5417
>> Y
Y =
0
0
0
1
0
1
2.49
9.99
>> ceil(A)
ans =
2
3
1 10
>> floor(A)
ans =
1
0
2
9
23
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
% 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)
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
CLCULO SIMBLICO
27
2/5 15
1/2
1/2
(- 3/2 t)
sin(1/2 15
t) e
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))
28
1/2
1/2
sin(1/2 15
t)+15
1/2
t))
60
40
20
0
20
40
60
80
100
3
0
t
CLCULO SIMBLICO
29
30
(s) = 0 f (t) e st dt
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
32
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)
CLCULO SIMBLICO
33
34
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
==
~=
<
>
<=
>=
Igual
No igual
Menor que
Mayor que
Menor que o igual
Mayor que o igual
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
38
Condicin
Comandos
end
1.0000
0.5000
0.3333
1.0000
4.0000
9.0000
1.0000
1.4142
1.7321
39
1.0000
0.5000
0.3333
1.0000
4.0000
9.0000
1.0000
1.4142
1.7321
40
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
42
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
>> 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
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))
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
44
35
30
25
20
15
10
5
0
1
1
0,5
0,5
0,5
0,5
1
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%
46
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
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
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
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
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)
0,4
0,2
0
0,2
0,4
0,6
10
0
t
10
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
33%
a=[3 5 7 9 12];
pie3(a,a==a(4))
8%
14%
25%
19%
Valor destacado
5
Aplicaciones de clculo numrico
A =
-10.0814
52
>> x=fminbnd(F,0,3)
x =
2.0351
= 7, 389
x+y=5
x y = 1
e z x
53
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
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
55
global pH mu
pk1=p(1);
pk2=p(2);
muc=1../(1+10..(pk1-pH)+10..(pH-pk2));
q=sum((mu-muc).2);
%--------------------------------------------------
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}')
56
A= 2
Ac=2,096
B=0,2
Bc=0,19176
Asen Xe BX
3
2
1
0
1
2
3
8
0
X
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
57
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)))
58
(5.2)
(5.3)
y' = z
(5.4)
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
59
250
Funcin y derivada
200
150
100
y
50
0
50
100
0
Tiempo
60
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
2
2
h
q
rk = h tk + , yk + k
2
2
sk = h (tk + h, yk + r )
pk + 2 qk + 2 rk + sk
6
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;
%-------------------------------------------------------------
% 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
X
V
Qi
Qe
h
L
h
Qe
Qi
V
H
A
63
(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)
(5.7)
V
H
A
(5.8)
64
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
%---------------------------------------------------------
150
100
50
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
66
%
dX=U-Y(1,2);
%
%---------------------------------------------------------
67
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
Siendo:
x(s)
y(s)
y' = x x'
2
2
2
( x y) x'
(5.10)
2
( x (t ) y(t )) dt x (t )
x(t- )
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
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
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
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]
%---------------------------------------------------
71
t2
100
50
0
0
10
12
6
t
10
12
80
(t3)2
60
40
20
0
0
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
(5.11)
=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
73
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
N X Y X Y
( N X ( X )2 ) ( N Y 2 ( Y )2 )
2
(5.14)
74
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
75
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)
x
1 x
A U
(U + R)2
U
D
(5.17)
76
R
U
+
A
A
(5.18)
1
1
=
A RC
b=
R
=
A
R
RC
C=
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
78
yc=x+C*R*x.*(1-x)./(x+R*(1-x)).2;
subplot(212),plot(x,y,'o',x,yc,'-')
%-----------------------------------------------
79
y=x+3 rand(length(t),1)
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
80
>>
>>
>>
>>
>>
>>
>>
>>
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;
6
Simulink
82
Simulink soporta sistemas lineales y no lineales, continuos, discretos e hbridos. Simulink viene con muchos ejemplos a modo de demos para facilitar su
uso.
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
84
SIMULINK
85
86
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
88
Qi(t)
Ci(t)
Volumen
de seguridad
Variacin
de volumen
Volumen
inicial
V(t)
C(t)
Q
C(t)
SIMULINK
89
(6.1)
dt
V
dt V
(6.2)
(6.3)
2 t
T
sin
0
(6.4)
2
Qv T
1 cos
t
T
2
(6.5)
90
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
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.
SIMULINK
91
92
400
350
300
250
200
150
100
50
20
40
60
80
100
120
Tiempo (Horas)
140
160
180
200
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
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
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