【发布时间】: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
有谁知道在 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
它是一个变量的占位符。
如果你想定义一个 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 的多项式根的速记写作。我让你免于解释根式和找到多项式根……我认为这样会更好
【讨论】:
如何找出 Mathematica 中任何内置语法的含义:
【讨论】:
符号#(如上所述)用于表示纯函数中的“变量到这里”(传统开发人员的“闭包”)。最后必须始终跟在 & 后面。
最好的例子是:f[x_]:=x+5。这将创建一个延迟集,任何时候将值作为函数参数传递给符号引用 f,该值将被赋予一个局部上下文函数特定名称 x(不影响 @987654326 的全局定义@,如果有的话)。然后表达式x+5 将使用这个新变量/值进行评估。上述过程需要初始化符号f,创建局部变量x,并且表达式x+5 永久保存在内存中,除非您将其清除。
旁注: f=5 和 f[x_]:=5 都使用“符号”f。 f 可以称为函数,当使用方括号提取其值时,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[...]
【讨论】:
@ 不同含义的更多信息可能是个好主意;如果您要提到有几个令人困惑的不同含义,而且对于谷歌很难理解的东西……;)
#1 表示pure function 中的第一个参数。
如果您有多个参数#1、#2、#3...请参阅第一个、第二个、第三个参数等等。
【讨论】: