You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 23:29:52