在Matlab中,我有一个关于“minreal”函数的问题。在Matlab的帮助下,我假设输出是系统的最小实现。据我理解,它意味着输出函数是可观察的和可控的。
示例:
num = [ 6.40756397363316, -4511.90326777420, 7084807.91317081, -3549645853.18273, 2307781024837.00, -761727788683491, 2.26760542619190e+17, -1.54992537527829e+19, 5.58719150155001e+21 ];
den = [ 1, 824.614362937241, 1036273.19811846, 592905955.793358, 319582996989.696, 106244022544031, 2.87990542333047e+16, 2.36284104437760e+18, 3.50241006466156e+20, 0];
G = tf(num,den);
G_min = minreal(ss(G));但这并不是最低限度的实现:
>> size(G_min)
State-space model with 1 outputs, 1 inputs, and 9 states.
>> rank(obsv(G_min))
ans = 6
>> rank(ctrb(G_min))
ans = 5所以很明显:秩(G_min) !=秩(ctrb(G_min)) != 9(状态数)。
我的错误在哪里?非常感谢。
发布于 2015-12-05 19:45:28
从概念上讲,你是正确的,因为最小的实现是可控的和可观察的。然而,极小体并不能保证这一点。据医生说:
Pole-zero cancellation is a straightforward search through the poles
and zeros looking for matches that are within tolerance. Transfer functions
are first converted to zero-pole-gain form.也就是说,minreal只是对极点和零点是否接近进行了一些盲目的搜索,不能保证结果满足任何其他条件。请注意,在您的情况下,您可以指定更大的容忍度,从而消除更多的状态,
>> G_red = minreal(G,10)
G_red =
6.408 s + 74.87
------------------------
s^2 + 625.7 s + 1.703e05
Continuous-time transfer function.你会得到更接近你预期的东西。
或者,你很可能会更好地转换成一个平衡的实现,并决定哪种状态来消除你自己。有关如何将其与巴莱尔一起使用以实现此目的的示例,请参阅调模文档。
您还可能会注意到蒙舍夫的文档,其中明确指出,除了玩具问题之外,您不应该信任它的结果:
obsv is here for educational purposes and is not recommended for serious control design.
Computing the rank of the observability matrix is not recommended for observability testing.
Ob will be numerically singular for most systems with more than a handful of states.
This fact is well documented in the control literature. For example, see section III in
http://lawww.epfl.ch/webdav/site/la/users/105941/public/NumCompCtrl.pdf https://stackoverflow.com/questions/34108362
复制相似问题