【问题标题】:What does # mean in Mathematica?# 在 Mathematica 中是什么意思?
【发布时间】:2010-11-24 22:20:25
【问题描述】:

有谁知道在 Mathematica 中例如 Root[-1 - 2 #1 - #1^2 + 2 #1^3 + #1^4 &, 1] 中的 # 是什么意思?

那么Root[-1 - 2 #1 - #1^2 + 2 #1^3 + #1^4 &, 1]到底是什么意思?

谢谢。

【问题讨论】:

    标签: syntax wolfram-mathematica


    【解决方案1】:

    它是一个变量的占位符。

    如果你想定义一个 y(x)=x^2 函数,你可以这样做:

      f = #^2 & 
    

    & 将变量“注入”到# 符号中。当您有嵌套函数时,这对于配对 & 和 # 很重要。

      In: f[2]  
      Out: 4   
    

    如果你有一个函数在两个变量上运行,你可以这样做:

     f = #1 + #2 &
    

    所以

      In: f[3,4]  
      Out: 7  
    

    或者你可能有一个在列表中运行的函数,所以:

     f = #[[1]] + #[[2]] &
    

    所以:

      In: f[{3,4}]
      Out: 7
    

    关于Root[]

    根据 Mathematica 帮助:

    Root[f,k] represents the exact kth root of the polynomial equation f[x]==0  .
    

    所以,如果你的 poly 是 x^2 - 1,使用我们上面看到的:

            f = #^2 - 1 &
    
    In[4]:= Root[f, 1]  
    
    Out[4]= -1  (* as we expected ! *)
    

    In[5]:= Root[f, 2]  
    
    Out[5]= 1  (* Thanks God ! *)
    

    但如果我们尝试使用更高阶的多项式:

             f = -1 - 2 #1 - #1^2 + 2 #1^3 + #1^4 &  
    
    In[6]:= Root[f, 1]
    
    Out[6]= Root[-1 - 2 #1 - #1^2 + 2 #1^3 + #1^4 &, 1]
    

    这意味着 Mathematica 不知道如何计算符号结果。它只是多项式的第一个根。但它确实知道它的数值是多少:

    In[7]:= N@Root[-1 - 2 #1 - #1^2 + 2 #1^3 + #1^4 &, 1]
    
    Out[7]= -2.13224
    

    所以,Root[f,k] 是一种关于阶数 > 3 的多项式根的速记写作。我让你免于解释根式和找到多项式根……我认为这样会更好

    【讨论】:

      【解决方案2】:

      如何找出 Mathematica 中任何内置语法的含义:

      1. 复制表达式
      2. 执行 TreeForm[Hold[在此处粘贴表达式]]。
      3. 将鼠标悬停在树的某些部分以识别有问题的语法,在本例中为 Slot
      4. 输入“?槽”

      【讨论】:

      • 或者更简单:1) 突出显示 2) 按 F1 3) 利润?
      • 这可能在大多数情况下都有效。 TreeFor 更好的一个例子是当上下文很重要时,例如,如果您在函数末尾选择 &,它将为您提供 BitAnd、And 和 Function 的帮助
      【解决方案3】:

      符号#(如上所述)用于表示纯函数中的“变量到这里”(传统开发人员的“闭包”)。最后必须始终跟在 & 后面。

      最好的例子是:f[x_]:=x+5。这将创建一个延迟集,任何时候将值作为函数参数传递给符号引用 f,该值将被赋予一个局部上下文函数特定名称 x(不影响 @987654326 的全局定义@,如果有的话)。然后表达式x+5 将使用这个新变量/值进行评估。上述过程需要初始化符号f,创建局部变量x,并且表达式x+5 永久保存在内存中,除非您将其清除。

      旁注: f=5f[x_]:=5 都使用“符号”ff 可以称为函数,当使用方括号提取其值时,f[x_] 可以与f[x_,y_] 和平共存,不会相互覆盖。发送一个参数时使用一个,发送两个参数时使用另一个。

      有时您只需要一个快速函数,不需要定义它并让它挂起。因此,(someValue + 5) 变为 (#+5)&,其中 & 表示“我是一个纯函数,并且将与你发送给我的任何内容一起工作”,而 # 表示“我是参数(或参数列表)被发送到纯函数”。如果您发送的参数超过 1 个,也可以使用 #1#2#3 等。

      常用的多参数纯函数示例:

      假设mydata 是一个列表列表,您需要按列表的中位数对其进行排序(例如美国各个城市的房价数据):

      Sort[ myData , Median[#1] > Median[#2]& ]
      

      快速提示,如果您将函数应用于单个值,它可能看起来更整洁,并且使用@ 而不是[] 使用更少的输入,这实际上意味着Prefix。不要与Map (/@)Apply(@@) 混淆。上面的命令就变成了:

      Sort[ myData , Median@#1 > Median@#2 & ] 
      

      您可以像这样链接@Reverse@Sort@DeleteDuplicates[...]

      【讨论】:

      • 这是一个很好的解释。谢谢你。 (不过,链接到有关@ 不同含义的更多信息可能是个好主意;如果您要提到有几个令人困惑的不同含义,而且对于谷歌很难理解的东西……;)
      【解决方案4】:

      #1 表示pure function 中的第一个参数。

      如果您有多个参数#1#2#3...请参阅第一个、第二个、第三个参数等等。

      【讨论】:

      • 亲爱的苏菲安,谢谢。那么 Root[-1 - 2 #1 - #1^2 + 2 #1^3 + #1^4 &, 1] 到底是什么意思呢?
      猜你喜欢
      • 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
      相关资源
      最近更新 更多