【问题标题】:What does // mean in Mathematica?// 在 Mathematica 中是什么意思?
【发布时间】:2011-05-04 12:42:26
【问题描述】:

例子:

  • CT = Table[Prepend[10^4*x[range2] /.
         NDSolve[{...series of equations here...}, {t, range1, range2}, 
            MaxSteps -> 10000,
            PrecisionGoal -> 11], delay], 
            {delay, delaymin, delaymax, 0.1}]; // Timing
    

分号后面的// Timing是什么意思?

  • Dρ = -I*((H0 + V).ρ - ρ.(H0 + V)) - Γ*ρ // Simplify;
    

这个// Simplify在这里?

我在任何地方都找不到这个解释!

提前致谢, 蒂亚戈

【问题讨论】:

  • 欢迎来到 StackOverflow。如果您对该网站有任何疑问,请see this FAQ
  • 查看完整内容的诀窍是FullForm[Hold[stuff]]。也可以试试TreeForm[Hold[stuff]]

标签: syntax operators wolfram-mathematica


【解决方案1】:

这是 Mathematica 的 postfix 表示法。 基本上 x//f 和 f[x] 是一样的

【讨论】:

    【解决方案2】:

    是的,argument // function 是后缀函数应用程序。

    它的有用之处在于它具有不同的、相对于前缀应用程序较低的绑定能力 (f @ x)。

    实际上它低于大多数其他东西(例外包括CompoundExpression;Set=),因此它通常可以被认为是“适用于在此之前的一切。”

    【讨论】:

      【解决方案3】:

      你说:“我在任何地方都找不到这个解释!”。我认为这意味着您在使用 Mathematica 时并不知道触手可及的文档中心。

      您所要做的就是将光标放在// 上,然后按 F1,您会得到某种解释,或者一个包含相关(希望)匹配项的列表。在这种情况下,PostFix 页面不是很有帮助。但是,它在底部有一些链接(假设您有版本 6、7 或 8)提供更多洞察力,其中有一个指向语法概述页面的链接(单击 Mathematica 语法链接,或在搜索框)。

      【讨论】:

      • 我知道 Mathematica 网站上的在线文档。我总是打开它。但是,正如您所说,Postfix 页面没有任何帮助或直接性。我的 Mathematica 版本是 6,但我们已经订购了最新版本的许可证。必须很快在这里可用。谢谢。
      【解决方案4】:

      expr // f 本质上等同于f[expr]。有时,它被称为后缀表示法。我将expr // f 读作“将表达式expr 传递给函数f”。

      【讨论】:

        【解决方案5】:
        a // f
        

        我相信和

        是一样的
        f[a]
        

        (顺便说一句,我认识的任何理智的数学家都会这样写

        f(a)
        

        就像在大多数计算机语言中所做的那样。)

        【讨论】:

        • f(a) 作为一个数学符号是相当模糊的。是的,它可能表示 x 的函数 f,但也可能表示括号之间的表达式 a 的 f 倍。
        • 是的。 (当然,除非你有正确的排版和训练有素的眼睛来观察两者之间的间距差异。)但是f[a] 在这方面既不是标准的数学符号也不是更好的符号,因为很多人(尤其是,但不仅是,那些也使用编程语言的人)会将其作为索引读取。我看过一些论文,其中下标和括号可以互换使用,具体取决于下标的复杂性。
        • 如果你真的必须这样,如果你使用TraditionalForm,你可以用括号显示它。
        • 顺便说一句 理智的数学家是矛盾的
        • @Sjoerd:我知道。如果我是 Mathematica 用户,我可能还知道如何让它接受通常的,呃,“传统的”输入形式。但我真的不在乎。
        【解决方案6】:

        正如其他人所提到的,// 是后缀符号,expr//f 在数学中表示 f[expr],在数学中表示 f(expr)

        虽然可能涉及更多微妙之处,但我对// 的使用通常是在我开始写出一个表达式然后意识到我想在其上操作一个函数的情况下使用的。因此,无需将光标一直移回输入f@exprf[expr],我可以简单地完成输入我想要的内容,然后使用expr//f

        例子:

        Plot[Sin[x],{x,0,Pi}]
        %//Export["test.pdf",#]&
        

        图形传递给导出函数,保存为test.pdf

        【讨论】:

          【解决方案7】:

          由于您的问题已经得到了很好的答案,我只想对用法进行说明。

          三种表达方式

          Sin[x]
          Sin@x
          x // Sin
          

          是等价的。

          尽管据我所知,最后两个不能用于具有多个参数的函数。所以

          Plot[Sin[x], {x, 0, Pi}]   
          

          如果没有像

          这样的技巧,就不能以前缀或后缀表示法调用
          Sin[x] // Plot[#, {x, 0, Pi}] &  
          

          Plot[#, {x, 0, Pi}] &@Sin[x]
          

          前缀表示法通常在使用Sin@xSort@list 等简单函数时出现,而后缀的大多数使用都涉及诸如“现在对我得到的东西做任何事情”这样的推理,例如

          (Sin@x+ ...) // Timing
          

          您决定计算什么,然后您还希望它计时。

          还有一点:

          在幕后确实还有更多,因为每个功能结构的优先级不同,但我认为这是一个更深层次的主题,您必须先进行一些实验,然后才能了解细节。

          【讨论】:

          • 顺便说一句,我倾向于广泛使用后缀形式,我将每个后续函数视为先前结果产生的数据的转换。这有时会导致代码效率低下,有时需要进行大量卷积(例如,f[x] // g /@ #& 并不完全简单)。但是,我发现它有助于我思考需要执行的各个步骤,尽管当需要多个执行路径来解决问题时,它确实需要一些思考(和扭曲)。
          猜你喜欢
          • 2010-11-11
          • 1970-01-01
          • 1970-01-01
          • 2011-08-12
          • 2017-06-11
          • 2018-03-05
          • 2023-03-27
          • 2016-08-17
          • 2010-12-28
          相关资源
          最近更新 更多