Script 3.3: Simula una ecuación diferencial de primer ...

26
CAPÍTULO III: GNU OCTAVE - 20 - Figura 3.3: Solución de la ecuación diferencial de primer orden y una exponencial. 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+') Considere el siguiente ejemplo de un sistema no lineal de segundo orden (dos ecuaciones diferenciales de primer orden): Script 3.4: Programa de simulación de un sistema no lineal de segundo orden. segorde.m x0 = [0.1 3]; %condiciones iniciales function dx = f(x,t)

Transcript of Script 3.3: Simula una ecuación diferencial de primer ...

Page 1: Script 3.3: Simula una ecuación diferencial de primer ...

CAPÍTULO III: GNU OCTAVE

- 20 -

Figura 3.3: Solución de la ecuación diferencial de primer orden y una exponencial.

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+')

Considere el siguiente ejemplo de un sistema no lineal de segundo orden (dos

ecuaciones diferenciales de primer orden):

Script 3.4: Programa de simulación de un sistema no lineal de segundo orden.

segorde.m

x0 = [0.1 3]; %condiciones iniciales

function dx = f(x,t)

Page 2: Script 3.3: Simula una ecuación diferencial de primer ...

CAPÍTULO III: GNU OCTAVE

- 21 -

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

_ _gnuplot_set_ _ terminal png

_ _gnuplot_set_ _ output "segorden.png"

%subplot: comando de gnuplot que soporta múltiples gráficas. Divide

la ventana en n filas y n columnas de subgráficas

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

Para escribir cualquier comentario, dentro del script se usa “%”.

Entonces, se obtiene las gráficas siguientes:

Figura 3.4: Solución de un sistema de ecuaciones no lineal de segundo orden.

Page 3: Script 3.3: Simula una ecuación diferencial de primer ...

CAPÍTULO III: GNU OCTAVE

- 22 -

III.4. SIMULACIÓN DE UN CIRCUITO RC

Considere el circuito de la siguiente figura:

Circuito # 01

La fuente Vf(t) es una señal de onda cuadrada, como la que se muestra a

continuación:

Se planteará la ecuación diferencial que modela este circuito y luego se resuelve

usando GNU Octave. Asignamos, por ejemplo, las corrientes de malla y resolvemos

por el método de las mallas.

Circuito # 2

Page 4: Script 3.3: Simula una ecuación diferencial de primer ...

CAPÍTULO III: GNU OCTAVE

- 23 -

Cálculo de la ecuación diferencial y de la simulación.

Las ecuaciones planteadas en función de 1I e 2I son las siguientes, sabiendo que:

2I ic=

( )1 1 2 1 2 0Vf R I R I I− + + − = (3.1)

( )2 1 2 0R I I Vc− − + = (3.2)

Sustituyendo 2I en la ecuación (3.1) y (3.2).

( )1 2 1 2 0Vf R R I R ic− + + − = (3.3)

2 1 2 0R I R ic Vc− + + = (3.4)

Se despeja 1I de la ecuación (3.4)

22 1 2 1

2

R ic VcR I R ic Vc I

R

+= + ⇒ =

Se sustituye 1I en la ecuación (3.3)

( ) 21 2 2

2

0R ic Vc

Vf R R R icR

+− + + − =

(3.5)

Se despeja ic de la ecuación (3.5) y se obtiene:

( )1 2

1 2 1

Vc R RVfic

R R R

+= − (3.6)

Si cdVc

icdt

= entonces se sustituye en la ecuación (3.6) y se obtiene la ecuación

diferencial:

( )1 2

1 2 1

R RdVc VfVc

dt R R c R c

+= − +

La simulación de esta ecuación diferencial ordinaria para un primer periodo de señal

cuadrada se presenta de la manera siguiente:

Page 5: Script 3.3: Simula una ecuación diferencial de primer ...

CAPÍTULO III: GNU OCTAVE

- 24 -

