PDF de programación - III. TUTORIAL BÁSICO DE SYMBOLIC

<<>>
Imágen de pdf III. TUTORIAL BÁSICO DE SYMBOLIC

III. TUTORIAL BÁSICO DE SYMBOLICgráfica de visualizaciones

Publicado el 25 de Marzo del 2018
718 visualizaciones desde el 25 de Marzo del 2018
23,1 KB
10 paginas
III. TUTORIAL BÁSICO DE SYMBOLIC

El toolbox symbolic de MATLAB, contiene un amplio conjunto de

funciones muy útiles para realizar cálculos simbólicos. Un listado completo de

las mismas puede obtenerse ejecutando sobre la línea de comandos del

workspace la sentencia:

help toolbox\symbolic

Este apunte presenta, sobre un ejemplo de aplicación, la utilización de

las funciones básicas del toolbox symbolic. Para una descripción más detallada

de

las mismas remitimos al Help o bien a

la Guía del Usuario

correspondiente.

Cabe aclarar que las funciones que aquí se ejemplifican corresponden a

la versión 4.2 de MATLAB. Versiones posteriores han modificado la sintaxis

de algunas de ellas.

Consideremos un sistema descripto por el siguiente modelo dinámico no

lineal:



x

1

=

x

2

+

x
1

+

u



x

y

=

2
=

+

1

x
1

-

+

1

x

2

+

x
1

x

2

y supongamos que queremos obtener el punto estático de operación de este

sistema como función del control u, para posteriormente linealizarlo en torno a

un valor particular del mismo. Igualando a cero las expresiones de las

derivadas de los estados, nos queda el siguiente sistema de ecuaciones

algebraico:

=

=

0
0

x

+

+

2
1

+

-

x
1
x
1

u

+

1

x

2

que resolvemos utilizando la función solve:

[x1o,x2o]=solve('x2+x1+u','sqrt(x1+1)-sqrt(x2+1)',

'x1,x2')

donde los dos primeros argumentos de la función corresponden a las

expresiones de las derivadas de los estados y el último a las variables que se

pretende despejar. En el caso en que las ecuaciones están descriptas por un

solo miembro, el programa asume que el otro miembro es idéntico a cero. La

ejecución del comando anterior retorna dos puntos de funcionamiento estático

coincidentes, dados por:

x1o =

[-1/2*u]

[-1/2*u]

x2o =

[-1/2*u]

[-1/2*u]

Es conocido que la linealización alrededor de un punto de operación (x1o, x2o)
de un sistema no lineal, tiene las matrices A, B y C definidas como:

ø
œ
œ
œ

ß

x
1
x

2



x
1
x

o

2

o

=

A

Ø
Œ
Œ
Œ
Œ
º


f
1

x
1

f
2

x
1


f
1

x
2

f
2

x

2

=

B

Ø
Œ
Œ
Œ
º


ø
f
1
œ

u
œ

f
œ
2

ß
xu
1
x

2





x
1
x

o

2

o

=

C

Ø
Œ
º


y

x
1


y

x

2

ø
œ
ß

x
1
x

2





x
1
x

o

2

o

Para calcular estas matrices podemos apelar a tres funciones diferentes

que son: diff, taylor y jacobian. A continuación se utiliza la función jacobian

para obtener las matrices A y C, y la función diff para obtener la matriz B

(esta última no puede calcularse a través de jacobian por incompatibilidad de

dimensiones):

A=jacobian(sym('x2+x1+u;sqrt(x1+1)-sqrt(x2+1)'),

sym('x1,x2'))

B=diff(sym('x2+x1+u;sqrt(x1+1)-sqrt(x2+1)'),

sym('u'))

C=jacobian(sym('sqrt(x1)+sqrt(x2)'),sym('x1,x2'))

Ejecutando estos comandos el programa retorna:

A =

[ 1, 1]

[1/2/(1+x1)^(1/2), -1/2/(x2+1)^(1/2)]

B =

[1]

[0]

C =

[1/2/x1^(1/2), 1/2/x2^(1/2)]

NOTA: las funciones anteriores también pueden ejecutarse definiendo

previamente el vector que se desea derivar utilizando el comando ‘sym’. Esto

es:

F=sym('[x2+x1+u;sqrt(x1+1)-sqrt(x2+1)'])

A=jacobian(F,sym('x1,x2'))

B=diff(F,sym('u'))

Finalmente para determinar las matrices A, B y C correspondientes a la

linealización del sistema en torno al punto de operación, debemos reemplazar

en ellas la aparición de las variables x1 y x2 por los valores almacenados en x1o
y x2o obtenidos anteriormente. Para ello se emplea el comando subs:

A=subs(A,'-1/2*u','x1')

A=subs(A,'-1/2*u','x2')

C=subs(C,'-1/2*u','x1')

C=subs(C,'-1/2*u','x2')

NOTA: cabe aclarar que de no haber obtenido soluciones múltiples para x10

y x20, podríamos escribir las sentencias anteriores como:

A=subs(A,x1o,'x1')

Ejecutando, obtenemos:

A =

[ 1, 1]

[1/2/(1-1/2*u)^(1/2), -1/2/(1-1/2*u)^(1/2)]

C =

[1/2/(-1/2*u)^(1/2), 1/2/(-1/2*u)^(1/2)]

