How to extract powers of a symbolic polynomial?

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!!

Answers (3)

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 Comment

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.

Sign in to comment.

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 Comment

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;

Sign in to comment.

(x+1)^2

1 Comment

Could you explain how that line of code solves the problem mentioend by @Alina Rossi-Conaway ?

Sign in to comment.

Asked:

on 18 Mar 2021

Commented:

on 25 Sep 2023

Community Treasure Hunt

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

Start Hunting!