2011-12-19 7 views
7

Stavo giocando con il (bellissimo) polinomio x^4 - 10x^2 + 1. Guardate cosa succede:Mathematica FullSimplify [Sqrt [5 + 2 Sqrt [6]]] produce Sqrt [2] + Sqrt [3] ma FullSimplify [-Sqrt [5 + 2 Sqrt [6]]] non è semplificato, perché?

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]] è pari a Sqrt[3]-Sqrt[2].
Tuttavia, Mathematica FullSimplify non semplifica Sqrt[5-2 Sqrt[6]].

Domanda: Devo utilizzare altre funzioni più specializzate per risolvere algebricamente l'equazione? Se sì, quale?

+5

LeafCount @ Sqrt [5-2 Sqrt [6]] dà 13, e LeafCount [Sqrt [3] - Sqrt [2]] fornisce anche 13. Prova a utilizzare ComplexityFunction per Simplify per personalizzare ciò che è considerato più semplice per te. Penso che Mathematica utilizzi LeafCount per impostazione predefinita. – Nasser

+0

@ NasserM.Abbasi Dalla _GuideBook per Symbolics_: "Il significato di' Automatic' nell'opzione di opzione 'ComplexityFunction' è fondamentalmente per minimizzare il' LeafCount'. Alcune eccezioni sono fatte per i numeri. " Ad esempio, 'Semplifica [Exp [Log [12] + 13 (Sqrt [2] + 1)^2 Log [6] - 2 * 13 Sqrt [2] Log [6]]]' non è un 'intero'. , anche se 'Integer's ha' LeafCount' '1'. –

+0

Non c'è bisogno di includere la risposta nella domanda ;-) –

risposta

9

Infatti, Solve non semplifica tutte le radici al massimo:

enter image description here

Un passo FullSimplify post-elaborazione semplifica due radici e foglie due altri intatti :

enter image description here

Stesso inizialmente accade con Roots:

enter image description here

abbastanza strano, ora FullSimplify semplifica tutte le radici:

enter image description here

La ragione di questo è, suppongo, che per il valore predefinito ComplexityFunction alcune delle soluzioni scritte sopra in radic annidato sono in un certo senso più semplici degli altri.

BTW FunctionExpand sa come trattare con i radicali:

enter image description here

enter image description here

+0

+1 per 'FunctionExpand' - Non avrei pensato di usarlo su' Sqrt' o 'Power' funzioni di interi ... – Simon

+1

@Sjoerd Grazie, molto istruttivo. Mathematica è quasi come la matematica stessa. Una volta che pensi di averlo padroneggiato, nuove montagne da scalare appaiono all'orizzonte. –

+0

@Sjoerd In v.7 FullSimplify [Risolvi [x^4 - 10 x^2 + 1 == 0, x]] restituisce {{x -> Sqrt [2] - Sqrt [3]}, {x -> - Sqrt [2] + Sqrt [3]}, {x -> -Sqrt [5 + 2 Sqrt [6]]}, {x -> Sqrt [2] + Sqrt [3]}} mentre in v.8 due radicali rimanere non completamente semplificato. Abbastanza strano Congratulazioni per il distintivo dorato Mathematica! – Artes

7
FullSimplify[ Solve[x^4-10x^2+1==0,x] 
, 
    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]}} 
+0

Bello, ovviamente funziona, ma io non compro che dovresti aggiungere ComplexityFunction -> (StringLength [ToString [ InputForm [# 1]]] &)] ogni volta vuoi una risposta corretta. –