我在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
)非常简单。所以我变得更难了。 :)
我的问题是:如何强制它先进行衍生评估,然后进行替换。
答案 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!