控制工具箱:函数minreal如何在Matlab中工作



我有一个关于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

很明显:rank(obsv(G_min))!=秩(ctrb(G_min))!=9(州数)。

我的错误在哪里?非常感谢。

从概念上讲,您是正确的,因为最小实现是可控和可观察的。然而,minreal对此没有任何保证。根据文件:

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.

你会得到更接近你预期的东西。

或者,你最好转变为一种平衡的意识,并决定消除哪些状态。请参阅balreal的文档,了解如何将其与modred一起使用来实现这一点。

你可能还注意到obsv的文档,它明确指出,除了玩具问题之外,你不应该相信它的结果:

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 

最新更新