Я думаю, что MATLAB пытается уменьшить количество скобок, необходимых для получения простейшего результата. Обратите внимание, что если a
равно b
, a+c
также равно b+c
, поэтому утверждение не является ошибочным. Если вы позвоните simplify(aa)
, вы даже получите простую a == b
, которая действительно является самой простой формой, поскольку можно отменить c
с обеих сторон:
syms a b c
aa=(a==b)+c
aa =
a + c == b + c
pretty(aa)
a + c == b + c
simplify(aa)
ans =
a == b
Что касается вашего отредактированного вопроса: почему вы вообще используете символические переменные? Они медлительны и громоздки (не говоря о невыразимом зле eval
). Использование числовых вычислений дает правильный результат:
syms x1 x2 x3 x4
aa=((x1 == 0 & x2 == 0 & x3 == 0 & x4 == 0) + ((9*x1)/50 + (327*x2)/2000 + (1841*x3)/20000 + (1799*x4)/20000));
bb=eval(subs(aa, [x1 x2 x3 x4], [0.2 0.2 0.2 0.2]))
bb =
logical
0
x1=0.2;x2=0.2;x3=0.2;x4=0.2;
(x1 == 0 & x2 == 0 & x3 == 0 & x4 == 0)
ans =
logical
0
((9*x1)/50 + (327*x2)/2000 + (1841*x3)/20000 + (1799*x4)/20000)
ans =
0.1051
aa=((x1 == 0 & x2 == 0 & x3 == 0 & x4 == 0) + ((9*x1)/50 + (327*x2)/2000 + (1841*x3)/20000 + (1799*x4)/20000))
aa =
0.1051
Я подозреваю, что проблема где-то в животе subs
и / или eval
.