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

    对于期望的自共轭闭环极点位置的给定向量 pplace 计算增益矩阵 K,使得状态反馈 u = –Kx 将极点配置在位置 p。换句话说,A - BK 的特征值将匹配 p 的条目(取决于排序)。

    示例

    K = place(A,B,p) 通过计算状态反馈增益矩阵 K,配置所需的闭环极点 p。被控对象的所有输入都假定为控制输入。place 也适用于多输入系统,并且基于 [1] 中的算法。此算法使用额外的自由度来求一个解,以使闭环极点对于 A 或 B 中的扰动具有最小的敏感度。

    [K,prec] = place(A,B,p) 还返回 prec,用于精确估计 A - BK 的特征值与指定位置 p 的匹配程度(prec 可计算实际闭环极点中的精确小数位数)。如果某个非零闭环极点偏离期望位置超出 10%,则系统会发出警告。

    示例

    全部折叠

    对于此示例,假设有一个具有以下状态空间矩阵的简单二阶系统:

    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;

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

    请注意,生成的系统为欠阻尼系统。因此,选择复平面左半部分的实极点来消除振荡。

    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)

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

    因此,使用极点配置获得的闭环系统是稳定的,具有良好的稳态响应。

    请注意,选择远离虚轴的极点可以缩短响应时间,但会减小系统的稳态增益。例如,假设上述系统使用极点 [-2,-3]

    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
    
    

    在此示例中,假设极点位置为 [-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 使用 AB 矩阵作为输入参数。

    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)

    Figure contains an axes object. The axes object contains an object of type line. This object represents 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');

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

    对于此示例,假设所有状态变量都无法测量,只有输出才能测量。因此,使用这种测量方法设计一个观测器。使用 place 来计算估计器增益,方法是转置 A 矩阵,并用 C' 代换矩阵 B。对于此实例,将所需的极点位置选为 -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');

    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.

    输入参数

    全部折叠

    状态矩阵,指定为一个 Nx×Nx 矩阵,其中 Nx 是状态数。

    输入-状态矩阵,指定为 Nx×Nu 矩阵,其中 Nx 是状态数,Nu 是输入数。

    闭环极点位置,指定为长度为 Nx 的向量,其中 Nx 是状态数。换句话说,p 的长度必须与 A 的行大小匹配。闭环极点位置会直接影响上升时间、稳定时间和瞬变振荡等时间响应特性。有关选择极点的示例,请参阅二阶系统的极点配置设计

    如果 p 中某些极点的重数大于 rank(B),则 place 返回错误。

    在高阶问题中,选择某些极点位置会导致增益非常大。大增益会带来敏感性问题,这表明在使用极点配置方法时要小心。有关数值测试的结果,请参阅 [2]

    输出参数

    全部折叠

    最优增益或全状态反馈增益,以 Ny×Nx 矩阵形式返回,其中 Nx 是状态数,Ny 是输出数。place 计算增益矩阵 K,使得状态反馈 u = -Kx 将闭环极点配置于位置 p

    当矩阵 AB 为实数时,则 K 为:

    • 实数,前提是 p 具有自共轭性。

    • 复数,前提是极点位置不具有复共轭性。

    指定极点的准确性估计值,以标量形式返回。prec 对比 p 中指定的极点位置来计算实际闭环极点的精确小数位数。

    提示

    • 通过转置 A 矩阵并用 C' 代换矩阵 B,您可以使用 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 之前推出