Para observar la expresión de cualquiera de estas matrices A, B y C en

una forma mas elaborada, podemos utilizar el comando pretty:

pretty(A)

retornando:

ÇÊ 1 1 ÍÐ

ÈË ÎÑ

ÈË 1 1 ÎÑ

ÈË õõõõõõõõõõõõõõõõ - õõõõõõõõõõõõõõõõ ÎÑ

ÈË 1/2 1/2 ÎÑ

ÉÌ 2(1 - 1/2 u) 2 (1 - 1/2 u) ÏÒ

De esta manera hemos obtenido las expresiones simbólicas de las

matrices A, B y C correspondientes a la linealización de un modelo, en torno a

un punto de operación.

A fin de ejemplificar la utilización de algunas otras funciones

importantes, consideremos la diagonalización del modelo lineal obtenido.

Como es conocido, para diagonalizar debemos aplicar la transformación lineal

dada por la matriz de los autovectores de A, la cual puede hallarse a través de

la función eigensys:

[T,P] = eigensys(A)

Esta función retorna una matriz de autovectores [T] y un vector con los

autovalores del sistema [P].

NOTA: si la matriz A aún no se encontrara definida, esta función puede

ejecutarse, como:

[T,P] = eigensys(sym('[1, 1;1/2/(1-1/2*u)^(1/2), -1/2/(1-1/2*u)^(1/2)]'))

Para encontrar las matrices Ad, Bd y Cd del modelo lineal diagonalizado,

debemos realizar la siguiente operatoria:

A
d

B
C

d

d

1



=

T



TA

B

=

=

1





T
TC



Inicialmente tenemos que hallar la matriz inversa de T, para lo cual

usamos el comando inverse. Esto es:

TI=inverse(T)

Luego, para obtener Ad la multiplicación de matrices se realiza con la función
symmul. Como esta función toma únicamente dos argumentos, para obtener la

expresión por medio de una sola línea de comando, se realiza una anidación de

funciones symmul:

Ad=symmul(TI,symmul(A,T))

De igual manera obtenemos Bd y Cd como:

Bd=symmul(TI,B)

Cd=symmul(C,T)

NOTA: otras operaciones simbólicas básicas se realizan por medio de las

funciones ‘symadd’, ‘symsub’, ‘symdyv’, ‘sympow’, etc. Versiones de Matlab

posteriores a la 4.2 eliminaron estas funciones reemplazándolas por los

operandos matemáticos comunes (+, -, *, ^).

Utilizando otras operaciones matriciales como las mencionadas en la

nota anterior, es inmediato obtener la matriz de transferencia del sistema lineal

(este cálculo puede hacerse con el sistema diagonalizado o no).

AIsC)s(T

-

=

(



1

)



B

Para ello debemos crear inicialmente una matriz identidad simbólica de

dimensiones adecuadas, y luego anidar las demás operaciones en una única

sentencia. Esto es:

I=sym(‘[1,0;0,1]’)

Ts=symmul(symmul(C,inverse(symsub(symmul(sym(‘s’

),I),A))),B)

Ejecutando esta sentencia se obtiene una expresión larga y complicada de la

función de transferencia. Para que sea mostrada en un formato más compacto

podemos acudir a la función de simplificación simple y a la conocida pretty.

Esto es, haciendo:

Ts=simple(Ts)

pretty(Ts)

obtenemos:

1/2 1/2

2 (s (4 - 2 u) + 2)

1/2 õõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõ˝õõõõõõõ

1/2 2 1/2 1/2

(- u) (s (4 - 2 u) + s - s (4 - 2 u) - 2)

También podríamos obtener el polinomio característico del modelo linealizado

a través de la función charpoly. Esto es:

PolCar=Charpoly(A)

Retornando:

PolCar =

(x^2*(4-2*u)^(1/2)+x-x*(4-2*u)^(1/2)-2)/(4-

2*u)^(1/2)

Finalmente si quisiéramos obtener las matrices A y C en forma

numérica para un determinado valor de u, por ejemplo u=-3, empleamos las

funciones subs para substituir la expresión de u por el valor deseado y numeric

para realizar las operaciones algebraicas. Esto es:

An=subs(A,-3,’u’)

Bn=subs(B,-3,’u’)

Cn=subs(C,-3,’u’)

Retornando:

An =

[ 1, 1]

[1/10*5^(1/2)*2^(1/2), -1/10*5^(1/2)*2^(1/2)]

Bn =

[1]

[0]

Cn =

[1/6*3^(1/2)*2^(1/2), 1/6*3^(1/2)*2^(1/2)]

Luego aplicamos la función numeric:

An=numeric(An)

Bn=numeric(Bn)

Cn=numeric(Cn)

Retornando:

An =

1.0000 1.0000

0.3162 -0.3162

Bn =

1

0

Cn =

0.4082 0.4082

NOTA: el toolbox symbolic posee un conjunto de funciones de simplificación

(‘simple’, ‘simplify’, ‘factor’, ‘expand’, ‘collect’) que resultan muy útiles a la

hora de reducir las expresiones que se obtienen al aplicar otras operaciones

simbólicas. Es recomendable su uso frecuente en pasos intermedios del

cálculo.
  • Links de descarga
http://lwp-l.com/pdf9856

Comentarios de: III. TUTORIAL BÁSICO DE SYMBOLIC (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad