Wolfram mathematica 在Mathematica中使用解

Wolfram mathematica 在Mathematica中使用解,wolfram-mathematica,puzzle,Wolfram Mathematica,Puzzle,为了熟悉Mathematica的求解函数,我尝试求解a: 有一张七个数字的清单。前四个数字的平均值是5,而 最后四个数字的平均值是8。如果所有七个数字的平均值为46/7,则 两组四个数字的共同数字是什么 当然,这是一个不用计算机也能解决的练习,但我怎样才能用Mathematica解决这个问题呢?我的第一个方法 X = Table[Subscript[x, i], {i, 1, 7}]; cond = { Mean[Part[X, 1 ;; 4]] == 5, Mean[Part[X,

为了熟悉Mathematica的求解函数,我尝试求解a:

有一张七个数字的清单。前四个数字的平均值是5,而 最后四个数字的平均值是8。如果所有七个数字的平均值为46/7,则 两组四个数字的共同数字是什么

当然,这是一个不用计算机也能解决的练习,但我怎样才能用Mathematica解决这个问题呢?我的第一个方法

X = Table[Subscript[x, i], {i, 1, 7}];
cond = {
  Mean[Part[X, 1 ;; 4]] == 5,  
  Mean[Part[X, 4 ;; 7]] == 8, 
  Mean[X] == 46/7
};
Solve[cond, Subscript[x, 4]]
没有返回解决方案。我的第二种方法

X = Table[Subscript[x, i], {i, 1, 7}];
rules = {Mean[Part[X, 1 ;; 4]] -> 5,  
   Mean[Part[X, 4 ;; 7]] -> 8, 
   Mean[X] -> 46/7
};
Solve[
  Mean[X] == Mean[Part[X, 1 ;; 4]] 
    + Mean[Part[X, 4 ;; 7]] 
    - Subscript[x, 4] /. rules, 
  Subscript[x, 4]
]

给出了错误的解决方案(45/7而不是6)。我做错了什么?

您给出的第一段代码很好。唯一的问题是x_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提供使用新的解决方案,旨在使Solve的行为更加一致和可预测。
在这个简单的例子中,它是如何工作的:

In[3]:= Solve[x==1&&y==2, x, MaxExtraConditions->1]
Out[3]= {{x -> ConditionalExpression[1, y==2]}}
有关说明此
选项
有用原因的更多示例,请参见上面链接到文档的部分。(尽管对于新选项来说,默认为
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}
[1]中的
:=X=Array[Symbol[“X”to字符串[#]]&,{7}]
Out[1]={x1,x2,x3,x4,x5,x6,x7}
在[2]:=cond=Mean[X[[1;4]]]==5&&Mean[X[[4;7]]]]==8&&Mean[X]==46/7;
在[3]:=求解[cond]
x4/%
Out[3]={{x1->14-x2-x3,x4->6,x5->26-x6-x7}
Out[4]={6}

也许更紧凑:

Reduce[Mean@Array[f, 4] == 5 && 
       Mean@Array[f, 4, 4] == 8 && 
       Mean@Array[f, 7] == 46/7]
(*
-> f[5] == 26 - f[6] - f[7] && 
   f[4] == 6 && 
   f[1] == 14 - f[2] - f[3]
*)  
虽然为了清楚起见,我可能更喜欢:

Reduce[Sum[f@i, {i, 4}] == 20 && 
       Sum[f@i, {i, 4, 7}] == 32 && 
       Sum[f@i, {i, 7}] == 46]
编辑

注意,我使用函数upvalue作为变量,而不是列表元素。我更喜欢这种方式,因为:

  • 您不需要初始化列表 (
    表[下标…
    在您的 示例`)
  • 结果表达式通常是 不太杂乱(无
    部分[;;]
    等)

你们很快!你们多久检查一次新问题?@W先生:你们的评论只落后几分钟!@Simon我在想“哦,一个新问题,让我们看看我能否先回答”但不,在我之前有两个人。你们不做其他事情吗?@嗯,我也喜欢图像处理questions@belisarius有没有可能知道Mma的
Reduce
在您的解决方案中是如何工作的?这似乎很神奇。好的,第二种方法有一个问题。它应该是7*平均值[X]==4*平均值[Part[X,1;;4]]+4*平均值[Part[X,4;;7]]-下标[X,4],但当应用
规则时,这会降低为
True
。这是为什么?你的第二种方法有3个严重的问题。第一,你的规则的LHS非常复杂,并且在不太人为的情况下(或者如果你在应用规则之前简化/扩展你的方程)它们将无法匹配任何内容。第二,你的方程实际上不是真的。显式展开并查看每一面,你就会看到发生了什么。第三,当将方程相加时,你会丢失信息。你会丢失方程的差异。因此,像你这样将问题简化为一个方程,永远不会得到完整的结果。Sim在Mma 7中,
Solve[x==1&&y==2,x]
yields
{x->1}}
;这在v8中发生了变化吗?@Mr.Wizard:是的,看起来是这样。我觉得
Solve[x==1&&y==2,x]有点奇怪
在Mma8中不起作用。这种行为似乎有点违反直觉。也许这是无意的,我们应该向WRI指出。@Karsten:@Mr.Wizard:得到了WRI的回复。这是Mma8中的有意更改,旨在为更复杂的示例带来更可预测的行为。对于
有一个新的
选项lve
称为
MaxExtraConditions
,控制此行为,默认为
0
。请参见编辑。