我有一个带有矩阵 A、B、C 和 D 的状态空间系统。
我可以创建一个状态空间系统,sys1 = ss(A,B,C,D)
或者计算传递函数矩阵,sys2 = C*inv(z*I - A)*B + D
但是,当我绘制两个系统的波特图时,它们是不同的,但它们应该是相同的。
这里出了什么问题?有人有线索吗?我知道 btw 生成的 bodeplotsys1
是正确的。
系统可以在这里下载:https ://dl.dropboxusercontent.com/u/20782274/system.mat
clear all;
close all;
clc;
Ts = 0.01;
z = tf('z',Ts);
% Discrete system
A = [0 1 0; 0 0 1; 0.41 -1.21 1.8];
B = [0; 0; 0.01];
C = [7 -73 170];
D = 1;
% Set as state space
sys1 = ss(A,B,C,D,Ts);
% Compute transfer function
sys2 = C*inv(z*eye(3) - A)*B + D;
% Compute the actual transfer function
[num,den] = ss2tf(A,B,C,D);
sys3 = tf(num,den,Ts);
% Show bode
bode(sys1,'b',sys2,'r--',sys3,'g--');
编辑:我犯了一个小错误,传递函数矩阵是sys2 = C*inv(z*I - A)*B + D
,而不是sys2 = C*inv(z*I - A)*B - D
我之前写的。问题仍然存在。
编辑2:我注意到当我计算分母时,它是正确的。
syms z;
collect(det(z*eye(3) - A),z)