Mathematica中的#代表什么?

16
有人知道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]具体是指什么呢?
谢谢。
4个回答

32

它是一个变量的占位符。

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

  f = #^2 & 

“pumps in”将变量插入#号中。当您有嵌套函数时,这对于配对&和#非常重要。

  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  .

所以,如果你的多项式是 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次多项式根的速记符号。我认为不需要解释根式和寻找多项式根的过程,这样更好理解。


10

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

  1. 复制表达式
  2. 执行TreeForm[Hold[粘贴表达式在这里]]。
  3. 将鼠标悬停在树的部分上,以识别所讨论的语法,例如Slot
  4. 输入“?Slot”

6
或许更简单的方法是:1)选中文本;2)按下F1键;3)获得收益? - Janus
那可能大部分时间都有效。TreeFor更好的一个例子是当上下文很重要时,例如如果您在函数末尾选择&,它将为您提供BitAnd、And和Function的帮助。 - Yaroslav Bulatov

7
符号 #(如上所述)在纯函数(对于传统开发人员来说是“闭包”)中用于表示“一个变量放在这里”。它必须始终在末尾后跟 &
最好的例子是这个:f[x_]:=x+5。这将创建一个延迟设置,任何时候将值作为函数参数传递到符号引用 f 中,该值将被赋予局部上下文特定名称 x(不影响全局定义的 x,如果有的话)。然后使用这个新的变量/值来计算表达式 x+5。上述过程要求初始化符号 f,创建局部变量 x,并永久地将表达式 x+5 保存在内存中,除非您清除它。 附注:f=5f[x_]:=5 都可以使用“符号”f。当使用方括号提取其值时,f 可以被称为函数,而 f[x_] 可以与 f[x_,y_] 和平共处,而不会互相覆盖。其中一个将在发送一个参数时使用,另一个将在发送 2 个参数时使用。
有时您只需要一个快速函数,不需要定义它并让它悬空。因此,(someValue + 5) 变成了 (#+5)&,其中 & 表示“我是纯函数,并将与您发送给我的任何内容一起使用”,而 # 表示“我是参数(或参数列表),已发送到纯函数”。如果您发送多个参数,则还可以使用 #1#2#3 等。
常用的多参数纯函数示例:
假设 mydata 是一个列表,其中包含需要按列表中位数排序的列表(例如来自美国各城市的房价数据):
Sort[ myData , Median[#1] > Median[#2]& ]

快速提示:如果您要对一个单一的值应用一个函数,使用@而不是[]可能会更加整洁和简洁,且打字更少,这实际上意味着前缀。 不要与Map(/@)Apply(@@)混淆。以上命令则变为:

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

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

这是一个很好的解释。谢谢。(提供更多关于@不同含义的信息链接可能是个好主意,如果你要提到有几个令人困惑的不同含义,而且对于一些难以通过谷歌搜索到的东西来说,进一步了解会更好... ;)) - ELLIOTTCABLE

4
#1 表示一个 纯函数 中的第一个参数。
如果有多个参数,#1#2#3... 分别表示第一个、第二个、第三个参数等。

亲爱的Soufiane,谢谢。那么Root[-1 - 2 #1 - #1^2 + 2 #1^3 + #1^4 &, 1]确切意思是什么? - user376089

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接