替换时如何告诉maple零的导数为零?

How to tell maple that derivative of zero is zero when substituting?

我正在尝试在 maple 中使用 subs 将较长公式中的导数替换为 0:

subs(diff(u(r),r) = 0, formula);

似乎如果 formula 只涉及 u(r) 的一阶导数,这正如我预期的那样有效。例如,

formula := diff(u(r),r);
subs(diff(u(r),r) = 0, formula);
                                        0

但是,如果 formula 涉及二阶导数,我会得到一个 diff(0,r) 结果,即使使用 simplify:

也不会消失
formula := diff(u(r),r,r);
subs(diff(u(r),r) = 0, formula);
                                         d
                                         -- 0
                                         dr

(我的实际 formula 很长,涉及两个变量的一阶和二阶导数。我知道关于某个变量的所有导数都是 0,我想删除它们)。

一种方法是将 simplify 命令与所谓的侧关系一起使用。

formula := diff(u(r),r,r) + 3*cos(diff(u(r),r,r))
           + diff(u(r),r) + x*(4 - diff(u(r),r,r,r)):

simplify( formula, { diff(u(r),r) = 0 } );

                               3 + 4 x

formula2 := diff(u(r,s),s,s) + 3*cos(diff(u(r,s),r,r))
            + diff(u(r,s),r) + x*(4 - diff(u(r,s),r,s,r,r)):

simplify( formula2, { diff(u(r,s),r) = 0 } );

                          /  2         \      
                          | d          |      
                      3 + |---- u(r, s)| + 4 x
                          |   2        |      
                          \ ds         /      

[edit] 我忘了回答你关于为什么你之前得到 d/dr 0 的附加问题。答案是因为您使用了 subs 而不是 2 参数 eval。前者只做句法替换,不对结果求值。后者是人们在不知不觉中经常需要的,并且确实"evaluation at a (particular) point".

formulaA := diff(u(r),r,r):

subs(diff(u(r),r) = 0, formulaA);

                          d   
                         --- 0
                          dr  

%; # does an evaluation

                           0

eval(formulaA, diff(u(r),r) = 0);

                           0

formulaB := diff(u(r,s),s,r,r,s):

eval(formulaB, diff(u(r,s),r) = 0);

                           0

您可以看到,对这些 d/dr 0 对象的任何求值都将产生 0。但使用 2 参数求值通常比 eval(subs(...)) 更好。人们使用 subs 是因为它听起来像 "substitution",我猜,或者他们看到其他人使用它。有时 subs 是完成工作的正确工具,因此了解其中的区别很重要。