Main Content

place

    説明

    極配置は、閉ループ極を指定の位置に割り当て、それによってシステムの安定性を確保するために使用される、最適なゲイン行列の計算方法です。閉ループの極の位置は、立ち上がり時間、整定時間、遷移部の振動等の時間応答特性に直接影響します。詳細については、極配置を参照してください。

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

    図から、状態空間形式の線形動的システムを考えます。

    x˙=Ax+Bu

    y=Cx+Du

    必要な自己共役閉ループ極配置のベクトル p が与えられた場合、place は、状態フィードバック u = –Kx により位置 p に極が配置されるように、ゲイン行列 K を計算します。言い換えると、A – BK の固有値は、p のエントリと一致します (その順序まで)。

    K = place(A,B,p) は、状態フィードバック ゲイン行列 K を計算することにより、目的の閉ループ極 p を配置します。プラントのすべての入力は制御入力だとみなされます。place は多入力システムでも機能し、[1]のアルゴリズムを基にしています。このアルゴリズムは追加の自由度を使用して、A または B で摂動に対する閉ループ極の感度を最小化する解を見つけます。

    [K,prec] = place(A,B,p) は、指定した位置 p に A – BK の固有値がどの程度正確に一致するかの精度推定 prec も返します (prec は、実際の閉ループ極における小数部の正確な桁数を測定)。いずれかの非零閉ループ極が目的の位置から 10% を超えてずれると、警告メッセージが発せられます。

    すべて折りたたむ

    この例では、次の状態空間行列をもつ単純な 2 次システムを考えます。

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

    行列を入力して、状態空間システムを作成します。

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

    開ループ極を計算して、開ループ システムのステップ応答を確認します。

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

    結果のシステムが不足減衰になっていることがわかります。そのため、複素平面の左半分にある実極を選択して、発振を除去します。

    p = [-1,-2];

    極配置を使用してゲイン行列 K を求め、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
    
    

    次に、閉ループ システムのステップ応答を比較します。

    figure(1)
    step(syscl)

    極配置を使用して得られた閉ループ システムは良好な定常状態応答をもち、安定しています。

    虚軸からさらに離れた極を選択すると、応答時間はより速くなりますが、システムの定常状態ゲインは低くなることがわかります。たとえば、上記のシステムで極 [-2,-3] を使用することを考えます。

    p = [-2, -3];
    K2 = place(A,B,p);
    syscl2 = ss(A-B*K2,B,C,D);
    figure(1);
    step(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
    
    

    この例では、極配置 [-2e-13,-3e-4,-3e-3] を考えます。実際の極の精度を計算します。

    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
    

    精度値 2 が得られ、実際の極配置が小数点以下 2 桁まで正確であることが示されます。

    この例では、-2±2i に複素共役極をもつ次の伝達関数を考えます。

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

    伝達関数モデルを入力します。次に、モデルを状態空間形式に変換します。これは、place が行列 A および B を入力引数として使用するためです。

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

    次に、複素共役極を使用してゲイン行列 K を計算します。

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

    極は自己共役であるため、ゲイン行列の値は実数です。p に自己共役極が含まれていなかった場合、K の値は複素数になります。

    ここで、閉ループ システムのステップ応答を確認します。

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

    この例では、次の SISO 状態空間モデルを考えます。

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

    次の状態空間行列で定義される SISO 状態空間モデルを作成します。

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

    次に、プラントにパルスを指定し、lsim を使用してそれをシミュレートします。出力をプロットします。

    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');

    この例では、すべての状態変数を測定できるわけではなく、出力のみが測定されると仮定します。そのため、その測定値を使用してオブザーバーを設計します。行列 A を転置し、行列 BC' に置き換えることによって、place を使用して推定器ゲインを計算します。この例では、目的の極配置として -2 および -3 を選択します。

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

    二重性/分離原理に基づき、推定器ゲインを使用して状態行列を置き換え、推定された状態空間モデルを作成します。

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

    同じパルス入力を使用して、システムの時間応答をシミュレートします。

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

    実際のシステムと推定されたシステムの応答を比較します。

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

    入力引数

    すべて折りたたむ

    状態行列。NxNx 列の行列として指定します。ここで Nx は状態の数です。

    入力から状態への行列。NxNu 列の行列として指定します。ここで Nx は状態の数、Nu は入力の数です。

    閉ループ極配置。長さ Nx の行ベクトルとして指定します。ここで Nx は状態の数です。つまり、p の長さは A の行サイズと一致しなければなりません。閉ループの極の位置は、立ち上がり時間、整定時間、遷移部の振動等の時間応答特性に直接影響します。極の選択の例については、2 次システムの極配置設計を参照してください。

    p の一部の極で多重度が rank(B) より大きい場合、place はエラーを返します。

    高次の問題では、極配置の選択によっては非常に大きいゲインが生じることがあります。大きいゲインには感度の問題があるため、極配置手法を使用する場合には注意が必要です。数値テストの結果については、[2]を参照してください。

    出力引数

    すべて折りたたむ

    最適ゲインまたは全状態フィードバック ゲイン。NyNx 列の行列として返されます。ここで、Nx は状態の数、Ny は出力の数です。place は、状態フィードバック u = –Kx により位置 p に閉ループ極が配置されるようなゲイン行列 K を計算します。

    行列 A および B が実数値の場合、K は以下になります。

    • p が自己共役の場合は実数値。

    • 極配置が複素共役でない場合は複素数値。

    割り当てられた極の精度推定。スカラーとして返されます。prec は、実際の閉ループ極における小数部の正確な桁数を、p で指定された極配置と対比して測定します。

    ヒント

    • 極配置オブザーバーの設計で示しているように、行列 A を転置し、行列 BC' に置き換えることによって、place を推定器ゲインの選択に使用することもできます。結果の推定器ゲイン出力は、estim を使用して状態推定器のワークフローに使用できます。

    参照

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

    バージョン履歴

    R2006a より前に導入

    参考

    | |

    トピック