有没有一种简单的方法可以在 Maple 表达式中仅将(部分(导数保持在某个顺序?例如,假设我把
f(x) := (g(x)+diff(g(x),x))*(h(x)+diff(h(x),x))
f'
的完整表达式是
f'=g'h+gh'+2g'h'+gh''+g''h+g''h'+g'h''
如果我只保留我有的一阶导数的项
f'=g'h+gh'+2g'h'.
有没有办法先在枫树上做
diff(f(x),x)
然后通过某种命令删除所有高于 1 阶的导数(在这种情况下(?
一种解决方案涉及转换为导数的运算符表示法。
f := (g(x)+diff(g(x),x))*(h(x)+diff(h(x),x));
Df := convert( diff(f, x), D);
df := eval(Df,D@@2=0);
convert(df,diff);
这里的关键是,在算子形式中,很容易掌握二阶导数,因为它们是由D@@2算子作用的。 如果将该运算符替换为 0 运算符,则会将所有二阶导数项映射到零。 如果要删除高阶项,则必须执行以下操作:
eval(Df,{seq(D@@i=0, i=2..5)});
如果你想用偏导数来做到这一点。
f := (g(x, y)+diff(g(x, y), x))*(h(x, y)+diff(h(x, y), x));
Df := convert(diff(f, x), D);
df := eval(Df, D[1, 1] = 0);
convert(df, diff);
在分部的上下文中,微分运算符是用序列索引的,而不是组合的。 所以在这里,D[1,2] 将是部分 wrt x,后跟部分 wrt y。