如何在符号数学MATLAB中提取系数。
例如,我有传递函数
H(S) = (a*S^2 + b*S^ + a*c*S + d*a) / (S^3 + b*c*S^2 + d*S^1 + a*d)
我想将 H(s) 中的“S”项的系数作为矢量数组,如
num = [a b a*c d*a]
den = [1 b*c d a*d]
如何在符号数学MATLAB中提取系数。
例如,我有传递函数
H(S) = (a*S^2 + b*S^ + a*c*S + d*a) / (S^3 + b*c*S^2 + d*S^1 + a*d)
我想将 H(s) 中的“S”项的系数作为矢量数组,如
num = [a b a*c d*a]
den = [1 b*c d a*d]
您可以申请numden
提取分子和分母的多项式表达式:
[numexpr, denexpr] = numden(sym(H)) %// 'sym' makes sure that H is symbolic
然后您可以S
使用coeffs
命令提取符号系数(请记住先应用于expand
每个表达式以获得它们的多项式形式)。
但是,请注意,coeffs
它只返回非零系数。为了克服这个问题,我建议如下:
%// Extract numerator coefficients
[numcoef, numpow] = coeffs(expand(numexpr), S);
num = rot90(sym(sym2poly(sum(numpow))), 2);
num(num ~= 0) = coeffs(expand(numexpr), S);
%// Extract denominator coefficients
[dencoef, denpow] = coeffs(expand(denexpr), S);
den = rot90(sym(sym2poly(sum(denpow))), 2);
den(den ~= 0) = coeffs(expand(denexpr), S);
PS:您也可以使用MATLAB Exchange 中的sym2polys
工具numexpr
来denexpr
代替。
另请注意,系数向量中的最后一个元素与 的最高幂相关联更为常见S
,因此此解决方案的结果将与您在问题中描述的顺序相反。
%// Create symbolic function
syms a b S
H = b * S / (a + S^2)
[numexpr, denexpr] = numden(sym(H));
%// Extract numerator coefficients
[numcoef, numpow] = coeffs(expand(numexpr), S);
num = rot90(sym(sym2poly(sum(numpow))), 2);
num(num ~= 0) = coeffs(expand(numexpr), S);
%// Extract denominator coefficients
[dencoef, denpow] = coeffs(expand(denexpr), S);
den = rot90(sym(sym2poly(sum(denpow))), 2);
den(den ~= 0) = coeffs(expand(denexpr), S);
结果是:
num =
[0, b]
den =
[a, 0, 1]