MATLAB:为什么place命令出错?

问题描述 投票:0回答:1

我正在编写代码来查找状态反馈中的 k,但是出现错误

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

% Desired pole locations
desired_poles = -1 * ones(1, size(A, rank(B))); % All poles at -1

% Calculate the feedback gain matrix K using pole placement
k = place(A, B, desired_poles)


% Create the closed-loop system
Aclosed = A - B * k;
Bclosed = B;
Cclosed = C;
Dclosed = D;

% Check the poles of the closed-loop system
closed_loop_poles = eig(Aclosed);
disp('Poles of the closed-loop system:');
disp(closed_loop_poles);

我期待它显示 k 和 close_loop_poles。相反,我得到:

使用 [place](matlab:matlab.internal.language.introspective.errorDocCallback('place')) 时出错
“放置”命令无法放置重数大于等级(B)的极点。

matlab feedback
1个回答
0
投票

我注意到您的代码中存在潜在问题。线尺寸(A,等级(B))可能不会返回desired_poles的预期尺寸。正确的大小应该是矩阵 B 中的列数,因为您希望每个输入有一个极点。 替换这一行: desired_poles = -1 * 个(1, 大小(A, 等级(B))); 和: 所需极数 = -1 * 个(1, 大小(B, 2));

这可确保根据矩阵 B 中的列数,desired_poles 具有正确的大小。进行此更改后,您的代码应按状态反馈中的极点放置预期工作。

© www.soinside.com 2019 - 2024. All rights reserved.