【问题标题】:What do I do when tf2ss() returns empty matrices?当 tf2ss() 返回空矩阵时我该怎么办?
【发布时间】:2012-05-20 20:15:47
【问题描述】:

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

NomDen 是在对某些多项式进行一些复杂运算后计算出来的,所以我没有关于这些多项式程度的先验信息。我唯一知道的是系统是正确的(即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 的空矩阵、BCD。这在我的其他代码部分有些问题。我需要这些矩阵至少是 1×1。

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


例子:

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

【问题讨论】:

    标签: function matlab matrix transfer state-space


    【解决方案1】:

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

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

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

    出于您的目的,知道它是单输入单输出系统,AB 可以是随机矩阵,只要您有 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)
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我不同意,这正是等效的输出
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-04
      • 1970-01-01
      • 2022-08-17
      • 1970-01-01
      • 2017-08-11
      • 1970-01-01
      • 2018-03-06
      相关资源
      最近更新 更多