9
$\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$
3
  • $\begingroup$ As an aside, what is the product derivative used for? $\endgroup$
    – rcollyer
    Oct 22, 2012 at 3:29
  • 1
    $\begingroup$ @rcollyer: see the preprint by Mike Spivey that I linked to. See also this, this, and this. $\endgroup$ Oct 22, 2012 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, 2012 at 20:19

2 Answers 2

13
$\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$
3
  • $\begingroup$ Thanks. I guess I should have tried to find an explicit definition first. $\endgroup$
    – Navin
    Oct 21, 2012 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, 2012 at 19:53
  • 1
    $\begingroup$ I've added an implementation of ProductDerivative[] now. $\endgroup$ Oct 22, 2012 at 2:19
7
$\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$
0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

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