Contenido principal

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

isstable

Determinar si el modelo de sistema dinámico es estable

Descripción

B = isstable(sys) devuelve un valor lógico de 1 (true) si el modelo de sistema dinámico sys tiene una dinámica estable y un valor lógico de 0 (false) en caso contrario. Si sys es un arreglo de modelos, la función devuelve 1 solo si todos los modelos de sys son estables.

isstable devuelve un valor lógico de 1 (true) para la estabilidad de un sistema dinámico si:

  • En los sistemas de tiempo continuo, todos los polos se encuentran en la mitad izquierda abierta del plano complejo.

  • En los sistemas de tiempo discreto, todos los polos se encuentran dentro del disco unitario abierto.

isstable solo se admite con modelos analíticos con un número finito de polos.

ejemplo

B = isstable(sys,'elem') devuelve un arreglo lógico de las mismas dimensiones que el arreglo de modelos sys. El arreglo lógico indica qué modelos de sys son estables.

ejemplo

B = isstable(___,Name=Value) determina la estabilidad de un modelo disperso sys calculando un subconjunto de polos en función de las opciones especificadas utilizando uno o más argumentos nombre-valor especificados. La función ignora los argumentos nombre-valor cuando sys es un modelo no disperso. (desde R2025a)

ejemplo

Ejemplos

contraer todo

Determine la estabilidad de este modelo de función de transferencia SISO de tiempo discreto con un tiempo de muestreo de 0.1 segundos.

sys(z)=2z4z3+3z-1

Cree el modelo de función de transferencia de tiempo discreto.

sys = tf([2,0],[4,0,3,-1],0.1);

Examine los polos del sistema.

P = abs(pole(sys))
P = 3×1

    0.9159
    0.9159
    0.2980

Todos los polos del modelo de función de transferencia tienen una magnitud inferior a 1, por lo que todos los polos se encuentran dentro del disco unitario abierto y el sistema es estable.

Confirme la estabilidad del modelo con isstable.

B = isstable(sys)
B = logical
   1

Por tanto, el sistema sys es estable.

Determine la estabilidad de este modelo de cero-polo-ganancia de tiempo continuo.

sys(s)=2(s+2+3j)(s+2-3j)(s-0.5)

Cree el modelo como un objeto de modelo zpk especificando ceros, polos y ganancia.

sys = zpk([],[-2-3*j,-2+3*j,0.5],2);

Dado que un polo del modelo se encuentra en la mitad derecha del plano complejo, el sistema es inestable.

Confirme la inestabilidad del modelo con isstable.

B = isstable(sys)
B = logical
   0

El sistema sys es inestable.

Determine la estabilidad de un arreglo de modelos de función de transferencia SISO con polos que varían de -2 a 2.

[1s+2,1s+1,1s,1s-1,1s-2]

Para crear el arreglo, primero inicialice un arreglo de dimensión [length(a),1] con funciones de transferencia SISO de valor cero.

a = [-2:2];
sys = tf(zeros(1,1,length(a)));

Rellene el arreglo con funciones de transferencia de la forma 1/(s-a).

for j = 1:length(a)
    sys(1,1,j) = tf(1,[1 -a(j)]);
end

isstable puede indicar si todos los modelos del arreglo de modelos son estables o si cada modelo individual es estable.

Examine la estabilidad del arreglo de modelos.

B_all = isstable(sys)
B_all = logical
   0

De forma predeterminada, isstable devuelve un único valor lógico que es 1 (true) solo si todos los modelos del arreglo son estables. sys contiene algunos modelos con polos no negativos, que no son estables. Por lo tanto, isstable devuelve 0 (false) para todo el arreglo.

Examine la estabilidad de cada modelo del arreglo con el indicador 'elem'.

B_elem = isstable(sys,'elem')
B_elem = 5×1 logical array

   1
   1
   0
   0
   0

La función devuelve un arreglo de valores lógicos que indican la estabilidad de la entrada correspondiente del arreglo de modelos. Por ejemplo, B_elem(2) es 1, lo que indica que el segundo modelo del arreglo, sys(1,1,2), es estable. Esto se debe a que sys(1,1,2) tiene un polo en -1.

Desde R2025a

