2011-10-30 26 views
7

Làm cách nào để đạt được kết quả tốt nhất trong Mathematica?Có chức năng Mathematica tích hợp để tìm toán tử thay vì số trong phương trình không?

In[1] := Solve[f[2,3]==5,f ∈ {Plus,Minus,Divide}] 

Out[1] := Plus 
+2

Trong thực tế, bạn có thể đạt được nhiều hơn này http://stackoverflow.com/questions/3947937/algorithm-for-permutations-of-operators-and-operands/3948113#3948113 –

+0

các câu hỏi liên quan là đã trong số favs của tôi o__O ... thx cho liên kết! –

+3

Tôi không chắc chắn những gì bạn dự định, nhưng có thể bạn đang bối rối 'Minus' và' Trừ, 'FYI. –

Trả lời

8

những mong muốn cú pháp biểu thức có thể được chuyển đổi thành một bộ Solve biểu:

fSolve[expr_, f_ ∈ functions_List] := 
    Map[Solve[(expr /. f -> #) && f == #, f] &, functions] // Flatten 

Sử dụng mẫu:

In[6]:= fSolve[f[2,3] == 5, f ∈ {Plus, Subtract, Divide}] 
Out[6]= {f -> Plus} 

In[7]:= fSolve[f[4,2] == 2, f ∈ {Plus, Subtract, Divide}] 
Out[7]= {f -> Subtract, f -> Divide} 

Lợi thế của phương pháp này là toàn bộ sức mạnh của Solve vẫn khả dụng cho các biểu thức phức tạp hơn, ví dụ:

In[8]:= fSolve[D[f[x], x] < f[x], f ∈ {Log, Exp}] 
Out[8]= {f -> ConditionalExpression[Log, x Log[x]∈Reals && x>E^ProductLog[1]]} 

In[9]:= fSolve[D[f[x], x] <= f[x], f ∈ {Log, Exp}] 
Out[9]= {f -> ConditionalExpression[Log, x Log[x]∈Reals && x>=E^ProductLog[1]], 
     f -> ConditionalExpression[Exp, E^x ∈ Reals]} 
+2

Giải pháp rất đẹp, tích hợp tốt với tiêu chuẩn Giải quyết – magma

+1

Rất đẹp. Tôi ước gì tôi nghĩ về điều đó. +1 –

3

Tôi không biết về chức năng tích hợp sẵn, nhưng không khó để viết một bản thân. Dưới đây là một phương pháp mà bạn có thể sử dụng:

[email protected]; 
correctOperatorQ[expr_, value_, 
    operators_] := (expr == value) /. Head[expr] -> # & /@ operators 

Bằng cách này, các nhà điều hành chính xác cho 2-3Subtract, không Minus. Kết quả ví dụ của bạn:

correctOperatorQ[f[2, 3], 5, {Plus,Subtract,Divide}] 
Out[1]={True, False, False} 
6

Hãy cho tôi biết nếu điều này làm những gì bạn muốn:

findFunction[expr_, head_ ∈ {ops__}] := 
    [email protected][{ops}, expr /. head -> # & /@ {ops}] 

findFunction[f[2, 3] == 5, f ∈ {Plus, Minus, Divide}] 
(* Out[]= {Plus} *)
+2

Nhân tiện, tôi biết câu trả lời được trả về dưới dạng danh sách, nhưng vì có thể hiểu rằng nhiều hơn một hàm sẽ khớp nhau, tôi nghĩ nó không nên trả về chỉ một hàm đầu tiên. –

+0

@ Mr Giải pháp tốt đẹp! – magma

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