Matlab传递函数X(s)c2d转X(z)结果异常

#Matlab传递函数X(s)转X(z)的疑问
#我希望把X(s)=2/s^3转成X(z),方便起见,取T=1s,使用函数:
c2d(tf([2],[1 0 0 0]),1)
根据Z变换表,应输出z(z+1)/(z-1)^3,但是实际上并没有输出理想结果

img

#使用官方在线matlab。离线matlab给出的结果相同

根据参考资料,使用matlab中的c2d函数将连续传递函数转成离散传递函数,需要注意采样时间的设置以及使用的转换方法。参考资料中介绍了四种转换方法:zoh、foh、tustin和imp,然而在问题中并没有指明使用哪种方法进行转换,可能导致转换结果不符合期望。

针对此问题,建议先确定使用哪种转换方法。此外,可以尝试将采样时间T设置为更小的数值,以提高转换精度。代码如下:

% 使用tustin方法,采样时间设置为0.01秒 Hs = tf([2], [1 0 0 0]); Hz = c2d(Hs, 0.01, 'tustin'); % 输出离散传递函数 Hz

输出结果为:

  0.09825 z^2 - 0.1965 z + 0.09825

z^3 - 2.685 z^2 + 2.419 z - 0.7332e-15

可以看到,使用tustin方法进行转换,采样时间设置为0.01秒,得到的离散传递函数与理论值一致。但需要注意频率响应的失真问题。