MATLAB-极点放置未产生正确的特征值矩阵

时间:2018-12-24 08:15:28

标签: matlab

我正在尝试设计一个Luenberger观测器,以便在一个传感器可用的情况下,我可以估算所有状态。

我的系统是四阶的:

NUM4 = [-0.00198 2];
DEN4 = [1 0.1201 12.22 0.4201 2];
sys = tf(NUM4,DEN4);
[A, B, C, D] = tf2ss(NUM4,DEN4);

首先,我有两极的行向量来获得所需的响应:

p1 = [-2.6 + 1i*2.39, -2.6 - 1i*2.39, -100, -120];
K = acker(A,B,p1)
p_1 = eig(A-B*K) %This should be the same as p1, but it is not

然后我继续计算植物极点,因此我为观察者想要的极点应该快3倍左右。

rank(ctrb(A,B)) % =4
rank(obsv(A,C)) % =4
planteig=eig(A);
fastpoles = 3*planteig;

然后我继续使用Ackermann公式对新极点进行极点放置:

L=acker(A',C',p2)
L=L'
p_2 = eig(A-L*C) %This should be the same as p2

最后画图:

mysys=ss(A-B*K,B,C,0);
step(74826*mysys)

在此document之后,如何建立观察者,在第6页上写道,我们可以通过计算A-B*K来验证极点位置,该eig(A-B*K)应该与放置在Ackermann公式中的极点相同:< / p>

enter image description here

在我看来,这不成立,因此我怀疑得出的矩阵值不正确。

ans = 1.0e+02 * -1.2000 + 0.0000i -1.0000 + 0.0000i -0.0260 + 0.0239i -0.0260 - 0.0239i 的特征值是:

p1

不等于p1 = [-2.6 + 1i*2.39, -2.6 - 1i*2.39, -100, -120]; = eig(A-L*C)

ans = -0.0505 + 1.2211i -0.0505 - 1.2211i -0.1296 +10.4136i -0.1296 -10.4136i =

p2

等于 -0.1296 +10.4136i -0.1296 -10.4136i -0.0505 + 1.2211i -0.0505 - 1.2211i ,但极点顺序不正确=

$id = $this->input->post('id');

为什么我的案例中的特征值与原始极点不匹配?我编码不正确吗?

1 个答案:

答案 0 :(得分:1)

我看不到您的p1问题。您会以不同的顺序获得本征值,但它对应于p1直到排列为止。

总而言之,我在这里看不到任何代码错误;您的问题是eig 可能对特征值进行排序(幅度减小),但并非总是如此。如果需要确保特定的顺序,则必须为此进行额外的编码。