MATLAB中place函数报错:无法放置重数超过rank(B)的极点
问题分析与解决
错误原因翻译
使用
place函数出错
"place"命令无法配置重数大于rank(B)的极点。
你的代码中,输入矩阵B是4×2的矩阵,其秩rank(B)=2,但你设置的期望极点desired_poles是4个重复的-1,重数为4,超过了rank(B)的值,这违反了place函数的约束条件,因此报错。
解决方案
place函数要求单个极点的重数不能超过输入矩阵B的秩(这里B的秩是2),你需要调整期望极点的设置:
方案1:分散极点配置
将期望极点设置为多个不同(或部分重复但重数不超2)的负实极点,例如:
% 修改期望极点 desired_poles = [-1, -1, -2, -3]; % 两个-1,加两个不同的负极点
方案2:同极点但重数合规
如果希望极点集中,最多设置重数为2的重复极点,例如:
desired_poles = [-1, -1, -2, -2]; % 两个重数为2的极点
修改后完整代码示例
A=[0 0 0 217.28; 0 0 127.33 0; 0 -1 -3.73 0.97; -1 0 0.97 -3.73]; %4*4 B=[0 0 -.38 -1.39; 0 0 -1.18 0.29].'; %4*2 C=[1 0 0 0]; %1st row of C D=zeros(1, 2); % 调整后的期望极点(重数不超过rank(B)=2) desired_poles = [-1, -1, -2, -3]; % 计算反馈增益矩阵K k = place(A, B, desired_poles); % 创建闭环系统 Aclosed = A - B * k; Bclosed = B; Cclosed = C; Dclosed = D; % 查看闭环极点 closed_loop_poles = eig(Aclosed); disp('Poles of the closed-loop system:'); disp(closed_loop_poles);
运行修改后的代码,就能正常输出增益矩阵k和闭环极点,且闭环极点会匹配你设置的期望极点。
内容的提问来源于stack exchange,提问作者Chery
相关产品推荐
相关产品推荐

