Control de comentarios: Resultado inesperado para simplificaciones de diagramas de bloques usando matlab

0

Hice algunos cálculos simples con respecto al álgebra de diagramas de bloques. El problema es que no obtengo el mismo resultado usando matlab.

Aquí está el sistema con sus bloques correspondientes:

$$ H_1 = z + 2 $$ $$ H_2 = \ frac {1} {z ^ 2 + 2z + 1} $$ $$ H_3 = \ frac {z} {z + 2} $$

Esto se simplifica a lo siguiente de acuerdo con las reglas del diagrama de bloques:

$$ H = \ frac {H_1 * H_2} {1-H_1 * H_2 * H_3} $$

Después de algunas matemáticas simples obtengo:

$$ H = \ frac {\ frac {z + 2} {z ^ 2 + 2z + 1}} {1 - \ frac {z + 2} {z ^ 2 + 2z + 1} * \ frac { z} {z + 2}} = \ frac {\ frac {z + 2} {z ^ 2 + 2z + 1}} {\ frac {z ^ 2 + 2z + 1-z} {z ^ 2 + 2z + 1}} = \ frac {z + 2} {z ^ 2 + z + 1} $$

Ahora, si trato de obtener el mismo resultado utilizando matlab, se obtiene un sistema de orden 5 y un sistema de orden 3 después de reducirlo utilizando el comando minreal de matlab:

% initialization
z = tf('z',0.1);
H1 = z+2;
H2 = 1/(z^2+2*z+1);
H3 = z/(z+2);

H_ = (H1*H2)/(1-H1*H2*H3)
H_ =

      z^4 + 6 z^3 + 13 z^2 + 12 z + 4
  ---------------------------------------
  z^5 + 5 z^4 + 10 z^3 + 11 z^2 + 7 z + 2

Sample time: 0.1 seconds
Discrete-time transfer function.

H_ = minreal(H_)
H_ =

      z^2 + 4 z + 4
  ---------------------
  z^3 + 3 z^2 + 3 z + 2

Sample time: 0.1 seconds
Discrete-time transfer function.

Sólo usando el comando de retroalimentación incorporado de Matlab se obtiene el resultado correcto después de evaluar minreal:

% calculate system transfer function using matlab's feedback command
H = feedback(H1*H2,-H3)
H =

      z^2 + 4 z + 4
  ---------------------
  z^3 + 3 z^2 + 3 z + 2

Sample time: 0.1 seconds
Discrete-time transfer function.

%
H = minreal(H)
H =

     z + 2
  -----------
  z^2 + z + 1

Sample time: 0.1 seconds
Discrete-time transfer function.

¿Podría por favor guiarme en lo que estoy haciendo mal usando los cálculos directos para H_. ¿Por qué obtengo un sistema de orden 3 después de usar minreal y no el mismo resultado que se hace a mano (o usando el comando de comentarios)?

num = minreal(simplify(H1*H2))
den = minreal(simplify(1-H1*H2*H3))
H_nd = simplify(minreal(minreal(num/den)))

num =

      z + 2
  -------------
  z^2 + 2 z + 1

Sample time: 0.1 seconds
Discrete-time transfer function.


den =

   z^2 + z + 1
  -------------
  z^2 + 2 z + 1

Sample time: 0.1 seconds
Discrete-time transfer function.


H_nd =

      z^3 + 4 z^2 + 5 z + 2
  -----------------------------
  z^4 + 3 z^3 + 4 z^2 + 3 z + 1

Sample time: 0.1 seconds
Discrete-time transfer function.
    
pregunta fjp

1 respuesta

1

Debe agregar la tolerancia a su función minreal .

Esto está tomado del sitio web mathworks:

"minreal (sys, tol) especifica la tolerancia utilizada para la eliminación del estado o la cancelación del polo cero. El valor predeterminado es tol = sqrt (eps) y aumentar esta tolerancia obliga a realizar cancelaciones adicionales"

    
respondido por el R. Johnson

Lea otras preguntas en las etiquetas