2011-12-19 22 views
7

Tôi đang chơi với đa thức (đẹp) x^4 - 10x^2 + 1. Hãy xem những gì sẽ xảy ra:Mathematica FullSimplify [Sqrt [5 + 2 Sqrt [6]]] cho ra Sqrt [2] + Sqrt [3] nhưng FullSimplify [-Sqrt [5 + 2 Sqrt [6]]] không được đơn giản hóa, tại sao?

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]] bằng Sqrt[3]-Sqrt[2].
Tuy nhiên, Mathematica FullSimplify không đơn giản hóa Sqrt[5-2 Sqrt[6]].

Câu hỏi: Tôi có nên sử dụng các chức năng chuyên biệt khác để giải quyết phương trình đại số không? Nếu vậy thì cái nào?

+5

LeafCount @ sqrt [5-2 sqrt [6]] cho 13, và LeafCount [sqrt [3] - Sqrt [2]] cũng đưa ra 13. Hãy thử sử dụng chức năng phức tạp để đơn giản hóa để tùy chỉnh những gì được coi là đơn giản hơn cho bạn. Tôi nghĩ Mathematica sử dụng LeafCount theo mặc định. – Nasser

+0

@ NasserM.Abbasi Từ _GuideBook for Symbolics_: "Ý nghĩa của' Automatic' trong cài đặt tùy chọn 'ComplexityFunction' về cơ bản là giảm thiểu' LeafCount'. Một số ngoại lệ được tạo ra cho các số. " Ví dụ, 'Đơn giản hóa [Exp [Nhật ký [12] + 13 (Sqrt [2] + 1)^2 Nhật ký [6] - 2 * 13 Sqrt [2] Nhật ký [6]]]' không phải là một số nguyên ' , mặc dù 'Integer' có 'LeafCount'' 1'. –

+0

Không cần bao gồm câu trả lời trong câu hỏi ;-) –

Trả lời

9

Thật vậy, Solve không đơn giản hóa tất cả rễ để tối đa:

enter image description here

Một bước FullSimplify xử lý sau đơn giản hoá hai rễ và lá hai người khác bị ảnh hưởng :

enter image description here

Cùng ban đầu xảy ra với Roots:

enter image description here

đủ Strange, bây giờ FullSimplify đơn giản hoá tất cả các rễ:

enter image description here

Lý do cho điều này là, tôi giả sử, mà cho mặc định ComplexityFunction một số giải pháp được viết ở trên trong lồng nhau radic als là trong một cảm giác đơn giản hơn những người khác.

BTW FunctionExpand biết làm thế nào để đối phó với những gốc:

enter image description here

enter image description here

+0

+1 cho 'FunctionExpand' - Tôi sẽ không nghĩ rằng để sử dụng nó trên' Sqrt' hoặc 'Power' chức năng của số nguyên ... – Simon

+1

@Sjoerd Cảm ơn, rất giáo dục. Mathematica gần giống như toán học. Một khi bạn nghĩ rằng bạn đã làm chủ nó, những ngọn núi mới để leo lên xuất hiện ở chân trời. –

+0

@Sjoerd Trong v.7 FullSimplify [Giải quyết [x^4 - 10 x^2 + 1 == 0, x]] cho kết quả {{x -> Sqrt [2] - Sqrt [3]}, {x -> - Sqrt [2] + Sqrt [3]}, {x -> -Sqrt [5 + 2 Sqrt [6]]}, {x -> Sqrt [2] + Sqrt [3]}} trong khi ở v.8 hai gốc tự do vẫn không được FullSimplified. Đủ kỳ lạ. Xin chúc mừng cho huy hiệu vàng Mathematica! – Artes

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

cho

{{x -> Sqrt[2] - Sqrt[3]}, {x -> -Sqrt[2] + Sqrt[3]}, {x -> -Sqrt[2] - 
Sqrt[3]}, {x -> Sqrt[2] + Sqrt[3]}} 
+0

Đẹp nó rõ ràng là hoạt động nhưng tôi không mua mà bạn nên thêm ComplexityFunction -> (StringLength [ToString [ InputForm [# 1]]] &)] mọi lúc bạn muốn có câu trả lời đúng. –

Các vấn đề liên quan