How to extract powers of a symbolic polynomial?

38 次查看(过去 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!!

回答(3 个)

Steven Lord
Steven Lord 2021-3-22
syms z
y = 0.96*z^3500 + 0.04*z^0
y = 
[coefficients, powers] = coeffs(y)
coefficients = 
powers = 
syms y positive
exponents = simplify(subs(log(powers)./log(z), z, y))
exponents = 
  1 个评论
Walter Roberson
Walter Roberson 2021-7-19
Different formulation for finding the exponents.
syms z
y = 0.96*z^randi(9999) + 0.04*z^randi(9999)
y = 
[coefficients, powers] = coeffs(y)
coefficients = 
powers = 
exponents = mapSymType(powers, 'power', @(Z) children(Z,2));
if powers(end) == 1; exponents(end) = 0; end
exponents
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
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
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;

请先登录,再进行评论。


sil das
sil das 2023-9-25
(x+1)^2

类别

Help CenterFile Exchange 中查找有关 Calculus 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by