从 Maple 表达式中删除高阶导数

Remove higher order derivatives from Maple expression

是否有一种简单的方法可以仅在 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'.

Maple有没有办法先做

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。