Wolfram mathematica Mathematica FullSimplify[5+;2 Sqrt[6]]产生Sqrt[2]+;Sqrt[3]但是FullSimplify[-Sqrt[5&èx2B;2sqrt[6]]没有被简化,为什么?

Wolfram mathematica Mathematica FullSimplify[5+;2 Sqrt[6]]产生Sqrt[2]+;Sqrt[3]但是FullSimplify[-Sqrt[5&èx2B;2sqrt[6]]没有被简化,为什么?,wolfram-mathematica,Wolfram Mathematica,我在玩(漂亮的)多项式x^4-10x^2+1。 看看会发生什么: In[46]:= f[x_] := x^4 - 10x^2 + 1 a = Sqrt[2]; b = Sqrt[3]; Simplify[f[ a + b]] Simplify[f[ a - b]] Simplify[f[-a + b]] Simplify[f[-a - b]] Out[49]= 0 Out

我在玩(漂亮的)多项式
x^4-10x^2+1
。 看看会发生什么:

 In[46]:= f[x_] := x^4 - 10x^2 + 1
          a = Sqrt[2];
          b = Sqrt[3];
          Simplify[f[ a + b]]
          Simplify[f[ a - b]]
          Simplify[f[-a + b]]
          Simplify[f[-a - b]]
 Out[49]= 0
 Out[50]= 0
 Out[51]= 0
 Out[52]= 0

 In[53]:= Solve[f[x] == 0, x]
 Out[53]= {{x->-Sqrt[5-2 Sqrt[6]]},{x->Sqrt[5-2 Sqrt[6]]},{x->-Sqrt[5+2 Sqrt[6]]},{x->Sqrt[5+2 Sqrt[6]]}}
 In[54]:= Simplify[Solve[f[x] == 0, x]]
 Out[54]= {{x->-Sqrt[5-2 Sqrt[6]]},{x->Sqrt[5-2 Sqrt[6]]},{x->-Sqrt[5+2 Sqrt[6]]},{x->Sqrt[5+2 Sqrt[6]]}}
 In[55]:= FullSimplify[Solve[f[x] == 0, x]]
 Out[55]= {{x->Sqrt[2]-Sqrt[3]},{x->Sqrt[5-2 Sqrt[6]]},{x->-Sqrt[5+2 Sqrt[6]]},{x->Sqrt[2]+Sqrt[3]}}
Sqrt[5-2 Sqrt[6]]
等于
Sqrt[3]-Sqrt[2]

然而,Mathematica的
FullSimplify
并没有简化
Sqrt[5-2 Sqrt[6]]

问题:我是否应该使用其他更专业的函数来代数地解方程?如果是,哪一个?

FullSimplify[ Solve[x^4-10x^2+1==0,x]
, 
  ComplexityFunction -> 
   (StringLength[ToString[
      InputForm[#1]]] & )]
给予


实际上,
Solve
并没有最大限度地简化所有根:

FullSimplify
后处理步骤简化了两个根,并保留了另外两个未触及的根:

同样的情况最初发生在
根上:

奇怪的是,现在
FullSimplify
简化了所有根:

原因是,我假设,对于默认的
ComplexityFunction
,上面用嵌套部首编写的一些解决方案在某种意义上比其他解决方案简单

顺便说一句,FunctionExpand知道如何处理这些部首:


LeafCount@Sqrt[5-2 Sqrt[6]]给出13,而LeafCount[Sqrt[3]-Sqrt[2]]也给出13。尝试使用ComplexityFunction for Simplify来定制您认为更简单的功能。我认为Mathematica默认使用LeafCount。@NasserM.Abbasi(来自符号指南):
ComplexityFunction
选项设置中的
Automatic
的含义基本上是最小化
LeafCount
。数字也有例外。”例如,
Simplify[Exp[Log[12]+13(Sqrt[2]+1)^2 Log[6]-2*13 Sqrt[2]Log[6]]
不是一个
整数
,尽管
整数
叶数
1
。无需在问题中包含答案;-)+1对于
FunctionExpand
-我不会想到在
Sqrt
Power
整数函数上使用它…@Sjoerd谢谢,非常有教育意义。Mathematica几乎和数学本身一样。一旦你认为你掌握了它,新的山峰就会出现在地平线上。@Sjoerd在v.7 FullSimplify[Solve[x^4-10 x^2+1==0,x]]中产生{{x->Sqrt[2]-Sqrt[3]}、{x->-Sqrt[2]+Sqrt[3]}、{x->-Sqrt[5+2 Sqrt[6]}、{x->Sqrt[2]+Sqrt[3]}而在v.8中两个部首仍然没有完全简化。真奇怪。祝贺你获得一枚金质徽章+1(不久前已经投票了),祝贺Mathematica金牌@莱昂尼德,谢谢!尤达在我意识到之前告诉了我。我想我现在应该辞职了。生活中所有的目标都实现了…;-)很好,它显然是有效的,但我不认为每次需要正确答案时都应该添加ComplexityFunction->(StringLength[ToString[InputForm[#1]]]&)。
{{x -> Sqrt[2] - Sqrt[3]}, {x -> -Sqrt[2] + Sqrt[3]}, {x -> -Sqrt[2] -
 Sqrt[3]}, {x -> Sqrt[2] + Sqrt[3]}}