将矩阵分裂为领先系数的子矩阵

时间:2017-10-04 04:38:12

标签: matlab matrix

我正在使用MATLAB_R2016a,目前我正在尝试找到MIMO系统的正确矩阵分数描述。假设我有一个表格矩阵:

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

是否有一种简单的方法可以为每个s级生成系数的子矩阵?像这样:

[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 个答案:

答案 0 :(得分:1)

我想你使用符号工具箱来处理多项式。因此,作为@10a commented,您可以使用coeffs函数。 你只需要做一些解决方法来获得最终结果。

对于任意多项式,您可以使用下一个代码:

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)