Mathematica中的#含义是什么?

use*_*089 16 syntax wolfram-mathematica

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

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

谢谢.

Dr.*_*ius 32

它是变量的占位符.

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

  f = #^2 & 
Run Code Online (Sandbox Code Playgroud)

&#将变量"泵入"#符号.这对于配对和#,当你有嵌套函数时很重要.

  In: f[2]  
  Out: 4   
Run Code Online (Sandbox Code Playgroud)

如果你有一个在两个vars上运行的功能,你可以这样做:

 f = #1 + #2 &
Run Code Online (Sandbox Code Playgroud)

所以

  In: f[3,4]  
  Out: 7  
Run Code Online (Sandbox Code Playgroud)

或者您可能在列表中运行功能,因此:

 f = #[[1]] + #[[2]] &
Run Code Online (Sandbox Code Playgroud)

所以:

  In: f[{3,4}]
  Out: 7
Run Code Online (Sandbox Code Playgroud)

关于 Root[]

根据Mathematica的帮助:

Root[f,k] represents the exact kth root of the polynomial equation f[x]==0  .
Run Code Online (Sandbox Code Playgroud)

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

        f = #^2 - 1 &

In[4]:= Root[f, 1]  

Out[4]= -1  (* as we expected ! *)
Run Code Online (Sandbox Code Playgroud)

In[5]:= Root[f, 2]  

Out[5]= 1  (* Thanks God ! *)
Run Code Online (Sandbox Code Playgroud)

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

         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]
Run Code Online (Sandbox Code Playgroud)

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

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

Out[7]= -2.13224
Run Code Online (Sandbox Code Playgroud)

所以,Root[f,k]对于多项式的根来说,是一种速记写法,其次序> 3.我从一个关于激进的解释和找到多项式根源中拯救你......我认为更好


Yar*_*tov 10

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

  1. 复制表达式
  2. 做TreeForm [保持[粘贴表达式]].
  3. 鼠标悬停在树的部分以识别有问题的语法,在本例中为Slot
  4. 输入"?Slot"

  • 或者更简单:1)突出显示2)按F1 3)利润? (6认同)

Gre*_*per 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等,如果您将它超过1点的参数.

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

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

Sort[ myData , Median[#1] > Median[#2]& ]
Run Code Online (Sandbox Code Playgroud)

快速提示,如果您将功能应用于单个值,它可能看起来更整洁,更清晰,并且使用更少的键入来@代替[],这实际上意味着Prefix.不要与Map (/@)或混淆Apply(@@).上面的命令变为:

Sort[ myData , Median@#1 > Median@#2 & ] 
Run Code Online (Sandbox Code Playgroud)

你可以这样链@:Reverse@Sort@DeleteDuplicates[...]


Sou*_*sou 4

#1表示纯函数中的第一个参数。

如果有多个参数#1, #2, #3... 则指第一个、第二个、第三个参数,依此类推。