Script 3.5: Programa de simulación de un sistema una ecuación diferencial de

primer orden. ec1.m

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

Page 6: Script 3.3: Simula una ecuación diferencial de primer ...

CAPÍTULO III: GNU OCTAVE

- 25 -

Donde la función lsode (Livermore Solver for Ordinary Differential Equations),

usa métodos numéricos adaptables a un paso de tiempo para avanzar a una solución

de un sistema de ecuaciones diferenciales ordinarias.

El primer argumento (“f”) es el nombre de la función a llamarse para calcular el

vector de partes derechas. Esto debe tener la forma dx = f(x,t), donde dx y x son

vectores y t es un escalar.

El segundo argumento especifica la condición inicial y el tercero especifica un vector

de veces de salida en las cuales la solución es deseada, incluyendo el tiempo

correspondiente de la condición inicial.

El comando axis especifica los limites entre lo que se representa la gráfica.

Figura 3.5: Representación de la tensión en el capacitor y la tensión en la fuente.

Ahora tomando un período de T=5τ, la figura es la siguiente:

Page 7: Script 3.3: Simula una ecuación diferencial de primer ...

CAPÍTULO III: GNU OCTAVE

- 26 -

Figura 3.6: Representación de la tensión en el capacitor y la tensión en la fuente

La fuente: implementación de una onda cuadrada.

Se va a completar el ejercicio anterior para hacer que automáticamente GNU Octave

calcule el valor positivo y negativo de Vf, hay que mirar el espacio de un ciclo. Es

decir, hay que darse cuenta que en la primera mitad del ciclo la fuente vale Vf y en la

segunda toma el valor -Vf (en este caso +5V y -5V, respectivamente).

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.

Esto se puede observar en el código del script 3.6:

Page 8: Script 3.3: Simula una ecuación diferencial de primer ...

CAPÍTULO III: GNU OCTAVE

- 27 -

Script 3.6: Programa de simulación de un Circuito RC para una señal de onda

cuadrada usando la función mod (). simuedif.m

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

Page 9: Script 3.3: Simula una ecuación diferencial de primer ...

CAPÍTULO III: GNU OCTAVE

- 28 -

Figura 3.7: Representa la tensión en el capacitor y el generador de señales.

Probando con un período más grande T=10τ , se observa la diferencia entre las

graficas:

Figura 3.8: Representa la tensión en el capacitor y el generador de señales

Page 10: Script 3.3: Simula una ecuación diferencial de primer ...

CAPÍTULO III: GNU OCTAVE

- 29 -

Sistemas de segundo orden

A continuación un ejemplo en el cual se tiene un sistema de segundo orden simulado.

1

2

= 43540.64924*Vf-1114055432*iL-74871.02986*Vc

= 34.27862866*Vc+2.872134427*Vf-109646.5323*iL

dx

dtdx

dt

El siguiente script 3.7, permite simular este sistema. Se muestra en el código

empleado, que ahora son dos variables en todos los casos. Dos condiciones iniciales y

dos ecuaciones diferenciales.

La simulación numérica de la respuesta de la tensión en el condensador y de la

corriente en la bobina se puede ver (Script 3.7):

Script 3.7: Simulación de una ecuación diferencial de segundo orden. seg.m

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

Page 11: Script 3.3: Simula una ecuación diferencial de primer ...

CAPÍTULO III: GNU OCTAVE

- 30 -

__gnuplot_set__ output "seg.png"

subplot(311),plot(t,x(:,1),'r')

title('Tensión en el capacitor')

xlabel('t [seg]')

ylabel('Vc(t)')

axis([ti tf -1 1])

subplot(312),plot(t,x(:,2),'r')

title('Corriente de la Bobina')

xlabel('t [seg]')

ylabel('iL(t)')

axis([ti tf -5E-4 5E-4])

% 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(313),plot(t,Vft,'r')

title('Generador')

xlabel('t [seg]')

