Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Script 3.3: Simula una ecuación diferencial de primer orden y una ecuación
exponencial. priorden1.m.
x0 = -1.5;
function xdot = h(x,t)
a = -1;
xdot = a*x;
endfunction
t = linspace(0,6);
x = lsode("h",x0,t);
_ _gnuplot_set_ _ terminal png
_ _gnuplot_set_ _ output "priorden1.png"
plot(t,x,'b',t,-1.5*exp(-t),'r+')
function dx = f(x,t)
- 20 -
CAPÍTULO III: GNU OCTAVE
dx = [-x(1)+x(2);-x(2)^3 ];
endfunction
%tiempo de simulación
ti = 0;
tf = 1;
np = 100;
t = linspace(ti,tf,np);
x = lsode("f",x0,t);
subplot(2,2,1);
plot(t,x) % devuelve las grafica de las dos componentes
xlabel('t[seg]')
ylabel('x1 y x2')
subplot(2,2,2)
plot(t,x(:,1),'r')
xlabel('t[seg]')
ylabel('x1')
- 21 -
CAPÍTULO III: GNU OCTAVE
Circuito # 01
Circuito # 2
- 22 -
CAPÍTULO III: GNU OCTAVE
I 2 = ic
−Vf + R1 I1 + R2 ( I1 − I 2 ) = 0 (3.1)
− R2 ( I1 − I 2 ) + Vc = 0 (3.2)
− R2 I1 + R2ic + Vc = 0 (3.4)
R2ic + Vc
R2 I1 = R2ic + Vc ⇒ I1 =
R2
R ic + Vc
−Vf + ( R1 + R2 ) 2 − R2ic = 0 (3.5)
R2
cdVc
Si ic = entonces se sustituye en la ecuación (3.6) y se obtiene la ecuación
dt
diferencial:
dVc ( R + R2 ) Vc + Vf
=− 1
dt R1 R2 c R1c
- 23 -
CAPÍTULO III: GNU OCTAVE
global C R1 R2 tau T Vf
%Parámetros
C = 0.1e-6; % 0.1 microfaradios
R1 = 1000; % ohmios
R2 = 250; % ohmios
Vf = 5;
x0 = -Vf*R2/(R1+R2);
function dx = f(x,t)
global C R1 R2 tau T Vf
Vc=x(1);
% Definición de la constante de tiempo del circuito # 02
tau = 2E-5;
T = 1*tau;
% Señal de onda cuadrada
if t < T/2
Vf = 5;
else
Vf = -5;
end
% Código de la ecuación diferencial
dx = -(R1+R2)*Vc/(R2*R1*C)+Vf/(R1*C);
endfunction
ti = 0;
tf = 1E-4;
np = 1000;
t = linspace(ti,tf,np);
x = lsode("f",x0,t);
_ _gnuplot_set_ _ terminal png
_ _gnuplot_set_ _ output "ec1.png"
subplot(211),plot(t,x,'r')
title('Tensión en el capacitor')
xlabel('t [seg]')
ylabel('Vc(t)')
axis([ti tf -1 1])
% señal de onda cuadrada
Vft = [ ];
for i = 1:length(t),
if t(i) < T/2
Vft(i) = 5;
else
Vft(i) = -5;
end
end
subplot(212),plot(t,Vft,'r')
title('Tensión en fuente')
xlabel('t [seg]')
ylabel('Vf(t)')
axis([ti tf -6 6])
- 24 -
CAPÍTULO III: GNU OCTAVE
- 25 -
CAPÍTULO III: GNU OCTAVE
Para que GNU Octave genere esta secuencia se va a emplear la función mod(x,y)
que genera el resto de la división de x/y. Ejemplo: mod(5.5,3) da el valor 2.5.
En este caso, mod(t,T) da el resto en el período T. La cantidad mod(t,T) es
mayor que cero y menor T. Entonces, sólo se necesita saber cuando mod(t,T) es
menor que T/2, para asignar el valor positivo Vf a la fuente.
- 26 -
CAPÍTULO III: GNU OCTAVE
global C R1 R2 tau T Vf
%Parámetros
C = 0.1e-6; % 0.1 microfaradios
R1 = 1000; % ohmios
R2 = 250; % ohmios
Vf = 5;
%x0 = -Vf*R2/(R1+R2);
function dx = f(x,t)
global C R1 R2 tau T Vf
Vc=x(1);
% Definición de la constante de tiempo del circuito
tau = R1*R2/(R1+R2)*C;
T = 1*tau;
% Señal de onda cuadrada
if mod(t,T) < T/2
Vf = 5;
else
Vf = -5;
end
% Código de la ecuación diferencial
dx = -(R1+R2)*Vc/(R2*R1*C)+Vf/(R1*C);
endfunction
ti = 0;
tf = 5E-4;
np = 1000;
t = linspace(ti,tf,np);
x = lsode("f",(-Vf*R2/(R1+R2)),t);
__gnuplot_set__ terminal png
__gnuplot_set__ output "probar.png"
subplot(211),plot(t,x,'r')
title('Tensión en el capacitor')
xlabel('t [seg]')
ylabel('Vc(t)')
axis([ti tf -1 1])
% señal de onda cuadrada
Vft = [ ];
for i = 1:length(t),
if mod(t(i),T) < T/2
Vft(i) = 5;
else
Vft(i) = -5;
end
end
subplot(212),plot(t,Vft,'r')
title('Generador')
xlabel('t [seg]')
ylabel('Vf(t)')
axis([ti tf -6 6])
- 27 -
CAPÍTULO III: GNU OCTAVE
Probando con un período más grande T=10τ , se observa la diferencia entre las
graficas:
- 28 -
CAPÍTULO III: GNU OCTAVE
dx1
= 43540.64924*Vf-1114055432*iL-74871.02986*Vc
dt
dx2
= 34.27862866*Vc+2.872134427*Vf-109646.5323*iL
dt
global T Vf
x0 = [-0.1696599441 -0.184012954E-3];
function dx = f(x,t)
global T
Vc=x(1);
iL=x(2);
% Definición de la constante de tiempo del circuito
T = 5/3775;
% Señal de onda cuadrada
if mod(t,T) < T/2 %
Vf = 5;
else
Vf = -5;
end
%La ecuación diferencial
dx(1) = 43540.64924*Vf-1114055432*iL-74871.02986*Vc;
dx(2) = 34.27862866*Vc+2.872134427*Vf-109646.5323*iL;
endfunction
ti = 0;
tf = 2E-3;
np = 100;
t = linspace(ti,tf,np);
x = lsode("f",x0,t);
__gnuplot_set__ terminal png
- 29 -
CAPÍTULO III: GNU OCTAVE
- 30 -
CAPÍTULO III: GNU OCTAVE
Estructura for
Se podría decir que hay un método de integración para cada problema. Existen
multitud de esquemas de integración y escoger uno de ellos no es fácil. Uno de los
objetivos de las funciones de MATLAB® y GNU Octave es intentar ser lo más
universales posible. La función perfecta sería la que sin configuración alguna
integrara cualquier ecuación diferencial ordinaria (EDO) con una precisión aceptable;
desgraciadamente no existe y probablemente no exista nunca.
Una consideración esencial antes de intentar resolver una EDO es saber si el paso
temporal viene condicionado por la precisión numérica o por criterios de estabilidad,
esto es, si presenta problemas stiff o no stiff.
- 31 -
CAPÍTULO III: GNU OCTAVE
Las funciones ode23 y ode45, las cuales implementan los métodos de Runge –
Kutta – Fehlberg, Runge – Kutta de orden dos, tres, cuatro y cinco respectivamente.
Sólo se mencionan éstas porque son las más comunes.
Runge – Kutta – Fehlberg: Es una forma de resolver EDO ya que incluye un criterio
para determinar en cada momento si estamos utilizando el tamaño de paso apropiado.
En cada paso se calculan dos aproximaciones distintas de la solución y se comparan:
si los dos valores son suficientemente parecidos, entonces se acepta la aproximación
y además, se aumenta el tamaño de paso si coinciden en más cifras significativas que
las requeridas; mientras que si los valores no coinciden con la precisión especificada,
entonces se reduce el tamaño de paso (Mathews, John y col. 2000).
Runge – Kutta de orden dos: Simula la precisión del método de la serie de Taylor de
orden N = 2.
- 32 -
CAPÍTULO III: GNU OCTAVE
Runge – Kutta de orden cuatro: Simula la precisión del método de la serie de Taylor
de orden N = 4.
Utiliza un método de integración multipaso Adams para problemas no stiff y una BDF
(Backward Differentiation Formula) para los problemas stiff.
Adams: Procura seleccionar la fórmula más eficiente en cada paso así como para
elegir un tamaño de paso óptimo h para alcanzar una exactitud especificada. Este
método funciona mejor cuando se hacen salir muchos puntos.
La diferencia esencial entre GNU Octave y MATLAB® es que el primero pide por
defecto los puntos en los que queremos la solución. MATLAB® prefiere resolver el
problema y dar los puntos en el tiempo en los que se ha pasado durante la integración.
Es por ese motivo por el que el argumentó “tiempo” es en el primer caso un vector de
un millar de elementos mientras que en el segundo es tan solo un par de escalares.
- 33 -
CAPÍTULO III: GNU OCTAVE
Los nombres de las funciones de GNU Octave no son palabras reservadas del
lenguaje. Es posible crear una variable llamada sin o cos, que ocultan las funciones
correspondientes. Para poder acceder a las funciones hay que eliminar (clear) las
variables del mismo nombre que las ocultan.
- 34 -
CAPÍTULO III: GNU OCTAVE
Comando de entrada/salida
• Por terminal
disp (x): Presenta el contenido del parámetro pero sin indicar su nombre,
como ocurre si evaluamos directamente su nombre.
Input (mensaje): Presenta contenido del string mensaje y espera que se teclee
en el terminal una expresión, la cual es evaluada y devuelta.
- 35 -
CAPÍTULO III: GNU OCTAVE
• Por ficheros
Save fichero v1, v2, … salva las variables indicadas, o todas las del espacio
del trabajo actual sino se indica ninguna en el fichero. La s variables se
pueden indicar utilizando comodines (? *[lista]). Las opciones sirven para
indicar el formato en que se salvaran las variables:
load opciones fichero v1, v2 …: Carga las variables especificadas del fichero,
o todas si no se especifican variables. GNU Octave detecta el formato del
fichero a cargar. Por defecto GNU Octave se niega a sobre escribir una
variable existente en el espacio de trabajo. La opción más interesante es:
- 36 -
CAPÍTULO III: GNU OCTAVE
Otros comandos
Help concepto: presenta la ayuda disponible sobre el tema solicitado, función y otros.
Eval (string): Ejecuta comando presentados por string en el espacio de trabajo actual.
- 37 -
CAPÍTULO IV
CONTROL LINEAL DE SISTEMAS
NO LINEALES: LINEALIZACIÓN
APROXIMADA
CAPÍTULO IV: LINEALIZACIÓN APROXIMADA
CAPITULO IV
IV.1.1. EJEMPLOS
- 39 -
CAPÍTULO IV: LINEALIZACIÓN APROXIMADA
x1 = x2
FL
x2 = sin( x3 ) (4.1)
J
x3 = Ru
x1 = 0 ⇒ x2 = 0
FL
x2 = 0 ⇒ sin( x3 ) = 0 ⇒ x3 = 0
J
x3 = 0 ⇒ Ru = 0 ⇒ U = 0
- 40 -
CAPÍTULO IV: LINEALIZACIÓN APROXIMADA
x1 = arbitrario = θ
Pe = (θ , 0, 0, 0) donde Pe es el punto de equilibrio.
Dado que el modelo obtenido es no lineal, se linealiza el sistema alrededor del punto
de equilibrio. Para realizar la linealización, se debe tomar en cuenta que se trata de un
sistema de tercer orden, con lo cual las matrices constantes A, B y C están dadas por:
0 1 0
x1δ x1δ 0
x = 0 0 FL
2δ x2δ + 0 uδ (4.2)
J
x3δ x R
0 0 0 3δ
x1δ
yδ = [1 0 0] x2δ
x3δ
- 41 -
CAPÍTULO IV: LINEALIZACIÓN APROXIMADA
x1 = x2
B c x 1
x2 = − x2 − sin 1 + u (4.3)
J J N J
y = x1
x1 = 0 ⇒ x2 = 0
- 42 -
CAPÍTULO IV: LINEALIZACIÓN APROXIMADA
B c x 1
x2 = 0 ⇒ − x2 − sin 1 + u
J J N J
c x B 1
− sin 1 = x2 − u
J N J J
x u u
sin 1 = ⇒ x1 = N arcsin
N c c
U
u = U ⇒ x1 = N arcsin
c
U
pe = N arcsin ;0;U Donde U<c
c
En este caso se trata de un sistema de segundo orden, con lo cual las matrices
constantes A, B y C son las siguientes:
df1 df1
dx 0 1
dx2
A=
1
= c x B
=
df 2 df 2 − cos 1 −
NJ c J pe
dx
1 dx2 pe
0 1 0 1
=
− c cos N sin −1 U − B − c 1 − U
2
B
NJ −
c J NJ c2 J
df1
du 0
B = = 1
df 2
du Pe J
C = [1 0]
0 1 0
x1δ x1δ
x = c U2 B + 1 uδ (4.4)
2δ − 1− 2 − x2δ
NJ c J J
x
yδ = [1 0] 1δ
x2δ
- 43 -
CAPÍTULO IV: LINEALIZACIÓN APROXIMADA
Considérese el caso de un anillo que se desliza sin roce sobre un aro que se puede
hacer girar a velocidad angular ω, regulable a voluntad (ver figura 4.3).
Se desea mantener el valor del ángulo θ en un valor constante deseado dado por θ =
Ө. La variable de control en este caso está constituida por el cuadrado de la velocidad
angular u = ω2 . El radio del aro, que se supone indeformable por efecto de la fuerza
centrífuga, está dado por a.
El modelo del sistema es el siguiente:
d 2θ
a = − g sin θ + αω 2 sin θ cos θ (4.5)
dt 2
x1 = x2
g
x2 = − sin ( x1 ) + u sin ( x1 ) cos ( x1 ) (4.6)
a
y = x1 (t )
- 44 -
CAPÍTULO IV: LINEALIZACIÓN APROXIMADA
x1 = θ = X
x1 = 0 ⇒ x2 = 0
g
x2 = 0 ⇒ U =
a cos( X )
g
Pe = X , 0,
a cos( X )
df1 df1
dx 0 1
dx2
A= 1 = g
df 2 df 2 − cos( x1 ) + u (cos 2 ( x1 ) − sin 2 ( x1 )) 0
dx a Pe
1 dx2 Pe
0 1
A= g g
− cos( X ) + − (cos ( X ) − sin ( X )) 0
2 2
a a cos( X )
0 1
A= g
− tan( X ) sin( X ) 0
a
df1
du 0 0
B= = =
df 2 sin( x1 ) cos( x1 ) Pe sin( X ) cos( X )
du Pe
dy dy
C= = [1 0]
dx1 dx2
- 45 -