Main Content

La traduction de cette page n'est pas à jour. Cliquez ici pour voir la dernière version en anglais.

place

Design du placement de pôles

    Description

    Le placement des pôles est une méthode de calcul de la matrice de gain optimal utilisée pour attribuer les pôles en boucle fermée à des emplacements spécifiques, assurant ainsi la stabilité du système. Les emplacements des pôles en boucle fermée ont un impact direct sur les caractéristiques de la réponse temporelle telles que le temps de montée, le temps de stabilisation et les oscillations transitoires. Pour plus d’informations, consultez Placement des pôles.

    System with state matrix A, input matrix B, output matrix C, and feedthrough matrix D, with full state feedback matrix K

    Comme l’indique la figure, considérons un système dynamique linéaire sous la forme d'une représentation d'état

    x˙=Ax+Bu

    y=Cx+Du

    .Pour un vecteur p donné d'emplacements de pôles auto-conjugués souhaités en boucle fermée, place calcule une matrice de gain K telle que la rétroaction d'état u = -Kx place les pôles aux emplacements p. Autrement dit, les valeurs propres de ABK correspondent aux entrées de p (même au niveau de l’ordre).

    exemple

    K = place(A,B,p) place les pôles en boucle fermée souhaités p en calculant une matrice de gain de retour d’état K. Toutes les entrées du système physique sont supposées être des entrées de contrôle. place fonctionne également pour les systèmes à entrées multiples et repose sur l'algorithme de [1]. Cet algorithme utilise la latitude supplémentaire pour trouver une solution qui minimise la sensibilité des pôles en boucle fermée aux perturbations dans A ou B.

    [K,prec] = place(A,B,p) renvoie également prec, une estimation de la précision avec laquelle les valeurs propres de A - BK correspondent aux emplacements spécifiés p (prec mesure le nombre de chiffres décimaux exacts dans les pôles réels en boucle fermée). Un avertissement est émis si un pôle non nul en boucle fermée s'éloigne de plus de 10 % de l'emplacement souhaité.

    Exemples

    réduire tout

    Pour cet exemple, considérons un système simple de deuxième ordre avec les matrices de représentation d’état suivantes :

    A=[-1-210]B=[20]C=[01]D=0Spate-space matrices

    Saisissez les matrices et créez le système de représentation d’état.

    A = [-1,-2;1,0];
    B = [2;0];
    C = [0,1];
    D = 0;
    sys = ss(A,B,C,D);

    Calculez les pôles en boucle ouverte et vérifiez la réponse indicielle du système en boucle ouverte.

    Pol  = pole(sys)
    Pol = 2×1 complex
    
      -0.5000 + 1.3229i
      -0.5000 - 1.3229i
    
    
    figure(1)
    step(sys)
    hold on;

    Figure contains an axes object. The axes object contains an object of type line. This object represents sys.

    Vous remarquerez que le système obtenu est sous-amorti. Vous devez donc choisir des pôles réels dans la moitié gauche du plan complexe pour éliminer les oscillations.

    p = [-1,-2];

    Trouvez la matrice de gain K au moyen du placement des pôles et vérifiez les pôles en boucle fermée de syscl.

    K = place(A,B,p);
    Acl = A-B*K;
    syscl = ss(Acl,B,C,D);
    Pcl = pole(syscl)
    Pcl = 2×1
    
       -2.0000
       -1.0000
    
    

    Comparez à présent la réponse indicielle du système en boucle fermée.

    figure(1)
    step(syscl)

    Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent sys, syscl.

    Le système en boucle fermée obtenu au moyen du placement des pôles est donc stable avec une réponse d’état stationnaire correcte.

    Remarque : le choix de pôles plus éloignés de l'axe imaginaire permet d'obtenir un temps de réponse plus rapide, mais diminue le gain d’état stationnaire du système. Par exemple, considérons l'utilisation des pôles [-2,-3] pour le système ci-dessus.

    p = [-2, -3];
    K2 = place(A,B,p);
    syscl2 = ss(A-B*K2,B,C,D);
    figure(1);
    step(syscl2);

    Figure contains an axes object. The axes object contains 3 objects of type line. These objects represent sys, syscl, syscl2.

    stepinfo(syscl)
    ans = struct with fields:
             RiseTime: 2.5901
        TransientTime: 4.6002
         SettlingTime: 4.6002
          SettlingMin: 0.9023
          SettlingMax: 0.9992
            Overshoot: 0
           Undershoot: 0
                 Peak: 0.9992
             PeakTime: 7.7827
    
    
    stepinfo(syscl2)
    ans = struct with fields:
             RiseTime: 1.4130
        TransientTime: 2.4766
         SettlingTime: 2.4766
          SettlingMin: 0.3003
          SettlingMax: 0.3331
            Overshoot: 0
           Undershoot: 0
                 Peak: 0.3331
             PeakTime: 4.1216
    
    

    Pour cet exemple, considérons les emplacements des pôles [-2e-13,-3e-4,-3e-3]. Calculez la précision des pôles réels.

    A = [4,2,1;0,-1,2;0,1e-8,1];
    B = [1,2;3,1;1e-6,0];
    p = [-2e-13,-3e-4,3e-3];
    [~,prec] = place(A,B,p)
    prec = 2
    

    Une valeur de précision de 2 est obtenue, ce qui indique que les emplacements des pôles réels sont précis jusqu'à la deuxième décimale.

    Pour cet exemple, considérons la fonction de transfert suivante avec des pôles conjugués complexes à -2±2i :

    systf(s)=8s2+4s+8Transfer function of the system

    Saisissez le modèle de fonction de transfert. Convertissez-le ensuite sous la forme d’une représentation d'état puisque place utilise les matrices A et B en tant qu’arguments d'entrée.

    s = tf('s');
    systf = 8/(s^2+4*s+2);
    sys = ss(systf);

    Calculez ensuite la matrice de gain K au moyen de pôles conjugués complexes.

    p = [-2+2i,-2-2i];
    K = place(sys.A,sys.B,p)
    K = 1×2
    
             0    1.5000
    
    

    Les valeurs de la matrice de gain sont réelles étant donné que les pôles sont auto-conjugués. Les valeurs de K seraient complexes si p ne contenait pas de pôles auto-conjugués.

    Vérifiez à présent la réponse indicielle du système en boucle fermée.

    syscl = ss(sys.A-sys.B*K,sys.B,sys.C,sys.D);
    step(syscl)

    Figure contains an axes object. The axes object contains an object of type line. This object represents syscl.

    Pour cet exemple, considérons le modèle de représentation d’état SISO suivant :

    A=[-1-0.7510]B=[10]C=[11]D=0SISO State-Space Model

    Créez le modèle de représentation d’état SISO défini par les matrices de représentation d’état suivantes :

    A = [-1,-0.75;1,0];
    B = [1;0];
    C = [1,1];
    D = 0;
    Plant = ss(A,B,C,D);

    Fournissez à présent une impulsion au système physique et simulez-la au moyen de lsim. Tracez la sortie.

    N = 250;
    t = linspace(0,25,N);
    u = [ones(N/2,1); zeros(N/2,1)];
    x0 = [1;2];
    [y,t,x] = lsim(Plant,u,t,x0);
    
    figure
    plot(t,y);
    title('Output');

    Figure contains an axes object. The axes object with title Output contains an object of type line.

    Pour cet exemple, supposons que toutes les variables d'état ne puissent pas être mesurées et que seule la sortie le soit. Concevez par conséquent un observateur avec cette mesure. Utilisez place pour calculer le gain de l’estimateur en transposant la matrice A et en remplaçant la matrice C' par la matrice B. Pour cet exemple, sélectionnez les emplacements de pôles souhaités à -2 et -3.

    L = place(A',C',[-2,-3])';

    Utilisez le gain de l’estimateur pour remplacer les matrices d’état sur la base du principe de dualité/séparation et créez le modèle de représentation estimé.

    At = A-L*C;
    Bt = [B,L];
    Ct = [C;eye(2)];
    sysObserver = ss(At,Bt,Ct,0);

    Simulez le temps de réponse du système au moyen de la même entrée d’impulsion.

    [observerOutput,t] = lsim(sysObserver,[u,y],t);
    yHat = observerOutput(:,1);
    xHat = observerOutput(:,[2 3]);

    Comparez la réponse du système réel à celle du système estimé.

    figure;
    plot(t,x);
    hold on;
    plot(t,xHat,'--');
    legend('x_1','x_2','xHat_1','xHat_2')
    title('Comparison - Actual vs. Estimated');

    Figure contains an axes object. The axes object with title Comparison - Actual vs. Estimated contains 4 objects of type line. These objects represent x_1, x_2, xHat_1, xHat_2.

    Arguments d'entrée

    réduire tout

    Matrice d'état spécifiée en tant que matrice Nx par NxNx désigne le nombre d’états.

    Matrice entrée-état spécifiée en tant que matrice Nx par NuNx désigne le nombre d’états et Nu, le nombre d’entrées.

    Emplacements des pôles en boucle fermée spécifiés en tant que vecteur de longueur NxNx désigne le nombre d’états. Autrement dit, la longueur de p doit correspondre à la taille de ligne de A. Les emplacements des pôles en boucle fermée ont un impact direct sur les caractéristiques de la réponse temporelle telles que le temps de montée, le temps de stabilisation et les oscillations transitoires. Pour consulter un exemple de sélection de pôles, voir Design du placement de pôles pour un système de second ordre.

    place renvoie une erreur si certains pôles de p présentent une multiplicité supérieure à rank(B).

    Dans les problèmes d'ordre élevé, certains choix d'emplacement des pôles se traduisent par de très grands gains. Les problèmes de sensibilité liés à de grands gains incitent à la prudence quant à l'utilisation des techniques de placement des pôles. Pour connaître les résultats des tests numériques, voir [2].

    Arguments en sortie

    réduire tout

    Gain optimal ou gain de rétroaction de l'état complet renvoyé sous la forme d'une matrice Ny par NxNx désigne le nombre d'états et Ny, le nombre de sorties. place calcule une matrice de gain K telle que la rétroaction d'état u = -Kx place les pôles en boucle fermée aux emplacements p.

    Lorsque les matrices A et B sont réelles, K est

    • réel lorsque p est auto-conjugué.

    • complexe lorsque les emplacements des pôles ne sont pas des conjugués complexes.

    Estimation de la précision des pôles attribués, renvoyée sous forme de scalaire. prec mesure le nombre de décimales précises dans les pôles réels en boucle fermée par rapport aux emplacements des pôles spécifiés dans p.

    Conseils

    • Vous pouvez utiliser place pour la sélection du gain de l'estimateur en transposant la matrice A et en remplaçant la matrice C' par la matrice B comme l’indique Design de l’observateur du placement des pôles. Vous pouvez utiliser le gain de l'estimateur obtenu pour les workflows de l'estimateur d'état en utilisant estim.

    Références

    [1] Kautsky, J., N.K. Nichols, and P. Van Dooren, "Robust Pole Assignment in Linear State Feedback," International Journal of Control, 41 (1985), pp. 1129-1155.

    [2] Laub, A.J. and M. Wette, Algorithms and Software for Pole Assignment and Observers, UCRL-15646 Rev. 1, EE Dept., Univ. of Calif., Santa Barbara, CA, Sept. 1984.

    Historique des versions

    Introduit avant R2006a