Jak najlepiej wykonywać następujące czynności w Mathematica?Czy istnieje wbudowana funkcja Mathematica do wyszukiwania operatorów zamiast liczb w równaniach?
In[1] := Solve[f[2,3]==5,f ∈ {Plus,Minus,Divide}]
Out[1] := Plus
Jak najlepiej wykonywać następujące czynności w Mathematica?Czy istnieje wbudowana funkcja Mathematica do wyszukiwania operatorów zamiast liczb w równaniach?
In[1] := Solve[f[2,3]==5,f ∈ {Plus,Minus,Divide}]
Out[1] := Plus
Składnia wyraz pożądane może być przekształcona w zestawie Solve
wyrażeń:
fSolve[expr_, f_ ∈ functions_List] :=
Map[Solve[(expr /. f -> #) && f == #, f] &, functions] // Flatten
Przykład użycia:
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}
Zaletą tego podejścia jest to, że pełna moc Solve
pozostaje dostępna dla bardziej złożonych wyrażeń, np.
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]}
Również bardzo ładne rozwiązanie, dobra integracja ze standardem Solve – magma
Bardzo ładne. Chciałbym o tym pomyśleć. +1 –
Nie jestem świadomy wbudowanej funkcji, ale nie jest trudno napisać samemu. Oto jedno podejście, które można użyć:
[email protected];
correctOperatorQ[expr_, value_,
operators_] := (expr == value) /. Head[expr] -> # & /@ operators
Nawiasem mówiąc, prawidłowa operator 2-3
jest Subtract
nie Minus
. Wynik dla przykładu:
correctOperatorQ[f[2, 3], 5, {Plus,Subtract,Divide}]
Out[1]={True, False, False}
Proszę mi powiedzieć, czy to robi to, co chcesz:
findFunction[expr_, head_ ∈ {ops__}] :=
[email protected][{ops}, expr /. head -> # & /@ {ops}]
findFunction[f[2, 3] == 5, f ∈ {Plus, Minus, Divide}]
(* Out[]= {Plus} *)
Przy okazji, wiem, że odpowiedź jest zwracana jako lista, ale ponieważ można sobie wyobrazić, że więcej niż jedna funkcja będzie pasować, myślę, że nie powinna ona zwracać tylko pierwszej. –
@ Mr Ładne rozwiązanie! – magma
W rzeczywistości można osiągnąć znacznie więcej niż to http://stackoverflow.com/questions/3947937/algorithm-for-permutations-of-operators-and-operands/3948113#3948113 –
połączony pytanie było już wśród moich ulubionych o__O ... thx za link! –
Nie jestem pewien, co zamierzałeś, ale możliwe, że mylisz 'Minus' i' Odejmij', FYI. –