Matlab - comando c2dm (MatLab está errado?)

 
Vista:

comando c2dm (MatLab está errado?)

Publicado por Ernesto (2 intervenciones) el 05/10/2008 01:58:04
Estimados, estoy desarrollando mi tesis de grado , y bueno metiendome más al tema de discretización de sistemas es que estuve hoy revisando la teoría al respcto, y pues hoy me nació una gran duda. Siempre hemos solido usar el comando c2dm para discretizar un sistema.

Por ejm si tenemos en espacio de estados

X' = A X + B u
Y = CX + Du

las matrices A, B, C y D son en régimen continuo, pero si queremos encontrar las correspondientes matrices en régimen discreto con un tiempo de muestreo Ts y retenedor de orden cero , aplicamos:

[F,G,H,J] = c2dm(A,B,C,D,Ts,'zoh');

en teoria la matriz F se obtiene de F = exp(A*Ts) y la matriz G resolviendo una integral que ahora no viene al caso decir cómo es, pueden revisar los libros como el OGATA (Sistemas de control en tiempo discreto pg 314-315).

El punto es que usando la teoria , la F que obtengo no es la misma que me entrega el comando c2dm. Alguien sabe por qué????

Ejm,
%compruebenlo ejecutando el sgte código: comparen F con eAT al final del programa.

clear all;
A= [ 0 1.0000 0 0;
0 -0.1818 2.6727 0;
0 0 0 1.0000;
0 -0.4545 31.1818 0 ]
B=[
0
1.8182
0
4.5455
]

C=[
1 0 0 0
0 0 1 0
]

D=[
0
0
]

Ts=0.0100

F =[
1.0000 0.0100 0.0001 0.0000
0 0.9982 0.0267 0.0001
0 -0.0000 1.0016 0.0100
0 -0.0045 0.3119 1.0016
]
eAT = exp(A*Ts)

No sale lo mismo verdad?

Alguien sabe que cosa estoy haciendo mal?

Saludos y espero sus respuestas

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:comando c2dm (MatLab está errado?)

Publicado por Ernesto (2 intervenciones) el 05/10/2008 02:02:25
lo olvidaba antes de la matriz F pongan esto

[F,G,H,J]=c2dm(A,B,C,D,Ts,'zoh')

.....

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

comando c2dm (MatLab está errado?)

Publicado por José Christian de Jesús (1 intervención) el 21/05/2015 18:48:45
Para decir que matlab está mal necesitas constatarlo de alguna manera, respuesta al escalón o viendo los eigenvalores pero si pruebas ambos sistemas (el que tu sacaste a mano y el de matlab) verás que ambos funcionan bien.
Matlab como su nombre lo indica es un laboratorio de matrices, por lo que todo lo que hace es por matrices (obviamente), por eso mismo cuando ejecutas comandos en matlab, este hace una búsqueda numérica y encuentra la solución. No hace lo mismo que ogata.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

comando c2dm (MatLab está errado?)

Publicado por Daniel (1 intervención) el 29/11/2015 15:51:30
La razón es que debes usar la exponencial matricial de matlab:

eAT = expm(A*Ts)

Me ayudaste a encontrar la respuesta de mi problema también!, gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar