これが私がそれを行う方法です。コードは自明です。
clear all;
close all;
clc;
% Generate random state-space system
sys = rss(2,2,2);
%% Generate transfer function matrix with Matlab tf
% For each output
for i = 1:size(sys,1)
% For each input
for j = 1:size(sys,2)
% Get SISO transfer function
[num,den] = ss2tf(sys(i,j).A,sys(i,j).B,sys(i,j).C,sys(i,j).D);
% Compute tf
Gtf(i,j) = tf(num,den);
end
end
%% Generate transfer function matrix symbolic
% Laplace variable
s = sym('s');
% For each output
for i = 1:size(sys,1)
% For each input
for j = 1:size(sys,2)
% Get SISO transfer function
[num,den] = ss2tf(sys(i,j).A,sys(i,j).B,sys(i,j).C,sys(i,j).D);
% Compute tf
Gsym(i,j) = poly2sym(num,s);
end
end
% Den is the same for all elements
Gsym = Gsym / poly2sym(den,s);
% Numeric vectors is transformed to symbolic vector, to make everything
% readable change the variable precision arithmetic to 4 digits for output
pretty(vpa(Gsym,4))
-編集- Matlab にこの機能が関数ss2tf
自体に組み込まれていないことに、実際には少し驚いていると言わざるを得ません。