1

我通过向其发送输入并从中获取输出来迭代单输入单输出线性系统。系统传递函数的分母和分母Nom分别Den用代码表示。

Nom并且Den是在对某些多项式进行一些复杂运算后计算出来的,所以我没有关于这些多项式程度的先验信息。我唯一知道的是系统是正确的(即,度数Den大于或等于度数Nom)。

我的代码是这样的:

% ...

Nom = (...);  % calculated after some complex operations
Den = (...);  % calculated after some complex operations

[A, B, C, D] = tf2ss(Nom, Den);
x = zeros(size(B));  % state vector
xp = x;              % derivative of the state vector

% ...

for t = 0 : SAMPLING_PERIOD : TIME_END
    % ...
    xp = A * x + B * u;    % 'u' is some scalar input, calculated in the code previously
    y  = C * x + D * u;    % 'y' is some irrelevant output signal, to be used in somewhere else in the code
    x  = xp * SAMPLING_PERIOD;
    % ...
end

% ...

Den是 0(也需要Nom是 0)时,返回 、tf2ss()和 的A空矩阵。这在我的其他代码部分有些问题。我需要这些矩阵至少是 1×1。BCD

所以,我的问题是,对于那些返回空的人,我可以使用哪些等效的非空矩阵来代替A,和?例如,我可以假设所有空矩阵都是 1×1 零矩阵吗?BCD


例子:

[A, B, C, D] = tf2ss([1], [2])
返回
A = [] % Empty matrix
B = [] % Empty matrix
C = [] % Empty matrix
D = 0.5 % 1-by-1 matrix

4

2 回答 2

1

Ultimelty,您需要了解输出提供的内容。

为tf2ss编写代码的方式,if size(den) = 1那么a = b =c =[]

原因是您不再提供微分方程,而是将微分方程分量与输出分开。

出于您的目的,知道它是单输入单输出系统,A并且B可以是随机矩阵,只要您有 x*C = [0],您应该没问题。这个想法是没有真正的“等式状态”。但是,出于您的目的,您应该指示 Matlab 只有一个不受其导数影响的状态(即当前状态,对于纯增益系统来说是准确的),其中 A = B = C = 0

虽然 Matlab 在构建系统时可能会看到差异,但实际上它们是相同的:

[A, B, C, D] = tf2ss([1], [2]);
H2 = ss(0,0,0,D);
H1 = ss(A,B,C,D);
bode(H1/ H2)
于 2012-05-20T21:06:35.073 回答
0

空矩阵绝对不是1x1零。如果您需要以某种方式标记结果不是数字,但大小仍为1x1,请尝试返回NaN

于 2012-05-20T20:18:55.970 回答