入力を送信して出力を取得することにより、単一入力単一出力の線形システムを反復しています。システムの伝達関数の分子と分母は、コードでそれぞれ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()
を返します。これは、コードの他の部分ではやや問題があります。これらの行列は少なくとも 1 行 1 列である必要があります。A
B
C
D
それで、私の質問は、空を返す人のためにA
、 、B
、C
の代わりに使用できる同等の空でない行列は何ですか? D
たとえば、空行列はすべて 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