Does order of multiplication really matter when using simplify ?
Show older comments
I noticed, when I type the following commands:
syms x;
syms n integer;
cn = int(abs(x)*exp(-i*n*x),x,-pi,pi);
cnp = 1/(2*pi)*cn; %Order of mult.
display(simplify(cnp))
the value of cnp is widely expanded (even using format short)
However by a smal change:
cnp = cn*1/(2*pi); %Order of mult.
that expansion is eradicated, as one can observe:
display(simplify(cnp))
Why is that?
Accepted Answer
More Answers (1)
Walter Roberson
on 13 Jul 2021
1 vote
The Symbolic toolbox has algorithms for trying to get a "nice" representation for any given floating point number. Those algorithms can generally notice rational multiples of pi with up to denominator 9999 . However, the algorithms are not designed to be able to detect division by pi.
In the 1/(2*pi) case, the calculation has already been done in floating point, and the symbolic engine does not happen to notice that the result can be represented "nicely"
In the case where the symbolic expression is first, multiplied by 1/(2*pi), the symbolic expression is first multiplied by 1, which gives the symbolic expression. Then the bracketed (2*pi) is evaluated in floating point. Then it has to convert that floating point number to symbolic, and this time it is a simple rational multiple of pi so it is able to detect that and substitute 2*(symbolic pi) . Then the division of the symbolic expression by symbolic 2*symbolic pi gets displayed nicely.
When you mix floating point with symbolic, it is best to explicitly convert the floating point to symbolic early, to prevent possibilities such as this .
Categories
Find more on Conversion Between Symbolic and Numeric in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


