开发者

Problem performing a substitution in a multiple derivative

开发者 https://www.devze.com 2023-02-07 10:58 出处:网络
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 cor

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.


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.


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.


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.


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!

0

精彩评论

暂无评论...
验证码 换一张
取 消