在多重导数中执行替换的问题

时间:2011-01-27 00:35:47

标签: wolfram-mathematica

我在Mathematica中遇到一个基本问题,这让我困惑了一段时间。我想取x*Exp[t*x]的m'阶导数,然后在x=0进行评估。但以下不正确。请分享您的想法。

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

错误意味着什么

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

编辑:我之前的示例(D[Exp[t*x], {x, m}] /. x -> 0)非常简单。所以我变得更难了。 :) 我的问题是:如何强制它先进行衍生评估,然后进行替换。

4 个答案:

答案 0 :(得分:4)

正如其他人所指出的那样,(一般而言)Mathematica不知道如何将衍生物取任意次数,即使您指定该数字是正整数。 这意味着D[expr,{x,m}]命令仍然未被评估,然后当您设置x->0时,它现在尝试采用相对于常量的导数,这会产生错误消息。

一般来说,你想要的是在零处评估的函数的m阶导数。 这可以写成

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

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

然后你得到系数表

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}

但是更多的想法表明你真的只想要系列中的第m个术语,所以SeriesCoefficient做你想要的:

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

最终输出是第m个导数的一般形式。 PieceWise并不是必需的,因为表达式实际上适用于所有非负整数。

答案 1 :(得分:1)

我假设你想要该函数的第m个偏导数w.r.t. X。 t变量表明它可能是第二个独立变量。

没有Mathematica很容易做到:D [Exp [t * x],{x,m}] = t ^ m Exp [t * x]

如果你在x逼近零时评估极限,你会得到t ^ m,因为lim(Exp [t * x])= 1.对吗?


更新:让我们试试x * exp(t * x)

第m个偏导数w.r.t. x很容易来自Wolfram Alpha

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

因此,如果x = 0,则得到m * t ^(m-1)。

Q.E.D。

答案 2 :(得分:1)

感谢您的更新,很清楚这里发生了什么。 Mathematica实际上并没有计算导数;然后,您将x替换为0,最后会看到这个:

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

显然会遇到问题,因为0不是变量。

答案 3 :(得分:0)

让我们看看发生了什么更多细节:

当你写:

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

你的 x 中包含表达

Cos[x]

这是因为{x,1}部分中的 x 与Sin [x]部分中的 x 匹配,因此Mma 理解 x ,不会充当该语句的 Block 变量,将其含义与您在程序中的任何其他 x 隔离,因此它实现了链规则。例如:

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

请参阅?那很完美!但是有代价。

价格是导数内的符号被评估为衍生物,这会破坏你的代码。

当然,有很多技巧可以解决这个问题。有人已经提到了。从我的观点来看,一个明确的方法来解决正在发生的事情:

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

输出:

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

HTH!