【问题标题】:Defining function through its properties通过属性定义函数
【发布时间】:2014-11-25 15:36:52
【问题描述】:

我有兴趣仅通过其属性在 Mathematica 中定义抽象函数 f[x,y]

例如,我希望 Mathematica 了解并简化使用 f[a+b,c] = f[a,c] + f[b,c] 等。

我应该如何以这种方式定义一个函数?

【问题讨论】:

    标签: wolfram-mathematica


    【解决方案1】:

    这可能会让你开始。

     Clear[f];
     SetAttributes[f, HoldFirst];
     f[s_Plus, b__] := f[#, b] & /@ List @@ Hold[s][[1]] // Total
     f[a + b + c, d, e]
    

    f[a, d, e] + f[b, d, e] + f[c, d, e]

    【讨论】:

    • 谢谢!这就是我想要的。
    【解决方案2】:

    一种通用的方法:

    ClearAll[f]
    e : f[s : (_Plus | _Times | _Dot), b__] := Thread[Unevaluated@e, Head[s]]
    

    现在

    f[a + b, c]
    f[a*b, c]
    f[a.b, c]
    

    返回

       f[a, c] + f[b, c]    
       f[a, c] f[b, c]    
       f[a, c].f[b, c] 
    

    更新

    短版:

    ClearAll[f]
    e : f[(s : Plus | Times | Dot)[__], b__] := Thread[Unevaluated@e, s]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-19
      • 2011-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多