7
$\begingroup$

How do I define the $n$th product derivative of a function in Mathematica?

The first product derivative $f^\ast$ of a function $f$ is $$ f^\ast(x)=\exp\left(\frac{f^\prime(x)}{f(x)}\right) $$ The $n$th product derivative is the result of applying this operator $n$ times.

This is my attempt at a recursive definition:

In[111]:= Clear[prodd]
prodd[f_, n_] := prodd[e^(f'/f), n - 1]; prodd[f_, 0] = f

Out[112]= f


In[113]:= prodd[E^x, 1](* Should print E *)

Out[113]= e^(E^-x Derivative[1][(E^x)])

In[114]:= prodd[E^E^x, 1](* Should print E^E^x *)

Out[114]= e^(E^-E^x Derivative[1][(E^E^x)])

In[114]:= prodd[E^x, 2](* Should print 1 *)
$\endgroup$
  • $\begingroup$ As an aside, what is the product derivative used for? $\endgroup$ – rcollyer Oct 22 '12 at 3:29
  • 1
    $\begingroup$ @rcollyer: see the preprint by Mike Spivey that I linked to. See also this, this, and this. $\endgroup$ – J. M. is in limbo Oct 22 '12 at 11:17
  • 1
    $\begingroup$ @J.M. the preprint is awesome. I like the exponential approximations, and it makes me wonder what else I've missed in calculus, or was ignored ... $\endgroup$ – rcollyer Oct 22 '12 at 20:19
11
$\begingroup$

From Corollary 1 of this preprint by Mike Spivey, there is a simple nonrecursive definition for the product derivative:

ProductD[f_, x_] := ProductD[f, {x, 1}];
ProductD[f_, {x_, k_Integer?NonNegative}] := Exp[D[Log[f], {x, k}]]

Verify a few identities:

ProductD[f[x] g[x], x] == ProductD[f[x], x] ProductD[g[x], x] // Simplify
   True

ProductD[x^a, x] == Exp[a/x]
   True

ProductD[Exp[Exp[x]], x] == Exp[Exp[x]]
   True

ProductD[x^x, x] == E x
   True

Here's the corresponding multiplicative calculus analog of Derivative[]:

ProductDerivative[0] = Identity;
ProductDerivative[k_Integer?Positive][f_] := 
             Derivative[k][Composition[Log, f]] /. Function[ff_] :> Function[Evaluate[E^ff]]

To use the example given by the OP in the comments:

ProductDerivative[1][Sin][4]
   E^Cot[4]

ProductDerivative[1][Sin[#] &][4]
   E^Cot[4]

ProductDerivative[1][Function[u, Sin[u]]][4]
   E^Cot[4]
$\endgroup$
  • $\begingroup$ Thanks. I guess I should have tried to find an explicit definition first. $\endgroup$ – Navin Oct 21 '12 at 19:42
  • $\begingroup$ Is there a way to make this return a function? For example, ProductD[Sin[x], {x, 1}][4] should evaluate to E^Cot[4]. $\endgroup$ – Navin Oct 21 '12 at 19:53
  • 1
    $\begingroup$ I've added an implementation of ProductDerivative[] now. $\endgroup$ – J. M. is in limbo Oct 22 '12 at 2:19
6
$\begingroup$

e is not the same as E, and f' expects f to be a function but E^x is just an expression, so I use D[f, x] instead:

Clear[prodd]
prodd[f_, n_] := prodd[E^(D[f, x]/f), n - 1];
prodd[f_, 0] := f

prodd[E^x, 1](*Should print E*)

prodd[E^E^x, 1](*Should print E^E^x*)

prodd[E^x, 2](*Should print 1*)
E

E^E^x

1

You could also write:

Clear[prodd]

prodd[f_, n_] := Nest[E^(D[#, x]/#) &, f, n]

If you are going to use x in this manner I recommend using \[FormalX] instead to prevent failure if you accidentally assign a value to x.

You might also consider something like this:

Clear[prodd]

prodd[f_, n_] := Nest[E^(#'[\[FormalX]]/#[\[FormalX]]) &, f, n]

prodd[E^# &, 1]

prodd[E^E^# &, 1]

prodd[E^# &, 2]
E

E^E^x

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.