8
$\begingroup$

I'm new to Wolfram Mathematica so the the question may seem quite simple.

I define the following function:

d[i_, j_] := 
 Sum[α^(i + j - 2 k) (-1)^(-k) Sqrt[i!] Sqrt[j!]/((i - k)! (j - k)! k!), {k, 0, Min[i, j]}]

Then, when I set α = 0 and try to evaluate d[0, 0] I get the following warning:

Power::indet: Indeterminate expression 0^0 encountered.

How can I input the condition Power[0,0]=1 in my function ?

Please help!

$\endgroup$
  • $\begingroup$ Could add alpha as a symbolic parameter, and eval symbolically before substituting a value. d[i_, j_, alf_] := Module[{aa}, Sum[aa^(i + j - 2 k)*(-1)^(-k)*Sqrt[i!] *Sqrt[j!]/((i - k)!*(j - k)!*k!), {k, 0, Min[i, j]}] /. aa->alf] In[16]:= d[0,0,0] Out[16]= 1 $\endgroup$ – Daniel Lichtblau Sep 24 '14 at 20:37
  • $\begingroup$ (8403626) $\endgroup$ – Mr.Wizard Oct 27 '14 at 6:19
11
$\begingroup$

Although it is best to avoid this when possible, using the undocumented function Internal`InheritedBlock you can temporarily add a rule to Power:

α = 0;

d[i_, j_] := Internal`InheritedBlock[{Power},
  Unprotect[Power];
  Power[0, 0] = 1;
  Sum[α^(i + j - 2 k) (-1)^(-k) Sqrt[i!] Sqrt[j!]/((i - k)! (j - k)! k!), {k, 0, 
    Min[i, j]}]
 ]

d[0, 0]
1

Be aware that user rules for System functions may be ignored when working with packed arrays. See: Block attributes of Equal

Generally better is to use a proxy replacement for Power with your own behavior:

Attributes[myPower] = {Listable};
myPower[0, 0] = 1;
myPower[x_, y_] := x^y;

d[i_, j_] :=
 Sum[myPower[α, (i + j - 2 k)] (-1)^(-k) Sqrt[
    i!] Sqrt[j!]/((i - k)! (j - k)! k!), {k, 0, Min[i, j]}]

The Listable attribute makes sure that zeroes in vectors and matrices are also handled in the way we defined:

In[2]:= myPower[0, {{1, 1}, {1, 0}}]

Out[2]= {{0, 0}, {0, 1}}
$\endgroup$
  • $\begingroup$ The OP's coding gives me 1 for d[0,0]. Maybe she or he only had a dirty kernel? $\endgroup$ – eldo Sep 24 '14 at 20:33
  • $\begingroup$ @eldo I think you forgot to also start with \[Alpha] = 0 as specified. $\endgroup$ – Mr.Wizard Sep 24 '14 at 20:37
  • $\begingroup$ Thank you so much for the best answer! $\endgroup$ – Suro Sep 24 '14 at 20:50
  • $\begingroup$ Since the second part of your post seems to be the definite answer (and the safest) for these kinds of questions (this and this), I've included the more general case. Hope you don't mind it! $\endgroup$ – István Zachar Oct 31 '18 at 19:42
  • $\begingroup$ Also, do you have any idea how to make myPower compilable or use it in a CompiledFunction? $\endgroup$ – István Zachar Oct 31 '18 at 20:18
0
$\begingroup$

Here is a variation of @Daniel's answer from his comment:

α = 0;
Block[{α}, d[0, 0]]

1

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.