如何在MATLAB中提取TRANSFER FUNCTION的符号系数

时间:2013-03-19 11:48:32

标签: matlab symbolic-math

如何在符号数学中提取系数 MATLAB

例如,我有像

这样的转移功能
H(S) = (a*S^2 + b*S^ + a*c*S + d*a) / (S^3 + b*c*S^2 + d*S^1 + a*d)

我希望得到' S'术语在H(s)中作为矢量数组,如

num = [a b a*c d*a]
den = [1 b*c d a*d]

1 个答案:

答案 0 :(得分:4)

您可以应用numden来提取分子和分母多项式表达式:

[numexpr, denexpr] = numden(sym(H))  %// 'sym' makes sure that H is symbolic

然后你可以使用coeffs命令提取S的符号系数(记得先在每个表达式上应用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);

P.S:您也可以在numexprdenexpr上的MATLAB Exchange中申请sym2polys tool

另请注意,系数向量中的最后一个元素与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]