Qiang Li
Qiang Li

Reputation: 10865

Problem performing a substitution in a multiple derivative

I have a basic problem in Mathematica which has puzzled me for a while. I want to take the m'th derivative of x*Exp[t*x], then evaluate this at x=0. But the following does not work correct. Please share your thoughts.

D[x*Exp[t*x], {x, m}] /. x -> 0

Also what does the error mean

General::ivar: 0 is not a valid variable.

Edit: my previous example (D[Exp[t*x], {x, m}] /. x -> 0) was trivial. So I made it harder. :) My question is: how to force it to do the derivative evaluation first, then do substitution.

Upvotes: 6

Views: 3948

Answers (4)

Dr. belisarius
Dr. belisarius

Reputation: 61046

Let's see what is happening with a little more detail:

When you write:

D[Sin[x], {x, 1}]  

you get an expression in with x in it

Cos[x]

That is because the x in the {x,1} part matches the x in the Sin[x] part, and so Mma understands that you want to make the derivative for that symbol.
But this x, does NOT act as a Block variable for that statement, isolating its meaning from any other x you have in your program, so it enables the chain rule. For example:

In[85]:= z=x^2;
D[Sin[z],{x,1}]
Out[86]= 2 x Cos[x^2]  

See? That's perfect! But there is a price.

The price is that the symbols inside the derivative get evaluated as the derivative is taken, and that is spoiling your code.

Of course there are a lot of tricks to get around this. Some have already been mentioned. From my point of view, one clear way to undertand what is happening is:

f[x_] := x*Exp[t*x];
g[y_, m_] := D[f[x], {x, m}] /. x -> y;
{g[p, 2], g[0, 1]}

Out:

{2 E^(p t) t + E^(p t) p t^2, 1}

HTH!

Upvotes: 1

duffymo
duffymo

Reputation: 308986

I'll assume that you want the mth partial derivative of that function w.r.t. x. The t variable suggests that it might be a second independent variable.

It's easy enough to do without Mathematica: D[Exp[t*x], {x, m}] = t^m Exp[t*x]

And if you evaluate the limit as x approaches zero, you get t^m, since lim(Exp[t*x]) = 1. Right?


Update: Let's try it for x*exp(t*x)

the mth partial derivative w.r.t. x is easily had from Wolfram Alpha:

t^(m-1)*exp(t*x)(t*x + m)

So if x = 0 you get m*t^(m-1).

Q.E.D.

Upvotes: 1

Simon
Simon

Reputation: 14731

As pointed out by others, (in general) Mathematica does not know how to take the derivative an arbitrary number of times, even if you specify that number is a positive integer. This means that the D[expr,{x,m}] command remains unevaluated and then when you set x->0, it's now trying to take the derivative with respect to a constant, which yields the error message.

In general, what you want is the m'th derivative of the function evaluated at zero. This can be written as

Derivative[m][Function[x,x Exp[t x]]][0]

or

Derivative[m][# Exp[t #]&][0]

You then get the table of coefficients

In[2]:= Table[%, {m, 1, 10}]
Out[2]= {1, 2 t, 3 t^2, 4 t^3, 5 t^4, 6 t^5, 7 t^6, 8 t^7, 9 t^8, 10 t^9}

But a little more thought shows that you really just want the m'th term in the series, so SeriesCoefficient does what you want:

In[3]:= SeriesCoefficient[x*Exp[t*x], {x, 0, m}]
Out[3]= Piecewise[{{t^(-1 + m)/(-1 + m)!, m >= 1}}, 0]

The final output is the general form of the m'th derivative. The PieceWise is not really necessary, since the expression actually holds for all non-negative integers.

Upvotes: 5

Cascabel
Cascabel

Reputation: 497412

Thanks to your update, it's clear what's happening here. Mathematica doesn't actually calculate the derivative; you then replace x with 0, and it ends up looking at this:

D[Exp[t*0],{0,m}]

which obviously is going to run into problems, since 0 isn't a variable.

Upvotes: 1

Related Questions