Selecting non-zero elements from a symbolic vector

Given a symbolic vector, say [a*b, 0 , a^2*b*c, 1, 0]. How could I obtain a vector from the non-zero entries, I would like for the given example to have [a*b, a^2*b*c, 1] as a result. I tried nonzeros but this does not work for type sym.

1 Commento

Do you want to remove the entries that are identical to 0, or the entries that can be proven to be 0? For example if one of the entries was 1 - cos(theta)^2 - sin(theta)^2 then we could show that this must be 0 (at least for finite non-nan values), so should it be removed?

Accedi per commentare.

 Risposta accettata

This works for me (in R2015a):
syms a b c
V = [a*b, 0 , a^2*b*c, 1, 0];
Vnz = V(V~=0)
Vnz =
[ a*b, a^2*b*c, 1]

2 Commenti

Appreciated, that is all I needed! You are a boss.
As always, my pleasure!

Accedi per commentare.

Più risposte (2)

Farid, you could use

syms a b c
d = [a*b, 0 , a^2*b*c, 1, 0];
d(d==0) = []
d = [ a*b, a^2*b*c, 1]

2 Commenti

I get the following message (which I am not sure what it means): Error using symfun>validateArgNames (line 205) Second input must be a scalar or vector of unique symbolic variables.
Error in symfun (line 45) y.vars = validateArgNames(inputs);
Error in sym/subsasgn (line 762) C = symfun(B,[inds{:}]);
Then you need to post the entire code. Use the paper clip symbol to attach.

Accedi per commentare.

Azzi Abdelmalek
Azzi Abdelmalek il 23 Giu 2015
Modificato: Azzi Abdelmalek il 23 Giu 2015
syms a b c
d = [a*b, 0 , a^2*b*c, 1, 0]
c=nonzeros(d).'

2 Commenti

nonzeros do not work for type sym.
The nonzeros function for symbolic arrays was introduced in R2014b.

Accedi per commentare.

Community Treasure Hunt

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

Start Hunting!

Translated by