MATLAB subs():奇怪的行为

时间:2015-04-09 08:20:20

标签: matlab symbolic-math

syms Gr Ra Ri A B Gr1 Gr2 c d
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])

返回

Gr1 =

2*A + B


Gr2 =

2*A - (d*(Ra^4 - Ri^4))/2

有没有办法说服MATLAB在没有解决方法的情况下在第二种情况下返回Gr2 = 2*A - B?我有一个更复杂的表达式来替换,但我不能使用这个subs() - 行为。感谢。

2 个答案:

答案 0 :(得分:1)

我认为问题在于subs的第二个参数中的乘法/除法运算,因为一旦我重新排列代码,问题就会消失,如下所示:

syms Gr Ra Ri A B Gr1 Gr2 c d
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])

,输出为:

Gr1 =
2*A + B

Gr2 =  
2*A - B

答案 1 :(得分:0)

所描述的行为被Matlab开发团队归类为意外,并有望在未来版本中修复:

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