MATLAB subs (): strange behavior

syms Gr Ra Ri AB Gr1 Gr2 cd Gr = 2*c*(Ra^2 - Ri^2) - d*(Ra^4 - Ri^4)/2; Gr1 = subs(Gr, [c*(Ra^2 - Ri^2), -d*(Ra^4 - Ri^4)/2], [A, B]) Gr2 = subs(Gr, [c*(Ra^2 - Ri^2), d*(Ra^4 - Ri^4)/2], [A, B]) 

returns

 Gr1 = 2*A + B Gr2 = 2*A - (d*(Ra^4 - Ri^4))/2 

Is there any way to convince MATLAB to return Gr2 = 2*A - B in the second case without workarounds? I have a much more complex expression to replace, but I cannot work with this approach () - behavior. Thanks.

+5
source share
2 answers

The described behavior was classified by the Matlab development team as unexpected and, we hope, will be fixed in future releases:

http://www.mathworks.com/matlabcentral/answers/213727-subs-unexpected-simplification-behaviour#answer_177179

0
source

I think the problem is the multiplication / division operations in the second argument to subs , since the problem disappears as soon as I change the code as follows:

 syms Gr Ra Ri AB Gr1 Gr2 cd Gr = 2*c*(Ra^2 - Ri^2) - d*(Ra^4 - Ri^4)/2; Gr1 = subs(Gr, [(Ra^2 - Ri^2),(Ra^4 - Ri^4)], [A/c,-2*B/d]) Gr2 = subs(Gr, [(Ra^2 - Ri^2),(Ra^4 - Ri^4)], [A/c,2*B/d]) 

and output:

 Gr1 = 2*A + B Gr2 = 2*A - B 
+1
source

All Articles