# 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:= Clear[prodd]
prodd[f_, n_] := prodd[e^(f'/f), n - 1]; prodd[f_, 0] = f

Out= f

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

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

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

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

In:= 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. – J. M. is in limbo 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 = 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[Sin]
E^Cot

ProductDerivative[Sin[#] &]
E^Cot

ProductDerivative[Function[u, Sin[u]]]
E^Cot

• 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}] should evaluate to E^Cot. – Navin Oct 21 '12 at 19:53
• I've added an implementation of ProductDerivative[] now. – J. M. is in limbo 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