Contenido principal

pole

Polos del sistema dinámico

Descripción

P = pole(sys) devuelve los polos del modelo de sistema dinámico SISO o MIMO sys. La salida se expresa como recíproca de las unidades de tiempo especificadas en sys.TimeUnit. Los polos de un sistema dinámico determinan la estabilidad y la respuesta del sistema.

Un sistema de lazo abierto lineal invariante en el tiempo es estable si:

  • En tiempo continuo, todos los polos de la función de transferencia tienen partes reales negativas. Cuando los polos se visualizan en el plano s complejo, deben estar en la mitad izquierda del plano (LHP) para garantizar la estabilidad.

  • En tiempo discreto, todos los polos deben tener una magnitud estrictamente inferior a uno, es decir, deben estar todos dentro del círculo unitario.

Para modelos de espacio de estados dispersos, esta sintaxis calcula los primeros 1000 polos con la magnitud más pequeña. (desde R2025a)

ejemplo

P = pole(sys,J1,...,JN) devuelve los polos P de las entradas en el arreglo de modelos sys con subíndices (J1,...,JN).

ejemplo

P = pole(___,Name=Value) calcula un subconjunto de polos de un modelo disperso sys basándose en uno o más argumentos nombre-valor especificados. Si no especifica ningún argumento nombre-valor, la función calcula los primeros 1000 polos con menor magnitud. La función ignora los argumentos nombre-valor cuando sys es un modelo no disperso. (desde R2025a)

ejemplo

Ejemplos

contraer todo

Calcule los polos de la siguiente función de transferencia en tiempo discreto:

sys(z)=0.0478z-0.0464z2-1.81z+0.9048

sys = tf([0.04798 0.0464],[1 -1.81 0.9048],0.1);
P = pole(sys)
P = 2×1 complex

   0.9050 + 0.2929i
   0.9050 - 0.2929i

En los sistemas discretos estables, todos sus polos deben tener una magnitud estrictamente inferior a uno, es decir, deben estar todos dentro del círculo unitario. Los polos en este ejemplo son un par de conjugadas complejas, y están dentro del círculo unitario. Por tanto, el sistema sys es estable.

Calcule los polos de la siguiente función de transferencia:

sys(s)=4.2s2+0.25s-0.004s2+9.6s+17

sys = tf([4.2,0.25,-0.004],[1,9.6,17]);
P = pole(sys)
P = 2×1

   -7.2576
   -2.3424

En los sistemas continuos estables, todos sus polos deben tener partes reales negativas. sys es estable puesto que los polos son negativos, es decir, están en la mitad izquierda del plano complejo.

Para este ejemplo, cargue invertedPendulumArray.mat, que contiene un arreglo de 3 por 3 de modelos de péndulo invertido. La masa del péndulo varía mientras se mueve de un modelo a otro a lo largo de una única columna de sys, y la longitud del péndulo varía mientras se mueve a lo largo de una única fila. Los valores de masa utilizados son 100 g, 200 g y 300 g, y las longitudes del péndulo utilizadas son 3 m, 2 m y 1 m respectivamente.

Column1Column2Column3Row1100g,3m100g,2m100g,1mRow2200g,3m200g,2m200g,1mRow3300g,3m300g,2m300g,1m

load('invertedPendulumArray.mat','sys');
size(sys)
3x3 array of transfer functions.
Each model has 1 outputs and 1 inputs.

Encuentre polos del arreglo de modelos.

P = pole(sys);
P(:,:,2,1)
ans = 3×1

    2.1071
   -2.1642
   -0.1426

P(:,:,2,1) se corresponde con los polos del modelo con un peso de péndulo de 200 g y una longitud de 3 m.

Desde R2025a

Este ejemplo muestra cómo calcular los polos de un modelo disperso de viga. Para los modelos de espacio de estados dispersos, pole calcula un subconjunto de polos basándose en un rango de frecuencia de interés.

Cargue el modelo.

load linBeam.mat
size(sys)
Sparse second-order model with 1 outputs, 1 inputs, and 3303 degrees of freedom.

Los modelos dispersos suelen ser de gran escala y calcular todos los polos puede resultar inviable o de alta carga computacional. De forma predeterminada, la función pole calcula los primeros 1.000 polos con la magnitud más pequeña.

p = pole(sys);
size(p)
ans = 1×2

        1000           1

