Первый кусок кода, который вы даете, в порядке. Единственная проблема в том, что нет решения для одного х_4. Если вы замените последнюю строку на Solve[cond]
, тогда Mathmatica автоматически выберет свободные переменные, и вы получите решение.
Я думаю, что простой / тривиальный пример прояснит проблему этого типа:
In[1]:= Solve[x==1&&y==2,x]
Solve[x==1&&y==2,{x,y}]
Out[1]= {}
Out[2]= {{x->1,y->2}}
Окончательный результат также можно получить с помощью Solve[x==1&&y==2]
, где Mma угадывает свободные переменные. Это поведение отличается от поведения Mathematica 7. В Mathematica 8 была введена новая опция для Solve
(и связанных с ней функций) под названием MaxExtraCondtions
. Это позволяет Solve предоставлять решения, использующие новый ConditionalExpression
, и призван сделать поведение решения более согласованным и предсказуемым.
Вот как это работает в этом простом примере:
In[3]:= Solve[x==1&&y==2, x, MaxExtraConditions->1]
Out[3]= {{x -> ConditionalExpression[1, y==2]}}
См. Выше ссылку на документацию для большего количества примеров, показывающих, почему этот Option
полезен. (Хотя, возможно, по умолчанию Automatic
вместо 0
будет более прагматичным выбором дизайна для новой опции ...)
Наконец, вот ваше первое решение, немного переписанное:
In[1]:= X=Array[Symbol["x"<>ToString[#]]&,{7}]
Out[1]= {x1,x2,x3,x4,x5,x6,x7}
In[2]:= cond=Mean[X[[1;;4]]]==5&&Mean[X[[4;;7]]]==8&&Mean[X]==46/7;
In[3]:= Solve[cond]
x4/.%
Out[3]= {{x1->14-x2-x3,x4->6,x5->26-x6-x7}}
Out[4]= {6}