Matlab传递函数到可观测性标准形

Matlab传递函数到可观测性标准形,matlab,Matlab,我确实需要您的帮助,假设我有一个原始的TF2(请参见下面的代码),我想将其转换为状态空间。从这个状态空间,我想再次得到传递函数。正如你所看到的,这可能是一个循环,但是我不能使用可观测性标准形式得到相同的传递函数。有什么想法吗 syms m1 m2 b ks kd s; TF2=-1*((s^2*m1+ks+s*b)/(s^2*m2+s*kd)) %Original TF A=[0 0;1 -kd/m2] B=[-ks/m2; -b/m2+((kd*m1)/(m2*m2))] C=[0 1] D=

我确实需要您的帮助,假设我有一个原始的TF2(请参见下面的代码),我想将其转换为状态空间。从这个状态空间,我想再次得到传递函数。正如你所看到的,这可能是一个循环,但是我不能使用可观测性标准形式得到相同的传递函数。有什么想法吗

syms m1 m2 b ks kd s;
TF2=-1*((s^2*m1+ks+s*b)/(s^2*m2+s*kd)) %Original TF
A=[0 0;1 -kd/m2]
B=[-ks/m2; -b/m2+((kd*m1)/(m2*m2))]
C=[0 1]
D=[-m1/m2]
phi=s*eye-A
TF=C*inv(phi)*B+D %TF from observability canonical form 
这是可观测性标准形式的公式:

在哪里

这就是我得到的答案:

TF =

(ks*(s - 1))/(s*(kd + m2)) - (m2*(b/m2 - (kd*m1)/m2^2))/(kd + m2) - m1/m2


TF2 =

-(m1*s^2 + b*s + ks)/(m2*s^2 + kd*s)

提前谢谢

这是因为
s*eye
实际上是
s*1
,每当你对矩阵和标量执行加减运算时,标量会自动与
矩阵相乘,而不是与
eye
矩阵相乘

因此,您得到的
phi
实际上是

[s | s]
[-----] - A
[s | s]  
而不是

[s | 0]
[-----] - A
[0 | s]  
应该是后者。您可以使用
eye(2)
修复它


对于这样的符号计算,计算φ的行列式总是很方便的,不管怎样,它将是分母,以查看您是否在正确的轨道上

顺便说一句,请注意,
TF
并没有被简化。如果您尝试简化(TF)
将给出
-(ks+b*s-ks*s+m1*s)/(s*(kd+m2))
,这仍然是不一样的,但非常接近。您的状态空间方程中可能有一些小错误。我在
A、B、C、D
中找不到错误,因此我猜它在下面两行中。你只需要多加一个
-ks*s
就可以确定了:你真的需要象征性地这么做吗?非常感谢!真不敢相信我犯了这样的错误@这是我的荣幸。我们有时都会失明。