1

传递函数有可控制和可观察的规范状态空间形式。但是,当我从 Matlab 尝试时ss2tf,我收到了不同的结果。Matlab 使用什么样的算法?是否也有任何文档或开源实现?

>> a = [1 0.4 1];
>> b = [1 2 1];
>> [A,B,C,D] = tf2ss(b,a)

A =

   -0.4000   -1.0000
    1.0000         0


B =

     1
     0


C =

    1.6000         0


D =

     1
4

2 回答 2

2

刚刚检查ss2tf过,您想知道哪些内部功能。它基本上从状态空间系统计算极点和零点,然后形成传递函数。它使用该功能ss2zp来执行此操作。通过计算状态矩阵 A 的特征值很容易确定极点。但是,我实际上并不知道它是如何计算零点的。因为功能。ltipack.sszero计算状态空间系统的零点是受保护的。但是,它很可能使用类似于http://www.mathworks.com/matlabcentral/fileexchange/2199-digital-control/content/sszero.m的算法。

您还可以查看https://github.com/ilayn/harold/blob/master/harold/harold.py#L2162,它使用http://perso.uclouvain.be/paul.vandooren/publications/MisraVV94中描述的算法.pdf

于 2016-07-04T13:44:57.047 回答
2

首先要记住的是状态表示不是唯一的。不同的状态表示可以导致相同的转移表示(它们实际上形成了一个等价类,直到极点/零点抵消)。

这里的区别仅此而已。检查以下系统:它们都具有相同的传递函数,但具有不同的 C 矩阵(G,H 不同于 J),但 H,J 是规范形式

G = ss(tf(b,a))
H = ss2ss(G,rot90(eye(2)))
J = canon(H,'companion')

并且canon可能在平衡后使用非对角线的负数 A 矩阵。也可能是一个错误。

正如WG~提到的(我是无耻插件的作者harold),一般来说,转换涉及的算法要多得多,因为 MIMO 系统需要更多的关注。我实现了 WA Wolowich,Linear Multivariable Systems (1974) 第 4.4 节的变体。我认为 matlab 做了类似的事情,但也平衡了(某种)我尚未添加的实现。

一般来说,由于伴随结构,这些可控和可观测的形式在数值上不是很好的条件。因此,如果某些东西具有相当大的尺寸和严重性,则需要格外小心。

在实践中,除了一些教科书练习之外,不要将它们用于评估可控性或可观察性。而是使用minreal和使用最少的系统。

伴随矩阵弹出的原因是实数多项式的根与该多项式的系数形成的伴随矩阵的特征值重合。有关一些历史评论,请查看Cleve Moler关于根源的博客文章。

对于一个经典的例子,为什么这是一个病态问题是大师本人的例子

于 2016-08-07T12:16:16.973 回答