ylabel('Vf(t)')

axis([ti tf -6 6])

Figura 3.9: Respuesta de la tensión, de la corriente en la bobina y de la fuente.

Page 12: Script 3.3: Simula una ecuación diferencial de primer ...

CAPÍTULO III: GNU OCTAVE

- 31 -

Uso de estructuras de decisión

Las estructuras de control de flujo permiten la ejecución condicional y la repetición

de un conjunto de comandos. Normalmente estas expresiones son de relación o

lógicas.

Estructura if y/o else

Si la condición del if es cierta, entonces se ejecuta el cuerpo que está a continuación.

Si es falso se pasa a evaluar la condición siguiente else, ejecutándose el código

correspondiente si su condición es cierta.

Estructura for

En este caso se evalúa la condición al comenzar y se ejecuta las acciones de la

estructura del ciclo un número especificado de veces y se le coloca la condición de

parada.

III.5. ALGORITMOS DE INTEGRACIÓN

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.

Page 13: Script 3.3: Simula una ecuación diferencial de primer ...

CAPÍTULO III: GNU OCTAVE

- 32 -

En el caso stiff es apropiado utilizar un esquema de integración implícito que a costa

de mayor coste computacional por paso permite llegar al resultado con muchas menos

iteraciones. Mientras que para el caso no stiff la precisión numérica es también muy

importante pero el mismo esquema de integración es capaz de controlarla.

En este caso MATLAB® y GNU Octave toman filosofías completamente distintas.

MATLAB® opta por muchas funciones con pocas opciones; GNU Octave opta por

una única función con muchas opciones; MATLAB® utiliza sus propios algoritmos y

GNU Octave utiliza el lsode de ODEPACK (A Systematized Collection of ODE

Solvers).

MATLAB® cuenta con las siguientes funciones para resolver ecuaciones

diferenciales ordinarias:

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.

A continuación se dará una breve explicación de estos métodos de integración:

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.

Page 14: Script 3.3: Simula una ecuación diferencial de primer ...

CAPÍTULO III: GNU OCTAVE

- 33 -

Runge – Kutta de orden cuatro: Simula la precisión del método de la serie de Taylor

de orden N = 4.

Nota: Si se desea conocer más acerca de éstas funciones y sus métodos de

integración, puede obtenerse mediante la ayuda asociada (help <ode23, ode45>).

En GNU Octave es muy recomendable que se utilice la función lsode (Livermore

Solver for Ordinary Differential Equations), la cual parte de ODEPACK. La función

de lsode usa métodos numéricos adaptables para llegar a una solución de un

sistema de ecuaciones diferenciales ordinarias con un paso de tiempo.

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.

También en GNU Octave se puede utilizar la función lsode_options que es una

función de configuración de lsode.