Para este ejemplo, considere tuningForkData.mat, que contiene el modelo disperso de segundo orden de un diapasón. Para los modelos de espacio de estados dispersos, isstable determina la estabilidad en función de un subconjunto de cálculo en un rango de frecuencia de interés.

Cargue las matrices dispersas de tuningForkData.mat en el área de trabajo y cree el objeto de modelo mechss.

load tuningForkData.mat;
sys = mechss(M,[],K,B,F)
Sparse continuous-time second-order model with 2 outputs, 1 inputs, and 3024 degrees of freedom.
Model Properties

Use "spy" and "showStateInfo" to inspect model structure. 
Type "help mechssOptions" for available solver options for this model.

Compruebe la estabilidad en el rango de frecuencia hasta 10.000 rad/s.

b = isstable(sys,Focus=[0 1e4])
b = logical
   0

El modelo de diapasón sys es un modelo sin amortiguación y isstable devuelve 0 tal y como se esperaba. Puede verificarlo usando la función damp.

damp(sys,Focus=[0 1e4])
                                                                       
         Pole              Damping       Frequency      Time Constant  
                                       (rad/seconds)      (seconds)    
                                                                       
  0.00e+00 + 2.96e+03i     0.00e+00       2.96e+03           Inf       
  0.00e+00 - 2.96e+03i     0.00e+00       2.96e+03           Inf       
  0.00e+00 + 2.96e+03i     0.00e+00       2.96e+03           Inf       
  0.00e+00 - 2.96e+03i     0.00e+00       2.96e+03           Inf       
  0.00e+00 + 3.01e+03i     0.00e+00       3.01e+03           Inf       
  0.00e+00 - 3.01e+03i     0.00e+00       3.01e+03           Inf       
  0.00e+00 + 3.02e+03i     0.00e+00       3.02e+03           Inf       
  0.00e+00 - 3.02e+03i     0.00e+00       3.02e+03           Inf       

Ahora añada la amortiguación de Rayleigh C=αM+βK con una amortiguación mínima de 0,01 a una frecuencia de 3.000 rad/s.

wmin = 3000;
zmin = 0.01;
alpha = zmin*wmin;
beta = zmin/wmin;
C_d = alpha*M+beta*K;
sys_d = mechss(M,C_d,K,B,F)
Sparse continuous-time second-order model with 2 outputs, 1 inputs, and 3024 degrees of freedom.
Model Properties

Use "spy" and "showStateInfo" to inspect model structure. 
Type "help mechssOptions" for available solver options for this model.

Compruebe la estabilidad del modelo con amortiguación.

isstable(sys_d,Focus=[0 1e4])
ans = logical
   1

Con amortiguación añadida, todos los polos calculados del modelo se encuentran en la mitad izquierda del plano.

damp(sys_d,Focus=[0 1e4])
                                                                       
         Pole              Damping       Frequency      Time Constant  
                                       (rad/seconds)      (seconds)    
                                                                       
 -2.96e+01 + 2.96e+03i     1.00e-02       2.96e+03         3.38e-02    
 -2.96e+01 - 2.96e+03i     1.00e-02       2.96e+03         3.38e-02    
 -2.96e+01 + 2.96e+03i     1.00e-02       2.96e+03         3.38e-02    
 -2.96e+01 - 2.96e+03i     1.00e-02       2.96e+03         3.38e-02    
 -3.01e+01 + 3.01e+03i     1.00e-02       3.01e+03         3.33e-02    
 -3.01e+01 - 3.01e+03i     1.00e-02       3.01e+03         3.33e-02    
 -3.02e+01 + 3.02e+03i     1.00e-02       3.02e+03         3.31e-02    
 -3.02e+01 - 3.02e+03i     1.00e-02       3.02e+03         3.31e-02    

Argumentos de entrada

contraer todo

Sistema dinámico, especificado como un modelo de sistema dinámico SISO o MIMO, o bien un arreglo de modelos de sistemas dinámicos SISO o MIMO. Los sistemas dinámicos que puede utilizar incluyen modelos LTI numéricos de tiempo continuo o de tiempo discreto como los modelos tf, zpk o ss.

Si sys es un modelo de espacio de estados generalizado genss o un modelo de espacio de estados con incertidumbre uss (Robust Control Toolbox), isstable comprueba la estabilidad del valor actual o nominal de sys.

