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

时间:2017-03-28 20:37:39

标签: 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'.

Maple有没有办法先做

diff(f(x),x)

然后通过某些命令删除高于1的所有导数(在这种情况下)?

1 个答案:

答案 0 :(得分: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);

在partials的上下文中,微分运算符用序列而不是组合索引。所以在这里,D [1,2]将是部分wrt x,后面是部分wrt y。