lsode_options index{lsode options} (OPT, VAL. Llamada con un

único argumento (OPT), dirá el valor de la opción de configuración que se haya

solicitado. A ésta función hay que decirle qué método de integración a utilizar y que

tipo de problema se va a resolver.

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.

Page 15: Script 3.3: Simula una ecuación diferencial de primer ...

CAPÍTULO III: GNU OCTAVE

- 34 -

Características Generales de las funciones de librería

El concepto de función en GNU Octave es semejante al de C y al de otros lenguajes

de programación, aunque con algunas diferencias importantes. Al igual que en C, una

función tiene nombre, valor de retorno y argumentos. Una función se llama

utilizando su nombre en una expresión o utilizándolo como un comando más.

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.

Podemos encontrar gran variedad de tipos de función según lo que resuelvan:

1. Funciones matemáticas elementales.

2. Funciones especiales.

3. Funciones matriciales elementales.

4. Funciones matriciales específicas.

5. Funciones para la descomposición y/o factorización de matrices.

6. Funciones para análisis estadístico de datos.

7. Funciones para análisis de polinomios.

8. Funciones para integración de ecuaciones diferenciales ordinarias.

9. Resolución de ecuaciones no-lineales y optimización.

10. Integración numérica.

11. Funciones para procesamiento de señal.

Las características principales de estas funciones son:

• Los argumentos actuales de estas funciones pueden ser expresiones y

también llamadas a otra función.

• Admite valores de retorno matriciales múltiples.

Page 16: Script 3.3: Simula una ecuación diferencial de primer ...

CAPÍTULO III: GNU OCTAVE

- 35 -

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.

format opción: Permite controlar la forma en que se realiza la presentación de

los números. Las principales opciones son:

1. short: Trata de representar, el punto fijo, 5 cifras significativas en un

máximo de 10 caracteres. Sino es posible conseguirlos en todos los

elementos de una matriz utiliza exponente.

2. long: Trata de representar, el punto fijo, 15 cifras significativas en un

máximo de 24 caracteres. Sino es posible conseguirlos en todos los

elementos de una matriz utiliza exponente.

3. short e: Idem que format short pero en un punto flotante

(presentando exponentes).

4. long e: Idem que format long pero en un punto flotante (presentando

exponentes).

Input (mensaje): Presenta contenido del string mensaje y espera que se teclee

en el terminal una expresión, la cual es evaluada y devuelta.

Input (mensaje, “s”): Idem que antes, pero no tecleados se devuelve en el

string y no es evaluado.

Menu (titulo, opcion1,….): Presenta un menú con titulo y las distintas

opciones y devuelve el número de la opción elegida por el usuario.

Page 17: Script 3.3: Simula una ecuación diferencial de primer ...

CAPÍTULO III: GNU OCTAVE

- 36 -

Kbhit(): Lee una única pulsación en el terminal y devuelve el carácter pulsado

en un string.

• Por ficheros

Estas funciones permiten salvar y recuperar variables a ficheros en distintos

formatos:

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:

1. ASCII: formato de texto de GNU Octave.

2. binary: formato de binario de GNU Octave.

3. flota – binary: formato de binario de GNU Octave, pero sólo en

simple precisión.

4. mat – binary: formato de binario de MATLAB®.

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:

1. force: si es necesario, sobre escribe las variables en memoria.

Entrada y salida tipo C

Están disponible un conjunto completo de funciones de acceso a ficheros tanto de

texto como binario, cuyo nombre, sintaxis y funcionalidad sigue los estándares del

Page 18: Script 3.3: Simula una ecuación diferencial de primer ...

CAPÍTULO III: GNU OCTAVE

- 37 -

lenguaje de programación C. De esta manera es posible un control total sobre el

manejo de fichero.

Las más destacadas son: printf, sprintf, fprintf, fscanf, fread, fwrite.

Otros comandos

quit (estados): sale de GNU Octave devolviendo si se desea, el código de estado

indicado.

exit (estado): Idem que quit.

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.

Nota: Para más información sobre el uso de funciones y comandos la documentación

en general de GNU Octave ver el manual:

Autor: John W. Eaton.

GNU Octave

A high-level interactive language for numerical computations

Edition 3 for Octave version 2.1.x

February 1997

También el manual on-line en http://www.octave.org.

Page 19: Script 3.3: Simula una ecuación diferencial de primer ...

CAPÍTULO IV

CONTROL LINEAL DE SISTEMAS

NO LINEALES: LINEALIZACIÓN

APROXIMADA

Page 20: Script 3.3: Simula una ecuación diferencial de primer ...

CAPÍTULO IV: LINEALIZACIÓN APROXIMADA

- 39 -

CAPITULO IV

IV. CONTROL LINEAL DE SISTEMAS NO LINEALES:

LINEALIZACIÓN APROXIMADA

IV.1. LINEALIZACIÓN APROXIMADA

En este capitulo se propone utilizar el método de la linealización aproximada para el

análisis del comportamiento de sistemas no lineales. Este método será útil en la

vecindad de su punto de equilibrio, siempre y cuando las perturbaciones que afectan

la evolución del sistema sean suficientemente pequeñas.

El modelo linealizado resulta, a partir del sistema de ecuaciones no lineales y

utilizando el punto de equilibrio deseado, mediante el cálculo de matrices jacobianas.

Nota: Para más información sobre la teoría de linealización aproximada consultar el

libro Control de Sistemas no Lineales de Sira Ramírez y col. (2005).

IV.1.1. EJEMPLOS

A continuación, se describen algunos ejemplos de linealización de sistemas alrededor

de puntos de equilibrio constantes. Estos ejemplos se implementan vía Web mediante

PHP, gracias a la colaboración de Yaneth Godoy, (2006).

IV.1.1.1. Control de la orientación de un artefacto espacial

Se desea controlar la posición angular θ de un artefacto espacial, como el que se

muestra en la figura 4.1. Para controlar este artefacto se dispone de una tobera que

puede girar alrededor de su base sobre un pivote especial. El ángulo de orientación de

Page 21: Script 3.3: Simula una ecuación diferencial de primer ...

CAPÍTULO IV: LINEALIZACIÓN APROXIMADA

- 40 -

la tobera respecto al eje principal del cuerpo de la astronave es β. La tasa de variación

del ángulo de la tobera es directamente proporcional a u. L es la distancia desde el

punto de apoyo de la tobera en el cuerpo del artefacto hasta el centro de gravedad de

la nave (cg). Se supone que la fuerza F de reacción, debida a la expulsión de los gases

de la combustión del motor del artefacto, está aplicada sobre el punto de apoyo de la

tobera. Como consecuencia de la fuerza F el artefacto gira alrededor de su centro de

gravedad en uno u otro sentido. El problema de control consiste en mantener el

ángulo θ en un valor fijo θ, usando como control la velocidad de variación u del

ángulo β de la tobera.

Figura 4.1: Esquema de un artefacto espacial.

El sistema no lineal se describe de la manera siguiente:

1 2x x=�

2 3sin( )FL

x xJ

=� (4.1)

3x Ru=�

El punto de equilibrio del sistema se obtiene a partir de las ecuaciones diferenciales,

igualando a cero las derivadas de las variables de estado, se expresa como:

1 20 0x x= ⇒ =�

2 3 30 sin( ) 0 0FL

x x xJ

= ⇒ = ⇒ =�

3 0 0 0x Ru U= ⇒ = ⇒ =�

Page 22: Script 3.3: Simula una ecuación diferencial de primer ...

CAPÍTULO IV: LINEALIZACIÓN APROXIMADA

- 41 -

1x arbitrario θ= =

( ,0,0,0)Pe θ= 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:

1 1 1

1 2 3

2 2 23

1 2 3

3 3 3

1 2 3

0 1 0 0 1 0

0 0 cos( ) 0 0

0 0 0 0 0 0pe

Pe

df df df

dx dx dx

df df df FL FLA x

dx dx dx J J

df df df

dx dx dx

= = =

1

2

3

0

0

Pe

df

dudf

Bdu

Rdf

du

= =

[ ]1 2 3

1 0 0X

dy dy dyC

dx dx dx

= =

La linealización del sistema alrededor del punto de equilibrio es el siguiente:

1 1

2 2

3 3

0 1 00

0 0 0

0 0 0

x xFL

x x uJ

x x R

δ δ

δ δ δ

δ δ

= +

(4.2)

[ ]1

2

3

1 0 0

x

y x

x

δ

δ δ

δ

=

Page 23: Script 3.3: Simula una ecuación diferencial de primer ...

CAPÍTULO IV: LINEALIZACIÓN APROXIMADA

- 42 -

IV.1.1.2. Manipulador robótico de una sola unión rígida

Figura 4.2: Manipulador robótico de unión rígida.

Considere el manipulador robótico de una sola unión rígida que se muestra en la

figura 4.2. El modelo no lineal de este sistema se puede representar mediante las

siguientes ecuaciones:

1 2x x=�

12 2

1sin

xB cx x u

J J N J

= − − +

� (4.3)

1y x=

Donde 1 Px θ= (posición angular), 2 Px θ= � (velocidad angular), son las variables de

estado y la variable de control está dada por el torque aplicado u τ= . El parámetro N

corresponde al factor de reducción angular del juego de engranajes que acopla el eje

del motor al eje del brazo manipulador; B es el coeficiente de fricción viscosa y J es

el momento de inercia; c es una constante que iguala al triple del producto MgL,

donde M es la masa del brazo, g es la aceleración de la gravedad y L es la distancia

del eje al centro de masa del brazo manipulador.

El punto de equilibrio del sistema, parametrizado con respecto al torque nominal U,

está dado por:

1 20 0x x= ⇒ =�

Page 24: Script 3.3: Simula una ecuación diferencial de primer ...

CAPÍTULO IV: LINEALIZACIÓN APROXIMADA

- 43 -

12 2

10 sin

xB cx x u

J J N J

= ⇒ − − +

12

1sin

xc Bx u

J N J J

− = −

11sin arcsin

x u ux N

N c c

= ⇒ =

1 arcsinU

u U x Nc

= ⇒ =

arcsin ;0;U

pe N Uc

=

Donde U<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:

1 1

1 2

12 2

1 2

0 1

cos

= = = − −

pepe

df df

dx dxA xc B

df dfNJ c J

dx dx

21

2

0 10 1

cos sin 1c U B c U BN

NJ c J NJ c J

= − − − − −

1

2

0

1

= = Pe

df

duBdf

Jdu

[ ]1 0C =

El sistema linealizado alrededor del punto de equilibrio es el siguiente:

1 12

2 22

0 1 0

11

= + − − −

x xuc U Bx x

JNJ c J

δ δ

δ

δ δ

(4.4)

[ ] 1

2

1 0

=

xy

δ

δ

Page 25: Script 3.3: Simula una ecuación diferencial de primer ...

CAPÍTULO IV: LINEALIZACIÓN APROXIMADA

- 44 -

IV.1.1.3. Posición de un anillo sobre un aro rotatorio

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

Figura 4.3: Aro rotatorio sobre el que se desliza un anillo.

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 2u = ω . 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:

22

2sin sin cos

da g

dt

θθ αω θ θ= − + (4.5)

Este modelo se puede reescribir mediante las siguientes ecuaciones diferenciales

ordinarias:

1 2x x=�

( ) ( ) ( )2 1 1 1sin sin cosg

x x u x xa

= − +� (4.6)

1( )y x t=

Page 26: Script 3.3: Simula una ecuación diferencial de primer ...

CAPÍTULO IV: LINEALIZACIÓN APROXIMADA

- 45 -

El punto de equilibrio parametrizado en términos de la posición angular θ = Ө

deseada, está dado por:

1x Xθ= =

1 20 0x x= ⇒ =�

2 0cos( )

gx U

a X= ⇒ =�

,0,cos( )

=

gPe X

a X

Las matrices constantes A, B y C para este caso, están dadas por:

1 1

1 2

2 22 2 1 1 1

1 2

0 1

cos( ) (cos ( ) sin ( )) 0Pe

Pe

df df

dx dxA g

df df x u x xa

dx dx

= = − + −

2 2

0 1

cos( ) (cos ( ) sin ( )) 0cos( )

A g gX X X

a a X

= − + − −

0 1

tan( )sin( ) 0A g

X Xa

= −

1

1 12

0 0

sin( ) cos( ) sin( ) cos( )Pe

Pe

df

duBx xdf X X

du

= = =

[ ]1 2

1 0dy dy

Cdx dx

= =

El sistema linealizado alrededor del punto de equilibrio deseado, es de la manera

siguiente: