入力を送信して出力を取得することにより、単一入力単一出力の線形システムを反復しています。システムの伝達関数の分子と分母は、コードでそれぞれ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 列である必要があります。ABCD
それで、私の質問は、空を返す人のために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