2017-10-04 2 views
1

私はMATLAB_R2016aを使用していますが、現在、MIMOシステムの適切な行列分数記述を探しています。先行係数のサブマトリクスへの分割行列

[s^2+3s+1, s+1, s^3+2s; s^3+3, s^2-6, s-5]; 

各度の係数のサブ行列を生成する簡単な方法はありますか?これと同じように:

[0, 0, 1; 1, 0, 0] s^3 + [0, 0, 0 ; 0, 1, 0] s^2 + [3, 1, 2; 0, 0, 1] s + [1,1,0;3,-6,-5]; 

私はそれがループで行われ、各多項式要素の度合いを抽出し、人々が簡単に回避策を発見したかどうかを知りたいと思ったことができます理解しますか?

+1

はこれを確認してください。私はそれをテストするために必要なツールボックスはありませんが、多項式全体をcoeff()関数に入力することができれば、それぞれの部分行列を得ることになります。多項式要素ごとに行列を作成できます。 – 10a

答えて

1

シンボリックツールボックスを使用して多項式を処理するとします。したがって、@10a commentedのようにcoeffs機能を使用することができます。 最終的な結果を得るには、回避策を講じるだけです。あなたは、次のコードを使用することができ、任意の多項式のために

:https://de.mathworks.com/help/symbolic/coeffs.html:

syms x 

% find all coefficients for each polynomial. Results are of different sizes! 
% because of different degrees of polinomils 
coef = arrayfun(@(y) coeffs(y, 'All') , [2*x^2 + 3*x + 5, x^2+3; x^3, x + 7] ,... 
       'UniformOutput' , false) 

% find max degree 
max_size = cellfun(@(x) size(x,2), coef) 
max_size = max(max_size(:)) 

% and finally fill with zeros all surplus places in arrays to get unified size 
result = cellfun(@(x) [zeros(1, max_size - size(x,2)) x], coef, 'UniformOutput', false)