# Define product derivative

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 *)

-
As an aside, what is the product derivative used for? –  rcollyer Oct 22 '12 at 3:29
@rcollyer: see the preprint by Mike Spivey that I linked to. See also this, this, and this. –  Guess who it is. Oct 22 '12 at 11:17
@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 ... –  rcollyer Oct 22 '12 at 20:19

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]

-
Thanks. I guess I should have tried to find an explicit definition first. –  Navin Oct 21 '12 at 19:42
Is there a way to make this return a function? For example, ProductD[Sin[x], {x, 1}][4] should evaluate to E^Cot[4]. –  Navin Oct 21 '12 at 19:53
I've added an implementation of ProductDerivative[] now. –  Guess who it is. Oct 22 '12 at 2:19

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

-
Thanks, this seems to work. –  Navin Oct 21 '12 at 19:43