[英]What does # mean in Mathematica?
有沒有人知道什么#in例如Root[-1 - 2 #1 - #1^2 + 2 #1^3 + #1^4 &, 1]
在Mathematica中意味着什么?
那么Root[-1 - 2 #1 - #1^2 + 2 #1^3 + #1^4 &, 1]
究竟是什么意思?
謝謝。
它是變量的占位符。
如果你想定義ay(x)= x ^ 2函數,你可以這樣做:
f = #^2 &
&#將變量“泵入”#符號。 這對於配對和#,當你有嵌套函數時很重要。
In: f[2]
Out: 4
如果你有一個在兩個vars上運行的功能,你可以這樣做:
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]
是一種用於> 0的多項式根的速記書寫。我從一個關於自由基的解釋中找到你並找到多項式根...我認為更好
如何找出Mathematica中任何內置語法的含義:
符號#
(如上所述)用於表示純函數中的“變量在這里”(傳統開發人員的“閉包”)。 最后必須始終跟隨&
。
最好的例子是: f[x_]:=x+5
。 這就形成了一個延遲集,一個值被傳遞到符號引用任何時候f
的功能參數,該值將被賦予的本地環境特定功能名稱x
(不影響全局定義x
,如果有一個)。 然后使用這個新的變量/值來計算表達式x+5
。 上述過程要求初始化符號f
,創建局部變量x
,並且表達式x+5
永久保存在內存中,除非您清除它。
旁注: f=5
且f[x_]:=5
均使用“符號” f
。 f
可以被稱為函數,當使用方括號來提取其值時, f[x_]
可以與f[x_,y_]
和平共存而不會相互覆蓋。 一個參數發送時使用一個,發送2個參數時使用另一個參數。
有時你只需要一個快速的功能,不需要定義它並讓它掛起。 所以, (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
表示純函數中的第一個參數。
如果您有多個參數#1
, #2
, #3
...請參閱第一個,第二個,第三個參數,依此類推。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.