鉴于
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 –