matlab 为什么我会得到错误的输出?

mi7gmzs6  于 2022-11-15  发布在  Matlab
关注(0)|答案(1)|浏览(245)

在这段Scilab代码中,我将状态空间系统转换为传递函数,输出应该是G(S)=(s+3)/(s^3+6s^2+11s+6),但我得到的输出是G(S)=(1+8.882D-16s)/(2+3s+s²)。我知道分子和分母之间有一个公因子(s+3),但如果我再次将相同的传递函数转换到状态空间系统,我将得到一个与原始系统不同的矩阵维度和值,这在MatLab中不会发生。有没有办法避免这个问题并从传递函数中去掉这个项(8.882D-16s)?

clear
A=[-1 0 1; 1 -2 0;0 0 -3];
B=[0;0;1];
C=[1 1 0];
D=[0];
sys=syslin('c', A, B, C, D); // c....continuous time domain system
//linear system
G=ss2tf(sys)
disp(G)
ss=tf2ss(G)
[A,B,C,D]=abcd(ss) ```
xxb16uws

xxb16uws1#

MatLab做了一些隐式的清理。您可以在Scilab中明确执行此操作:

--> G=clean(ss2tf(sys))
 G  = 

       1      
   ---------  
   2 +3s +s²

相关问题