Selecting non-zero elements from a symbolic vector

4 次查看(过去 30 天)
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 个评论
Walter Roberson
Walter Roberson 2015-6-23
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?

请先登录,再进行评论。

采纳的回答

Star Strider
Star Strider 2015-6-23
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 个)

Mischa Kim
Mischa Kim 2015-6-23

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 个评论
Farid Salazar Wong
Farid Salazar Wong 2015-6-23
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{:}]);
Mischa Kim
Mischa Kim 2015-6-23
Then you need to post the entire code. Use the paper clip symbol to attach.

请先登录,再进行评论。


Azzi Abdelmalek
Azzi Abdelmalek 2015-6-23
编辑:Azzi Abdelmalek 2015-6-23
syms a b c
d = [a*b, 0 , a^2*b*c, 1, 0]
c=nonzeros(d).'

Community Treasure Hunt

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

Start Hunting!

Translated by