Si sys es un modelo de espacio de estados disperso (sparss o mechss), el software calcula un subconjunto de polos en una banda de frecuencia específica de enfoque para verificar la estabilidad. Para los modelos dispersos, utilice los argumentos nombre-valor para especificar las opciones de cálculo. Si no especifica ninguna opción, el software calcula los primeros 1.000 polos con menor magnitud. Para los modelos mechss con amortiguación de Rayleigh, el software calcula los polos a partir de los valores propios de (K,M). De lo contrario, el software calcula los polos a partir del modelo sparss equivalente. (desde R2025a)

Si sys es un arreglo de modelos, isstable comprueba la estabilidad de cada modelo del arreglo.

  • Si utiliza B = isstable(sys), la salida es 1 (true) solo si todos los modelos del arreglo son estables.

  • Si utiliza B = isstable(sys,'elem'), la salida es un arreglo lógico cuyas entradas indican la estabilidad de la entrada correspondiente del arreglo de modelos.

Para más información sobre arreglos de modelos, consulte Arreglos de los modelos.

Argumentos de par nombre-valor

contraer todo

Especifique pares de argumentos opcionales como Name1=Value1,...,NameN=ValueN, donde Name es el nombre del argumento y Value es el valor correspondiente. Los argumentos nombre-valor deben aparecer después de los otros argumentos, aunque el orden de los pares no es importante.

Ejemplo: B = isstable(sparseSys,Focus=[0 10],Display="off")

Desde R2025a

Rango de frecuencia de interés, especificado como un vector con la forma [0,fmax]. Cuando se especifica un rango de frecuencia de enfoque, el algoritmo calcula solo los polos con frecuencia natural en este rango. Para los modelos de tiempo discreto, el software aproxima la frecuencia natural equivalente a través de la transformada de Tustin.

Para los modelos dispersos semidefinidos simétricos, puede especificar cualquier rango de frecuencia con 0 ≤ fmin < fmax. Para los modelos sparss no simétricos, debe especificar el rango de frecuencia como [0,fmax] o [fmin,inf].

Dado que el software calcula todos los polos en el rango de frecuencia especificado, normalmente se especifica un rango de frecuencia baja para limitar el cálculo de una gran cantidad de polos. De forma predeterminada, el foco no está especificado ([0 Inf]) y el algoritmo calcula hasta MaxNumber polos.

Desde R2025a

Número máximo de polos y ceros a calcular, especificado como un entero positivo. Este valor limita el número de polos calculados por el algoritmo.

Desde R2025a

Desplazamiento espectral, especificado como un escalar finito.

El software calcula los polos con la frecuencia natural en el rango especificado [0,fmax] utilizando iteraciones de potencia inversa para A-sigma*E, lo que obtiene valores propios más cercanos al desplazamiento sigma. Cuando A es singular y sigma es cero, el algoritmo falla porque no existe una inversa. Por lo tanto, para los modelos dispersos con acción integral (s = 0 o z = 1 para modelos de tiempo discreto), puede utilizar esta opción para desplazar implícitamente los polos o ceros al valor más cercano a este valor de desplazamiento. Especifique un valor de desplazamiento que no sea igual a un valor de polo existente del modelo original.

Desde R2025a

Tolerancia de precisión de los polos calculados, especificada como un escalar finito positivo. Este valor controla la convergencia de los valores propios calculados en iteraciones de potencia inversa.

Desde R2025a

Mostrar u ocultar el informe de progreso, especificado como "off" o "on".

Argumentos de salida

contraer todo

Resultado verdadero o falso, devuelto como 1 para un modelo estable o 0 para un modelo inestable.

El indicador 'elem' hace que isstable devuelva un arreglo de valores lógicos con las mismas dimensiones que el arreglo de modelos. Los valores del arreglo indican la estabilidad de la entrada correspondiente del arreglo de modelos.

Algoritmos

Para los modelos de espacio de estados dispersos, el software utiliza el algoritmo de Krylov-Schur [1] para iteraciones de potencia inversa a fin de calcular los polos en la banda de frecuencia especificada.

Referencias

[1] Stewart, G. W. “A Krylov--Schur Algorithm for Large Eigenproblems.” SIAM Journal on Matrix Analysis and Applications 23, no. 3 (January 2002): 601–14. https://doi.org/10.1137/S0895479800371529.

Historial de versiones

Introducido en R2012a

expandir todo

Consulte también

| |