鑑於
f = (#1^#2) &
有一種方法,以限定上述這樣「F」,如果#1 和#2都爲0,那麼純函數「F」的值應爲1?
,這樣,當我寫
f[0,0]
它將返回1,而不是不確定?
順便說一句,我知道我可以寫
f = (If[#1 == 0 && #2 == 0, 1, #1^#2]) &
但我想一般規則或模式,所以我沒有寫這些檢查,因爲純函數可以更復雜(許多#它),而且我不想爲可能出現的每個可能的0^0做這些'如果其他'檢查。
感謝
更新:
可能是我要澄清更多的爲什麼我這樣做。
我有一個用戶從菜單中選擇一個功能。功能是
a x^n0 + b y^n1 + c x^n2 y^n3
凡在上文中,參數「N0」,「N1」,「N2」和「N3」也可以從滑塊選擇,這些可以是零。
現在,'x'和'y'是座標,也可以是零。
因此,評估上述函數時可能會遇到0^0。
有很多情況下需要檢查,當我自己做。例如,'y^n3'可以是0^0而不是另一個,y^n1可以是0^0而不是另一個,x^n2 y^n3可以既是0^0也不是其他等等。 ,所以我必須定義許多不同的案例。 (我認爲有16種可能的情況)。
我試圖避免這種情況。如果我可以告訴Mathematica在較低的水平上將0^0替換爲1,那麼生活會更簡單。
更新12/7/11 感謝大家的回答和評論,所有人都非常有用,解決了我的問題,我從他們身上學到了東西。
我選擇了Leonid答案,因爲它允許我用最少的額外編碼來解決我的問題。
這裏是一個小例子
Manipulate[Row[{format[x, n], "=", eval[x, n]}],
{{x, 0.0, "x="}, 0, 1, .1, Appearance -> "Labeled"},
{{n, 0.0, "n="}, 0, 1, .1, Appearance -> "Labeled"},
Initialization :>
(
format[x_, n_] := HoldForm["(" x ")"^n];
eval = Unevaluated[#1^#2] /. HoldPattern[0.0^0.0] :> 0.0 &
)
]
我使用實數到處在我的代碼(它是一個數值PDE解算器),所以這就是爲什麼我在上面使用0.0和不爲0^0,以適應與我在做什麼。
您確定要將它們評估爲1而不是0嗎?該符號使得它看起來好像您正在評估指數是非負整數或可能是實數的多項式。連續性考慮將表明,在這種情況下,值0可能更可取。 –
@DanielLichtblau,好的,謝謝,將0^0替換爲0而不是1。但是,無論是哪種情況,如果我使用IF THEN ELSE(或者通過爲每個可能情況定義許多不同簽名來實現其功能)仍然有16種不同情況。希望有一種方法可以將這個短路,但告訴Mathematica用X代替0^0,其中X是正確的選擇(0或1,因爲它可能是)。 – Nasser
另請參閱本數學小組討論:http://mathforum.org/kb/message.jspa?messageID=6577581&tstart=0以及關於程序員SE的這個問題:http://programmers.stackexchange.com/questions/9788/how- do-language-x-handle-indeterminate-forms-like-00 –