1

这个问题之后,我试图理解 MATLABss()tf2ss()函数的功能及其差异。考虑下面的代码:

Kf = 0.2;   
J = 0.02; 

h2 = tf(1, [J Kf]);

dcm1 = ss(h2);
dcm2 = tf2ss(h2.Numerator{1}, h2.Denominator{1}); 

从这里部分复制。现在我希望dcm1anddcm2是相同的,但这是我得到的:

>> dcm1

dcm1 =
 
  一个=
        x1
   x1 -10
 
  乙 =
       u1
   x1 8
 
  C =
         x1
   y1 6.25
 
  D =
       u1
   y1 0
 
连续时间状态空间模型。

>> dcm2

平方厘米 =

   -10

如果您能帮助我理解为什么我会得到两个不同的结果,我将不胜感激?如何使用该tf2ss()函数获得相同的结果?换句话说,我想创建一个与该函数dcm2相同dcm1但使用该函数的tf2ss()函数。

4

1 回答 1

1

ss返回一个 state-space system,类似于tf它们分别返回连续系统sstf表示。

ss2tf返回 A、B、C、D 矩阵,它们是将传递函数tf转换为其状态空间表示的结果。

但是有一个警告,传递函数的状态空间表示不是唯一的。似乎对和Matlab使用了两种不同的算法。您可以验证两个系统是否返回相同的传递函数:sstf2ss

Kf = 0.2;   
J = 0.02; 

h2 = tf(1, [J Kf]);

dcm1 = ss(h2);
[A, B, C, D] = tf2ss(h2.Numerator{1}, h2.Denominator{1}); 

dcm1 =

  A = 
        x1
   x1  -10
 
  B = 
       u1
   x1   8
 
  C = 
         x1
   y1  6.25
 
  D = 
       u1
   y1   0

[A B C D]

A = -10
B = 1
C = 50
D = 0

现在让我们比较一下传递函数:

[b, a] = ss2tf(A, B, C, D)
% yields
b = [0 50]
a = [1 10]

[b, a] = ss2tf(dcm1.a, dcm1.b, dcm1.c, dcm1.d)
% yields
b = [0 50]
a = [1 10]
于 2022-02-17T23:21:39.643 回答