Para evitar calcular una gran cantidad de polos, puede especificar opciones adicionales como un rango de frecuencia de interés. Normalmente, se especifica una banda de baja frecuencia y la función calcula solamente los polos con frecuencia natural en el rango.

p2 = pole(sys,Focus=[0 1e4]);
size(p2)
ans = 1×2

     4     1

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 en tiempo continuo o en 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, pole devuelve los polos del valor actual o nominal de sys. Si sys es un arreglo de modelos, pole devuelve los polos del modelo correspondiente a su subíndice J1,...,JN en sys. Para más información sobre arreglos de modelos, consulte Arreglos de los modelos.

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 modelos dispersos, utilice los argumentos nombre-valor para especificar opciones de cálculo. Si no especifica ninguna opción, el software calcula los primeros 1.000 polos con la magnitud más pequeña. 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)

Índice de modelos en un arreglo cuyos polos desea extraer, especificado como un entero positivo. Puede proporcionar tantos índices como dimensiones de arreglos hay en sys. Por ejemplo, si sys es un arreglo de 4 por 5 de modelos de sistemas dinámicos, el siguiente comando extrae los polos para la entrada (2,3) del arreglo.

P = pole(sys,2,3);

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 = pole(sparseSys,Focus=[0 10],Display="off")

Desde R2025a

Rango de frecuencia de interés, especificado como vector con la forma [fmin,fmax]. Cuando se especifica un rango de frecuencia de enfoque, el algoritmo calcula solo los polos con frecuencia natural en este rango. En el caso de modelos en 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 que se desea calcular, especificado como entero positivo. Este valor limita el número de polos calculados por el algoritmo.

Desde R2025a

Desplazamiento espectral, especificado como 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 ya que no existe inversa. Por lo tanto, para los modelos dispersos con acción integral (s = 0 o en z = 1 para modelos en tiempo discreto), puede utilizar esta opción para desplazar de manera implícita polos o ceros hacia el 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 informe de progreso, especificado como "off" u "on".

Argumentos de salida

contraer todo

Polos del sistema dinámico, devueltos como un escalar o un arreglo. Si sys es:

  • Un solo modelo, entonces P es un vector columna de polos del modelo de sistemas dinámicos sys

  • Un arreglo de modelos, entonces P es un arreglo de polos de cada modelo en sys

P se expresa como recíproca de las unidades de tiempo especificadas en sys.TimeUnit. Por ejemplo, polo se expresa en 1/minuto si sys.TimeUnit = 'minutes'.

En función del tipo de modelo de sistema, los polos se calculan de la siguiente forma:

  • En el caso de modelos de espacio de estados, los polos son valores propios de la matriz A, o los valores propios generalizados de AλE en el caso del descriptor.

    Para los modelos de espacio de estados dispersos, los polos son un subconjunto de valores propios obtenidos mediante iteraciones de potencia inversa [1]. (desde R2025a)

  • En el caso de funciones de transferencia SISO o modelos de cero-polo-ganancia, los polos son las raíces del denominador. Para más información, consulte roots.

  • En el caso de funciones de transferencia MIMO o modelos de cero-polo-ganancia, los polos se devuelven como la unión de los polos para cada entrada SISO. Si algunos pares E/S tienen un denominador común, las raíces de dicho denominador del par E/S se cuentan solo una vez.

Limitaciones

  • Los polos múltiples son susceptibles a variaciones numéricas y no pueden calcularse con mucha precisión. Un polo λ con multiplicidad m resulta normalmente en un cluster de polos calculados distribuidos en un círculo con centro λ y radio de orden

    ρε1/m,

    donde ε es la precisión mecánica relativa (eps).

    Para más información sobre polos múltiples, consulte Sensitivity of Multiple Roots.

  • Si sys presenta retardos internos, los polos se obtienen primero estableciendo todos los retardos internos en cero para que el sistema tenga un número finito de polos, creando así una aproximación de Padé de orden cero. En algunos sistemas, establecer los retardos en cero crea bucles algebraicos singulares, lo que resulta en aproximaciones de retardo cero inadecuadas o mal definidas. En estos sistemas, pole devuelve un error.

    Para evaluar la estabilidad de los modelos con retardos internos, utilice step o impulse.

Algoritmos

Para los modelos de espacio de estados dispersos, pole 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 antes de R2006a

expandir todo