替换时如何告诉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
是完成工作的正确工具,因此了解其中的区别很重要。
我正在尝试在 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
是完成工作的正确工具,因此了解其中的区别很重要。