Documentos de Académico
Documentos de Profesional
Documentos de Cultura
A MATLAB Y SIMULINK
PARA CIENCIA E INGENIERÍA
MANUEL GIL RODRÍGUEZ
Científico Titular del Consejo Superior
de Investigaciones Científicas (CSIC)
INTRODUCCIÓN RÁPIDA
A MATLAB Y SIMULINK
PARA CIENCIA E INGENIERÍA
© Manuel Gil Rodríguez, 2003
E-mail: ediciones@diazdesantos.es
Internet://http:www.diazdesantos.es/ediciones
ISBN: 84-7978-596-9
Depósito legal: M. 43.971-2003
Presentación ........................................................................................... XI
VII
VIII ÍNDICE
6. SIMULINK ...................................................................................... 81
6.1. Introducción a Simulink ......................................................... 81
6.2. Construcción de un modelo muy sencillo .............................. 85
6.3. Solución Simulink de una ecuación diferencial ..................... 86
6.4. Simulación dinámica de un ecualizador ................................ 88
BIBLIOGRAFÍA ..................................................................................... 93
XI
1
Primeros pasos en MatLab
1.1. INTRODUCCIÓN
MatLab, desde las primeras versiones dispuso de help y demo, para ini-
ciación rápida. La información suministrada a través de los menús de estas ayu-
das, correspondientes a las últimas versiones, crecieron de forma exponen-
cial, siendo de utilidad práctica disponer de un libro resumen de MatLab, en
donde se encuentren los comandos de uso más frecuente, a la vez que se mues-
tren sus aplicaciones prácticas en ejercicios, desde lo más sencillo, hasta otros
de mayor complejidad.
Este Capítulo 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 ven-
tanas estará el cursor parpadeando a la derecha de «>>», es la ventana de co-
mandos desde donde se ejecutan los mismos, las otras son informativas:
>> 3 + 4
ans =
7
>> 3*5
ans =
15
>> 15/3
ans =
5
1
2 INTRODUCCIÓN RÁPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERÍA
>> 15\3
ans =
0.2000
>> 2ˆ3
ans =
8
>> sin(2*pi*30/360)
ans =
0.5000
>> A = 2*t; B = 2;
>> who
t A B
>> whos
>> what
1.4. VARIABLES
En MatLab no es necesario hacer declaraciones previas acerca de las va-
riables. El contenido de las variables de caracteres ha de ir delimitado por el
signo «'».
>> numero_de_visitantes = 25
numero_de_visitantes =
25
4 INTRODUCCIÓN RÁPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERÍA
ans =
1 1
ans =
1 4
1. Se forman con las letras del abecedario, los dígitos 0 a 9 y el signo «_»,
distinguiéndose mayúsculas de minúsculas.
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.
» iskeyword
ans =
'break'
'case'
'catch'
'continue'
'else'
'elseif'
'end'
'for'
'function'
'global'
'if'
'otherwise'
'persistent'
'return'
'swirch'
'try'
'while'
PRIMEROS PASOS EN MATLAB 5
>> if = 5
??? if = 5
Los nombres de las variables pueden ser tan extensos como se quiera, pero
MatLab sólo reconoce los 31 primeros caracteres.
Las variables se eliminan del espacio de trabajo con el comando clear:
Spacing:
FORMAT COMPACT Suppress extra line-feeds.
FORMAT LOOSE Puts the extra line-feeds back in.
6 INTRODUCCIÓN RÁPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERÍA
ans =
1.4142
ans =
1.41421356237310
ans =
1.41421356237310e+00
ans =
1. 0e+04 *
1.0000 0.0000
A =
10000 0.0001
>> format rat
>> A
A =
10000 1/10000
PRIMEROS PASOS EN MATLAB 7
1.6. PROGRAMAS
x =
1.7. FUNCIONES
El otro tipo de archivos utilizado por MatLab son las funciones, cuya pri-
mera característica 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 básicas y las distribuidas de forma separada para aplicaciones es-
pecíficas, MatLab toolboxes, y otras que desarrollan los usuarios.
Las funciones toman unas variables de entrada para calcular unos datos de
salida, sea:
1 1
Fun( x ) = + −5
( x − 1) + 0,1 ( x − 3)2 + 0, 2
2
–2
–4
–6
–2 –1 0 1 2 3 4 5 6
F =
@Fun
>> feval(F,2)
ans =
-3.2576
F =
@Fun @cos
ans =
25
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 =
>> r = real(A)
r =
10
>> I = imag(A)
I =
5
>> r = abs(A)
r =
11.1803
Angulo =
0.4636
0.4636
>> Aa = r*exp(Angulo*i)
Aa =
10.0000 + 5.0000i
>> t = [3 5 7, 8, 9]
t =
3 5 7 8 9
x =
x =
0 1 2 3 4
a =
0 1 2 3 4
0 1 4 9 16
>> A = a' % Crear la matriz A, transpues-
% ta de a.
A =
0 0
1 1
2 4
3 9
4 16
» B = [A; 5 25] % Añadir una línea a una ma-
% triz.
B =
0 0
1 1
2 4
3 9
4 16
5 25
ans =
7 12
18 31
>> A.ˆ2
ans =
1 4
9 25
>> 1../A
ans =
1.0000 0.5000
0.3333 0.2000
>> det(A)
ans =
-1
>> inv(A)
ans =
-5.0000 2.0000
3.0000 -1.0000
y =
4 9 16
1. 10. POLINOMIOS
>> C = [1 -5 6];
>> r = roots(C)
r =
3
2
es decir, 10x – 20
18 INTRODUCCIÓN RÁPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERÍA
ans =
>> polyint(p2,2)
ans =
Equivalente a:
1 3 5 3
x − x + 4x + 2
3 2
y5 =
26
y5c =
24.8750
y5s =
25
PRIMEROS PASOS EN MATLAB 19
1.11. matlabpath
1. 12. lookfor
1.13. LATEX
>> syms x
>> A = taylor(exp(–x))
A =
1 - x + 1/2*xˆ2 - 1/6*xˆ3 + 1/24*xˆ4 - 1/120*xˆ5
>> 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 INTRODUCCIÓN RÁPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERÍA
Tiempo =
1.0*e + 03 *
2.0030 0.0010 0.0290 0.0160 0.0400 0.0502
ans =
7.3161e + 05
29-Jan-2003
2003 1 29 0 0 0
>> datenum(date)
7.3161e + 05
>> date
ans =
29-Jan-2003
elapsed_time =
3.6174
Tt =
3.6642
ans =
-1.2835e + 03
>> clear
>> X=rand(2,3)
X =
>> Y=round(X)
Y =
0 0 0
0 1 1
22 INTRODUCCIÓN RÁPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERÍA
X Y
>> X
X =
>> Y
Y =
0 0 0
0 1 1
A =
1.5 2.49
0.2 9.99
>> ceil(A)
ans =
2 3
1 10
>> floor(A)
ans =
1 2
0 9
2.1. INTRODUCCIÓN
x =
x
25
26 INTRODUCCIÓN RÁPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERÍA
80
70
60
50
40
30
20
10
–10
–3 –2 –1 0 1 2 3
t
>> 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)
Intdy =
2/5*15^(1/2)*sin(1/2*15^(1/2)*t)*exp(-3/2*t)
28 INTRODUCCIÓN RÁPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERÍA
60
40
20
–20
–40
–60
–80
–100
–3 –2 –1 0 1 2 3
t
x+ y= 5
x – y = –1
ez·x = 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
d2 y dy
2
+3 + 6y = 0
dt dt
yc =
2/5*15^(1/2)*exp(-3/2*t)*sin(1/2*15^(1/2)*t)
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 INTRODUCCIÓN RÁPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERÍA
∞
(s) = ∫0 f (t) ⋅ e – s⋅t dt
>> 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
>> I=ilaplace(L,s,t)
I =
cos(w*t)*exp(-a*t)
>> I1=ilaplace(Ll,s,t)
I1 =
exp(-t)
CÁLCULO SIMBÓLICO 31
2.5. LÍMITES
>> limit(1/x,x,0,'left')
ans =
-inf
>> Lim=limit((x^3-1)/(x^2-l),x,1)
Lim =
3/2
>> pretty(taylor(f,x,3))
2
1 - x + 1/2 x
r=maple('Sentencia Maple')
r=maple('Función',Argl,Arg2,...)
ans =
>> 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)
ÿ + 3 y· + 6y = 0
y· (0) = 3
y (0) = 0
>> 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 =
>> maple('Sol:=dsolve({eq,ini},{y(t)})')
ans =
ÿ – 2 y· – 3y = 0
y· (0) = 1
y (0) = 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 =
>> 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 =
>> maple('Sol1:=solve(Sol,{laplace(y(t),t,s)})')
ans =
>> maple('Solf:=invlaplace(Sol1,s,t)')
Solf =
34 INTRODUCCIÓN RÁPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERÍA
>> 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
>> ['Hola',R]
ans =
Hola Pepe
>> ['Hola';R]
Hola
Pepe
>> P+1
ans =
35
36 INTRODUCCIÓN RÁPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERÍA
Operadores relacionales
eq == Igual
ne ~= No igual
lt < Menor que
gt > Mayor que
le <= Menor que o igual
ge >= Mayor que o igual
ans =
hola
if condición 1
Cuantas Botellas ? 8
Pu =
5.5000
Pt =
44
38 INTRODUCCIÓN RÁPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERÍA
>> Tabla
>> D
D =
>> Tabla1
>> D
D =
A =
3.5. continue
3.6. break
6 5
4 >> subplot(221)
>> fplot(’Fun’,[pi pi]) >> subplot(222)
2 >> stairs(x,Fun(x),’*’)
0 0
–2
–4
–6 –5
–2 0 2 –2 0 2
5 5 1
>> subplot(223)
>> plot(x,Fun(x),’:.’)
0 0 0
–5 –5 –1
–2 0 2 –4 –2 0 2 4
5 6
>> subplot(222)
>> subplot(221) 4 >> errorbar(x,Fun(x),e)
>> bar(x,Fun(x),x,.2)
2
0 0
–2
–4
–5 –6
–2 0 2 –2 0 2
5 90 0,5
>> subplot(223) 120
0,4 60
>>stem(x,Fun(x))
0,3
150 0,2 30
0 180 0
210 330
240 300
–5 270
–2 0 2
>> 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))
2
0
–2
–4
1
Seno de X
Seno de X
0,5
–0,5
–1
20
Tangente de X
0
–20
–3 –2 –1 0 1 2 3 4
Eje de las X
35
30
25
20
15
10
0
1
0,5 1
0 0,5
0
0,5 0,5
1 1
>> t = 0:pi/l00:l0*pi;
>> plot3(cos(t).*exp(-0.05*t),sin(t).*exp(-0.05*t),t);
6% a=[1 3 5 7]
pie(a,a==a(2))
19%
44%
31%
Figura 4.5. Gráfico en tarta.
2
y= μ ϖ ⋅ sin(x) ⋅ e -Φ ⋅ x
y=sin(x) ⋅ e - Φ ⋅ x
–1
–2
–3
–4
–5
–10 –8 –6 –4 –2 0 2 4 6 8 10
Eje de las X
Distancia μ m
4.4. LAPRINT
6
4
2
0
–2
–4
–6
1
2
3
4 8
5 7
6 6
7 5
4
8 3
2
1
b Azul · · – Continua
g Verde o o : Punteada
r Rojo x x –· Trazo-Punto
c Cian + + –– Trazo-Trazo
m Magenta * *
y Amarillo s ⵧ
k Negro d 䉫
w Blanco ∧ 䉭
M 䉮
< 䉰
> 䉯
p 夽
h 夹
text(2,sin(2).*exp(-.25*abs(2)),...
'\fontsize{16}\leftarrow sin(t)\cdote^{-0.25\cdotabs(t)}
')
48 INTRODUCCIÓN RÁPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERÍA
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])
1
← cos(t)⋅e0,25 ⋅abs(t)
0,8
0,6
← sin(t)⋅e 0,25⋅abs(t)
0,4
sin(t)⋅e 0,25⋅ abs(t)
0,2
–0,2
–0,4
–0,6
–10 –5 0 5 10
t
hold of
% ------------------------------------------------------------
------
4.6. area
4 subplot(211)
area(x,Fun(x))
2
–2
–4
–6
–2 –1 0 1 2 3 4 5
4
subplot(212)
2
area(x,Fun(x),5)
0
–2
–4
–6
–2 –1 0 1 2 3 4 5
a=[3 5 7 9 12];
33% pie3(a,a==a(4))
8%
14%
25%
-10.0814
>> x=fminbnd(F,0,3)
x =
2.0351
ans =
3.0965
>> fzero(F,4)
ans =
3.0965
Sea el sistema:
x =
2.000
3.000
1.000
>>
1
μ ( pH ) = pk1 − pH (5.1)
1 + 10 + 10 pH − pk2
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 INTRODUCCIÓN RÁPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERÍA
0,9
pk1 = 5,2036
0,8
pk2 = 10,1128
0,7
0,6
μ(pH)
0,5
0,4
0,3
0,2
0,1
0
0 2 4 6 8 10 12 14
pH
Figura 5.1. Ajuste de la tasa de crecimiento frente al pH.
global pH mu
pk1=p(1); pk2=p(2);
muc=1../(1+10..ˆ(pk1-pH)+10..ˆ(pH-pk2));
q=sum((mu-muc).ˆ2);
%--------------------------------------------------
>> 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ˆ{-B·X}')
function F=AjusNlFun(p,x)
%---------------AjusNlFun.m---------------
A=p(1); B=p(2);
F=A*sin(x).*exp(-B*x);
%-----------------------------------------
56 INTRODUCCIÓN RÁPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERÍA
5 A= 2 Ac=2,096
4 B=0,2 Bc=0,19176
3
A·sen X·e –B·X
–1
–2
–3
–8 –6 –4 –2 0 2 4 6 8
X
30
25
20 Ac=0,95551
Bc= 4,6119
Cc= 5,6322
x 2+5⋅x+6
15
10
–5
–8 –7 –6 –5 –4 –3 –2 –1 0 1 2
x
Figura 5.3. Ajuste de datos con polyfit.
APLICACIONES DE CÁLCULO NUMÉRICO 57
d2y dy
2
+3 + 6y = 0 (5.2)
dt dt
z = y'
ans =
34.1795
>> subs(dy,t,-pi)
ans =
276.0593
250
200
Función y derivada
150 y’
100
50 y
–50
–100
–3 –2 –1 0 1 2 3
Tiempo
d y1
= ƒ1 (t, y1 , y2 ,… yn )
dt
d y2
= ƒ 2 (t, y1 , y2 ,… yn )
dt
d yn
= ƒ n (t, y1 , y2 ,… yn )
dt
pk = h ⋅ ƒ(tk , yk )
qk = h ⋅ ƒ ⎛ tk + , yk + k ⎞
h p
⎝ 2 2⎠
rk = h ⋅ ƒ ⎛ tk + , yk + k ⋅⎞
h q
⎝ 2 2 ⎠
sk = h ⋅ ƒ(tk + h, yk + r )
pk + 2 ⋅ qk + 2 ⋅ rk + sk
yk ,i+1 = yk ,i +
6
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 integración.
%-------------------------------------------------------------
-------
x=x'; t=[]; t(1)=x(1); y=y0;
APLICACIONES DE CÁLCULO NUMÉRICO 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;
%-------------------------------------------------------------
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)];
U
Y
X
Qi V Qe
h
h
Qe
V
Qi
H
Q = μ ⋅ L ⋅ h1,5 ⋅ 2 ⋅ g (5.5)
0, 003 ⎡ h2 ⎤
μ = 0, 405 + ⋅ ⎢1 + 0, 55 ⋅ (5.6)
h ⎣ ( H + h)2 ⎥⎦
dV
= Qi − Qe (5.7)
dt
V
h= −H (5.8)
A
%
subplot(313); plot(T,X,'*-'), axis([t0 tff 590 603])
ylabel('Volumen del Agua (m3)'),xlabel('Tiempo (Minutos)')
%
%---------------------------------------------------------
La función que calcula el estado del sistema, volumen del tanque, es:
function dX=VerteX(t,X)
%--------------------- VerteX.m---------------------------
%
% Cálculo del volumen del tanque
%---------------------------------------------------------
%
%
global A H L Qe1 Qe2 Qe3 tf
%
% Cálculo del caudal de salida
%---------------------------------------------------------
%
Y=VerteY(t,X); U=Y(1,1);
%
% Variación de volumen del tanque
%---------------------------------------------------------
150
Caudales (m3 /h)
100
50
0
0 2 4 6 8 10 12 14 16 18 20
Altura de Lamina (cm)
10
0
0 2 4 6 8 10 12 14 16 18 20
Volumen del Agua (m3 )
600
595
590
0 2 4 6 8 10 12 14 16 18 20
Tiempo (Minutos)
%
dX=U-Y(1,2);
%
%---------------------------------------------------------
function Y=VerteY(t,X)
%---------------------- VerteY.m -------------------------
%
% Cálculo de Caudal de Salida y Altura de Lámina
%
%---------------------------------------------------------
%
%
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*hˆ2/(h+H)ˆ2);
% Caudal de salida y altura de lámina
Y(i,2)=mu*L*h*(2*9.8*h)ˆ(1/2);
Y(i,3)=h;
end
end
%---------------------------------------------------------
τ 2 ⋅ s 2 − 6 ⋅ τ ⋅ s + 12
e − s⋅τ ≈
τ 2 ⋅ s 2 + 6 ⋅ τ ⋅ s + 12
En procesos químicos en los que ocurren tiempos muertos, como en una co-
lunma de rectificación o retrasos hidráulicos, es más útil la aproximación me-
nos común:
1
e − s⋅τ ≈
⎛ τ ⋅ s + 1⎞
n
⎝n ⎠
τ τ
y+ ⋅ y' = x − ⋅ x'
2 2
2
y' = ⋅ ( x − y) − x' (5.10)
τ
Esta ecuación integrada conduce a:
2
y( t ) = x ( t − τ ) = ∫ ( x (t ) − y(t )) ⋅ dt − x (t )
τ
x(t)
x(t- )
2/ –
–1
d ƒ (t ) ⎤
⎡⎢ = s ⋅ F( s) − ƒ(0)
⎣ dt ⎥⎦
a s b
1+0,01 s
a · s = 0,01 · s · b + b
(
b = 100 ⋅ a – ∫ b ⋅ dt )
Este es un procedimiento aproximado para obtener la derivada de una fun-
ción a través de su integral.
Para visualización rápida de la aproximación del cálculo de variables re-
trasadas y derivadas, se elabora un programa de demostración en el que la fun-
ción de entrada es el tiempo al cuadrado, y la función retrasada, el tiempo al
cuadrado retrasado en tres unidades.
En el programa principal, RetraLan.m se definen los parámetros de ope-
ración, tiempo, retraso, condición inicial, integrador, la representación gráfica
y la tabla de resultados numéricos.
%------------------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} tˆ2')
subplot(212),plot(t,Yr), grid
70 INTRODUCCIÓN RÁPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERÍA
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’]
%---------------------------------------------------
%-----------------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)];
%---------------------------------------------------
t2 100
50
0
0 2 4 6 8 10 12
80
60
(t–3)2
40
20
0
0 2 4 6 8 10 12
t
1 2 3 4 5
>> Yn=spline(X,Y,Xn)
Yn =
1 4 9 16 25
72 INTRODUCCIÓN RÁPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERÍA
Y=m·X+b (5.11)
δ=Y–m·X–b
Σδ 2 = ΣY 2 + m2 · ΣX 2 + N · b2 – 2 · m · ΣX · Y – 2 · b · ΣY + 2 · m · b · ΣX
d Σδ 2
= 2 ⋅ m ⋅ ΣX 2 − 2 ⋅ ΣX ⋅ Y − 2 ⋅ b ⋅ ΣX
dm
d Σδ 2
= 2 ⋅ N ⋅ b – 2 ⋅ ΣY + 2 ⋅ m ⋅ ΣX
db
m · ΣX 2 + b · ΣX = ΣX · Y
m · ΣX + N · b = ΣY
APLICACIONES DE CÁLCULO NUMÉRICO 73
ΣY ⋅ ΣX 2 − ΣX ⋅ ΣX ⋅ Y
b= (5.12)
N ⋅ ΣX 2 − ( ΣX )2
N ⋅ ΣX ⋅ Y − ΣX ⋅ ΣY
m= (5.13)
N ⋅ ΣX 2 − ( ΣX )2
Σ(Yc − Y )2
r=±
Σ (Y − Y ) 2
N ⋅ ΣX ⋅ Y − ΣX ⋅ ΣY
r=± (5.14)
( N ⋅ ΣX − ( ΣX )2 ) ⋅ ( N ⋅ ΣY 2 − ( ΣY )2 )
2
SY=sum(Y);
SY2=sum(Y.ˆ2);
SXY=sum(X.*Y);
b=(SY*SX2-SX*SXY)/(N*SX2-SXˆ2);
m=(N*SXY-SX*SY)/(N*SX2-SXˆ2);
r=(N*SXY-SX*SY)/((N*SX2-SXˆ2)*(N*SY2-SYˆ2))ˆ.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
6
1 2 3 4 5 6 7 8 9
Las funciones no lineales con uno o dos parámetros son susceptibles de li-
nealización por transformaciones de variables, para lograr nuevas variables re-
lacionadas linealmente, a las que se le aplica el ajuste lineal expuesto. Este tra-
tamiento de datos tiene la ventaja de que siempre es más fácil elucidar si una
APLICACIONES DE CÁLCULO NUMÉRICO 75
C ⋅ R ⋅ x ⋅ (1 − x )
y=x+ (5.15)
[ x + R ⋅ (1 − x )]2
en donde:
x Fracción molar del componente más volátil del líquido.
y Fracción molar del componente más volátil del vapor.
R Constante, que indica la posición del máximo en la representación y-x.
C Constante, que indica el valor del máximo en la representación y-x.
D=y–x
A=C·R
x
U=
1− x
A ⋅U
D= (5.17)
(U + R)2
U
V2 =
D
76 INTRODUCCIÓN RÁPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERÍA
R U
V= + (5.18)
A A
La ecuación (5.18) relaciona linealmente V con U. Si la distribución de los
datos (x,y) sometidos a las transformaciones expuestas siguen una trayectoria
lineal, indica que la ecuación (5.15) es consistente.
De la recta obtenida se determinan su pendiente y ordenada en el origen, re-
lacionados con R y C según:
1 1
m= =
A R⋅C
R R
b= =
A R⋅C
Deshaciendo los cambios hechos, los coeficientes de el ecuación (5.15) son:
1
C=
b⋅m
b
R=
m
Con los valores así calculados de R y C, y los valores de x, se calculan unas
yc, que deberán estar muy próximos a las y de partida.
De la bibliografía especializada se obtuvieron los datos de equilibrio iso-
bárico, 760 mm de Hg. líquido-vapor de Benceno-nButanol, que se utilizan en
el programa Equilibrio.m, en donde se aplican los cálculos 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 CÁLCULO NUMÉRICO 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=y–x; U=x./(1–x); 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;
2
m= 1,152 R= 0,47756
b= 0,55015 C= 1,5779
V=(U/(y–x))0,5
1,5
0,5
0,2 0,4 0,6 0,8 1 1,2
U=x/(1–x)
0,8
0,6
y
0,4
0,2
0,05 0,1 0,15 0,2 0,25 0,3 0,35 0,4 0,45 0,5 0,55
x
yc=x+C*R*x.*(1-x)./(x+R*(1-x)).ˆ2;
subplot(212),plot(x,y,'o',x,yc,'-')
%-----------------------------------------------
>> t=[0:0.001:0.5]';
>> size(t)
ans =
501 1
>> x=sin(2*pi*50*t)+sin(2*pi*100*t)+sin(2*pi*200*t);
y=x+3*rand(length(t),1);
Y=fft(y);
APLICACIONES DE CÁLCULO NUMÉRICO 79
5001 1
La frecuencia se forma mediante la instrucción:
>> f=1000*(1:256)/512;
>> size(f)
ans =
1 256
>> f=f';
>> size(f)
ans =
256 1
x=sin(2 ⋅ pi ⋅ 50 ⋅ t)+sin(2 ⋅ pi ⋅ 100 ⋅ t)+sin(2 ⋅ pi ⋅ 200 ⋅ t)
5
y=x+3 ⋅ rand(length(t),1)
2
4
1 3
2
0
1
–1 0
–1
–2 –2
0 0,05 0,1 0 0,05 0,1
Tiempo (seg.) Tiempo (seg.)
x 10 4
7
Potencia Espectral
6
5
4
3
2
1
0
50 100 150 200 250
Frecuencia
>> xlabel('Tiempo')
>> subplot(222), plot(t(l:50),y(1:50))
>> ylabel('y=x+3·rand')
>> xlabel('Tiempo')
>> subplot(212), plot(f,P(1:256))
>> axis([ 0 500 0 70000])
>> ylabel('Potencia espectral')
>> xlabel('Frecuencia')
La exactitud con que funciona MatLab es eps, cuyo valor es 2,2204 · 10–16.
Al dividir una expresión por una variable x, que en un proceso de cálculo
tomase el valor 0, provoca un warning Divide by zero. Este inconveniente
se obvia mediante:
x=x+(x==O)*eps;
En la Figura 6.1 se presentan los menús de las libreras que suministran con-
juntos de bloques operacionales, cuyos contenidos se muestran en las Figu-
ras 6.2, a 6.8, con los que se compondrán los modelos deseados.
SIMULINK 83
d2y dy
2
= –3 – 6 y
dt dt
Qi(t)
Ci(t)
Volumen
de seguridad
Variación
de volumen V(t) C(t)
Volumen
inicial Q
C(t)
dV
= Qi – Q (6.1)
dt
= ⋅ Ci – ⎛ Q +
dC Qi dV ⎞ C
⋅ (6.2)
dt V ⎝ dt ⎠ V
2 ⋅π ⎞
Qi (t ) = Q + Qv ⋅ sin ⎛ ⋅t (6.3)
⎝ T ⎠
t
⎛ 2 ⋅ π ⋅ t⎞
V = V (0) + Qv ⋅
∫ sin ⎝
0 T ⎠
(6.4)
Qv ⋅ T ⎡ 2 ⋅π ⎞ ⎤
V = V (0) + ⋅ ⎢1 – cos ⎛ ⋅t (6.5)
2 ⋅π ⎣ ⎝ T ⎠ ⎥⎦
[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 INTRODUCCIÓN RÁPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERÍA
Figura 6.13. Esquema Simulink para el cálculo de la evolución del volumen contenido
en un ecualizador con caudal variable.
El bloque Mux permite conducir por una línea varias señales. En el ejemplo,
Mux se utiliza para realizar operaciones en los bloques f(u), y para represen-
tar varias señales en un gráfico.
2500
Qi
Q
Volumen
2000
Caudales, (m3/h), Volumen (m3)
1500
1000
500
0
0 20 40 60 80 100 120
Tiempo, (Horas)
Figura 6.14. Resultado gráfico del cálculo de la evolución del volumen contenido
en un ecualizador con caudal variable.
[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 INTRODUCCIÓN RÁPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERÍA
450
C
Ci
400
350
Conc. Entrada/salida (mg/l)
300
250
200
150
100
50
0 20 40 60 80 100 120 140 160 180 200
Tiempo (Horas)
Figura 6.16. Concentración de salida del ecualizador, línea continua,
frente a concentración de entrada.
[1] Brian D. Hanhn. Essential MatLab for scientists and engineers. Buter-
worth-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 introduc-
tion. Oxford University Press. (2001).
[7] Stephen J. Chapman. MatLab programming for engineers. Brooks-Cole
Pub. Co. (2001)
[8] Gil Rodríguez M. Cálculos avanzados en procesos de descontaminación de
aguas. Consejo Superior de Investigaciones Científicas. (2003).
93
Índice alfabético
..., 21 continue, 40
LATEX, 19, 45 conv, 16
TEXtos en gráficos, 45
date, 20
Ajuste de datos, 56 datenum, 20
Ajuste lineal, 72 datestr, 20
angle, 12
ans, 12 datetick, 44
area, 48 datevec, 20
ascii, 22, 23 deconv, 16
atan2, 13 demo, 1
axes, 44 Derivadas, 27, 67
axis, 43, 44 de polinomios, 17
det, 15, 26
bar, 41 diary, 23
bar3, 46 diff, 27, 32
Bazin, ecuación, 63 double, 28
break, 40 dsolve, 29, 32
95
96 INTRODUCCIÓN RÁPIDA A MATLAB Y SIMULINK PARA CIENCIA E INGENIERÍA