Main Content

La traduzione di questa pagina non è aggiornata. Fai clic qui per vedere l'ultima versione in inglese.

place

Progettazione del posizionamento dei poli

    Descrizione

    Il posizionamento dei poli è un metodo per calcolare la matrice di guadagno ottimale utilizzata per assegnare i poli a loop chiuso in posizioni specifiche, garantendo così la stabilità del sistema. Le posizioni dei poli a loop chiuso hanno un impatto diretto sulle caratteristiche delle risposte temporali, quali tempo di salita, tempo di assestamento e oscillazioni transitorie. Per ulteriori informazioni, vedere Posizionamento dei poli.

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

    Dalla figura, si consideri un sistema dinamico lineare in forma stato-spazio

    x˙=Ax+Bu

    y=Cx+Du

    Per un dato vettore p con posizione desiderata dei poli autoconiugati a loop chiuso, place calcola una matrice di guadagno K tale che il feedback di stato u = –Kx ponga i poli nelle posizioni p. In altre parole, gli autovalori di ABK corrisponderanno alle voci di p (fino all'ordinamento).

    esempio

    K = place(A,B,p) pone i poli desiderati a loop chiuso p calcolando una matrice di guadagno del feedback di stato K. Si assume che tutti gli input dell'impianto siano input di controllo. place funziona anche per i sistemi a più input e si basa sull'algoritmo da [1]. Questo algoritmo utilizza i gradi di libertà ulteriori per trovare una soluzione che minimizzi la sensibilità dei poli a loop chiuso alle perturbazioni in A o B.

    [K,prec] = place(A,B,p) restituisce inoltre prec, una stima dell'accuratezza di quanto strettamente gli autovalori di ABK corrispondano alle posizioni specificate p (prec misura il numero di cifre decimali accurate nei poli effettivi a loop chiuso). Qualora un polo diverso da zero a loop chiuso si discosti di oltre il 10% dalla posizione desiderata, viene emesso un avviso.

    Esempi

    comprimi tutto

    Per questo esempio, si consideri un semplice sistema del secondo ordine con le seguenti matrici stato-spazio:

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

    Inserire le matrici e creare il sistema stato-spazio.

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

    Calcolare i poli a loop aperto e verificare la risposta al gradino del sistema a loop aperto.

    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.

    Si noti che il sistema risultante è sottosmorzato. Pertanto, si scelgono poli reali nella metà sinistra del piano complesso per eliminare le oscillazioni.

    p = [-1,-2];

    Trovare la matrice di guadagno K utilizzando il posizionamento dei poli e verificare i poli a loop chiuso di 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
    
    

    Confrontare ora la risposta al gradino del sistema a loop chiuso.

    figure(1)
    step(syscl)

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

    Pertanto, il sistema a loop chiuso ottenuto utilizzando il posizionamento dei poli è stabile con una buona risposta allo stato stazionario.

    Si noti che la scelta di poli più lontani dall'asse immaginario consente di ottenere tempi di risposta più rapidi, ma riduce il guadagno allo stato stazionario del sistema. Ad esempio, si consideri l'utilizzo dei poli [-2,-3] per il sistema di cui sopra.

    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
    
    

    Per questo esempio, si considerino le posizioni dei poli [-2e-13,-3e-4,-3e-3]. Calcolare la precisione dei poli effettivi.

    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
    

    Si ottiene un valore di precisione pari a 2, che indica che le posizioni effettive dei poli sono precise fino a 2 cifre decimali.

    Per questo esempio, si consideri la seguente funzione di trasferimento con poli a coniugazione complessa in corrispondenza di -2±2i:

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

    Inserire il modello della funzione di trasferimento. Quindi, convertirlo nella forma stato-spazio poiché place utilizza le matrici A e B come argomenti di input.

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

    Infine, calcolare la matrice di guadagno K utilizzando i poli coniugati complessi.

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

    I valori della matrice di guadagno sono reali poiché i poli sono auto-coniugati. I valori di K sarebbero complessi se p non contenesse poli auto-coniugati.

    Verificare ora la risposta al gradino del sistema a loop chiuso.

    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.

    Per questo esempio, si consideri il seguente modello stato-spazio SISO:

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

    Creare il modello stato-spazio SISO definito dalle seguenti matrici stato-spazio:

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

    Ora fornire un impulso all'impianto e simularlo utilizzando lsim. Tracciare l'output.

    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.

    Per questo esempio, si supponga che tutte le variabili di stato non possano essere misurate e che venga misurato solo l'output. Pertanto, è necessario progettare un osservatore con questa misura. Utilizzare place per calcolare il guadagno dello stimatore trasponendo la matrice A e sostituendo C' alla matrice B. Per questa istanza, selezionare le posizioni desiderate dei poli a -2 e -3.

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

    Utilizzare il guadagno dello stimatore per sostituire le matrici di stato utilizzando il principio di dualità/separazione e creare il modello stato-spazio stimato.

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

    Simulare la risposta temporale del sistema utilizzando lo stesso input a impulsi.

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

    Confrontare la risposta del sistema effettivo e quella del sistema stimato.

    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.

    Argomenti di input

    comprimi tutto

    Matrice di stato, specificata come matrice Nx x Nx, dove Nx è il numero degli stati.

    Matrice input-stato, specificata come una matrice Nx x Nu, dove Nx è il numero degli stati e Nu è il numero degli input.

    Posizioni dei poli a loop chiuso, specificate come vettore di lunghezza Nx, dove Nx è il numero degli stati. In altre parole, la lunghezza di p deve corrispondere alla grandezza della riga di A. Le posizioni dei poli a loop chiuso hanno un impatto diretto sulle caratteristiche delle risposte temporali, quali tempo di salita, tempo di assestamento e oscillazioni transitorie. Per un esempio sulla selezione dei poli, vedere Progettazione del posizionamento dei poli per il sistema di secondo ordine.

    place restituisce un errore se alcuni poli in p presentano una molteplicità maggiore di rank(B).

    Nei problemi di ordine elevato, alcune scelte in merito alla posizione dei poli comportano guadagni molto elevati. I problemi di sensibilità legati ai grandi guadagni suggeriscono cautela nell'utilizzo delle tecniche di posizionamento dei poli. Vedere [2] per i risultati dei test numerici.

    Argomenti di output

    comprimi tutto

    Guadagno optimum o guadagno di feedback a stato completo, restituito come matrice Ny x Nx, dove Nx è il numero degli stati e Ny è il numero degli output. place calcola una matrice di guadagno K tale che il feedback di stato u = –Kx ponga i poli a loop chiuso nelle posizioni p.

    Quando le matrici A e B sono reali, K è

    • reale quando p è auto-coniugato.

    • complesso quando le posizioni dei poli non sono coniugate complesse.

    Stima dell'accuratezza dei poli assegnati, restituita come scalare. prec misura il numero di cifre decimali precise nei poli effettivi a loop chiuso rispetto alle posizioni dei poli specificate in p.

    Suggerimenti

    • È possibile utilizzare place per la selezione del guadagno dello stimatore trasponendo la matrice A e sostituendo C' alla matrice B come segue e come mostrato in Progettazione dell'osservatore di posizionamento del polo. È possibile utilizzare il guadagno dello stimatore risultante per i workflow dello stimatore di stato utilizzando estim.

    Riferimenti

    [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.

    Cronologia versioni

    Introduzione prima di R2006a