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

从Maple表达式中删除高阶导数,maple,Maple,有没有一种简单的方法可以使(偏)导数在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阶的导数(在这种情况下)?一种解决方案涉及将导数转

有没有一种简单的方法可以使(偏)导数在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。

谢谢!有可能把它推广到偏导数吗?我是新来枫树的,如果问题很明显,我很抱歉。你好!我在Math SE上发布了一个问题,详细说明了我想做的事情:我在这个答案中添加了一些关于部分的注释。希望足够让你开始。