How to count number of terms in a symbolic expression?
15 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Mehdi
el 2 de Dic. de 2023
Comentada: Walter Roberson
el 3 de Dic. de 2023
I have a long symbolic expression composed of many terms. How is it possible to count the total number of terms of my expression and then choose the ith term?
syms x y
z=x*y+cos(x*y)*x+x*sin(x)+sin(x)*cos(x)-x-y+2;
for example here the z is composed of 7 terms and the 3rd term is x*sin(x).
0 comentarios
Respuesta aceptada
Walter Roberson
el 3 de Dic. de 2023
Editada: Walter Roberson
el 3 de Dic. de 2023
syms x y
z=x*y+cos(x*y)*x+x*sin(x)+sin(x)*cos(x)-x-y+2;
terms = children(z)
nterms = length(terms)
terms{3}
children(z, 3)
2 comentarios
Walter Roberson
el 3 de Dic. de 2023
Notice the "third" term as far as MATLAB is concerned is not x*sin(x)
MATLAB re-arranges terms according to algebraic equivalences, into its own preferred order. The rules for ordering are not published, and can be contextual.
Walter Roberson
el 3 de Dic. de 2023
Further example:
syms x
f = 6 + x - 3 - 2 - 1
as far as the symbolic toolbox is concerned this is the same as
f = x
The toolbox always folds rational and symbolic floating point numbers
5 + 2*sqrt(sym('3.2'))
will get completely executed to scalar
5 + 2*sqrt(sym(3.2))
will execute to an expression. sym(3.2) is converted to sym(32)/sym(10) and sqrt of a rational is not fully evaluated
Más respuestas (1)
VBBV
el 3 de Dic. de 2023
Editada: VBBV
el 3 de Dic. de 2023
syms x y
z='x*y+cos(x*y)*x+x*sin(x)+sin(x)*cos(x)-x-y+2'
C = strsplit(z,{'+','-'})
length(C)
C{3} % 3rd term
4 comentarios
Walter Roberson
el 3 de Dic. de 2023
Editada: Walter Roberson
el 3 de Dic. de 2023
Consider
syms x y
z='x*y+cos(x-y)*x+x*sin(x)+sin(x)*cos(x)-x-y+2'
C = strsplit(z,{'+','-'})
length(C)
C{3} % 3rd term
The pattern matching has to be a lot more complicated to extract expressions. Indeed, it can be proven that it cannot be done using traditional regular expressions -- not unless you are willing to impose a maximum nesting depth (and use terribly messy expressions.) Some programming languages such as perl add regexp constructs that extend the pattern capabilities to make it possible; if MATLAB has those facilities I am overlooking them.
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!