3

記号数学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]
4

1 に答える 1

5

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:代わりにMATLABExchangeからツールsym2polys適用することもできます。numexprdenexpr

また、係数ベクトルの最後の要素がの最大の累乗に関連付けられることがより一般的である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]
于 2013-03-19T12:05:38.753 に答える