【问题标题】:The algorithm behind ss2tf in MatlabMatlab中ss2tf背后的算法
【发布时间】:2016-07-03 03:13:10
【问题描述】:

传递函数有canonical 状态空间的可控和可观察形式。 但是,当我从 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

【问题讨论】:

  • 您是否已经尝试过edit tf2ss ;-)?

标签: matlab data-conversion state-space control-theory


【解决方案1】:

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

这里的区别仅此而已。检查以下系统:它们都具有相同的传递函数,但具有不同的 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 系统需要更多的关注。我实现了 W.A. Wolowich,Linear Multivariable Systems (1974) 第 4.4 节的变体。我认为 matlab 做了类似的事情,但也平衡了(某种)我尚未添加的实现。

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

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

之所以弹出伴生矩阵,是因为实数多项式的根与该多项式的系数形成的伴生矩阵的特征值重合。有关一些历史评论,请查看此Cleve Moler's blog post 关于根。

举一个经典例子,为什么这是一个病态问题here is the example from the master himself

【讨论】:

  • 你的意思是H = ss2ss(G,rot90(eye(2))) 吗?
  • @ar2015 是的,对不起
  • 我还是应该好好想想,可能会问你更多问题。
  • @ar2015 我希望我能回答他们:)
【解决方案2】:

刚刚检查了ss2tf,您想知道哪些内部功能。它基本上从状态空间系统计算极点和零点,然后形成传递函数。它使用函数ss2zp 来执行此操作。通过计算状态矩阵 A 的特征值很容易确定极点。但是,我实际上并不知道它是如何计算零点的。因为功能。计算状态空间系统零点的ltipack.sszeroprotected。但是,它很可能使用类似于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中描述的算法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    • 2020-09-22
    • 2010-09-15
    相关资源
    最近更新 更多