How to extract powers of a symbolic polynomial?
33 ビュー (過去 30 日間)
古いコメントを表示
I'm working with a symbolic polynomial
y = 0.96*z^3500 + 0.04*z^0
I can extract the coefficients easily with
coeffs(y)
but I cannot figure out a way to pull off the corresponding powers of z into a vector. I've tried doing some wonky stuff with logs, but nothing so far. Am I SOL?
Thank you!!
0 件のコメント
回答 (3 件)
Steven Lord
2021 年 3 月 22 日
syms z
y = 0.96*z^3500 + 0.04*z^0
[coefficients, powers] = coeffs(y)
syms y positive
exponents = simplify(subs(log(powers)./log(z), z, y))
1 件のコメント
Walter Roberson
2021 年 7 月 19 日
Different formulation for finding the exponents.
syms z
y = 0.96*z^randi(9999) + 0.04*z^randi(9999)
[coefficients, powers] = coeffs(y)
exponents = mapSymType(powers, 'power', @(Z) children(Z,2));
if powers(end) == 1; exponents(end) = 0; end
exponents
This particular code relies on an enhancement to children() that was made a small number of releases ago. A workaround is possible for older releases.
Shubham Rawat
2021 年 3 月 22 日
Hi Alina,
You may first find coefficients of all variables like this:
coef = sym2poly(y);
Then you can find all the index of all the non zero elements and -1 as indexing start from 1 in MATLAB:
polyPowers = find(coef) - 1;
Hope this Helps!
1 件のコメント
Davy Figaro
2021 年 7 月 19 日
This is good, but because symbolic polynomial powers are presented in descending order, you need to double flip to get the polyPowers to line up to the original polynomial:
polyPowers = flip(find(flip(coef))) - 1;
参考
カテゴリ
Help Center および File Exchange で Calculus についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!