【问题标题】:Is there a built-in Mathematica function to find operators rather than numbers in equations?是否有内置的 Mathematica 函数来查找运算符而不是方程中的数字?
【发布时间】:2011-10-30 03:47:36
【问题描述】:

如何在 Mathematica 中最好地完成以下任务?

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

Out[1] := Plus

【问题讨论】:

  • 事实上你可以实现的远不止这些stackoverflow.com/questions/3947937/…
  • 链接的问题已经是我的最爱o__O ...谢谢链接!
  • 我不确定您的意图,但您可能混淆了Minus 和Subtract,仅供参考。

标签: wolfram-mathematica equation-solving


【解决方案1】:

可以将所需的表达式语法转换为一组Solve 表达式:

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

使用示例:

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}

这种方法的优点是Solve 的全部功能仍然可用于更复杂的表达式,例如

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]}

【讨论】:

  • 也是非常好的解决方案,与标准 Solve 的良好集成
  • 非常好。我希望我能想到这一点。 +1
【解决方案2】:

请告诉我这是否符合您的要求:

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

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

【讨论】:

  • 顺便说一句,我知道答案是作为一个列表返回的,但是由于可以想象会有多个函数匹配,所以我认为它不应该只返回第一个。
【解决方案3】:

我不知道内置函数,但自己写一个并不难。这是您可以使用的一种方法:

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

顺便说一下,2-3 的正确运算符是 Subtract,而不是 Minus。您的示例的结果:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 2021-01-28
    • 2015-09-21
    • 1970-01-01
    相关资源
    最近更新 更多