matlab - 如何在MATLAB中提取传递函数的符号系数

标签 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)

我想获取 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

然后您可以使用 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: 你也可以申请sym2polys tool来自 numexprdenexpr 上的 MATLAB Exchange。

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

关于matlab - 如何在MATLAB中提取传递函数的符号系数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15498684/

相关文章:

c# - 如何在WPF应用程序中显示matlab图形

python - 我们可以替换来自 sympy.Function 变量微分的 sympy 中的 'Derivative' 项吗?

symbolic-math - 最大值:将矩阵转换为列表

arrays - 比较不在循环中的向量的所有元素

java - 从 Matlab 创建的 jar 文件返回值

matlab - 在重复的x位置上用y点进行曲线拟合(Galaxy螺旋臂)

algorithm - 使用小矩阵在巨大的凸矩阵中实现全局最小值

python - 数的质因数的表示方法

octave - Octave 中符号表达式的求值

python - 计算矩阵的 log2