0

我试图使用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,我想删除它们)。

回答

2

一种方法是使用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  /  

[编辑]我忘了回答你,为什么你以前有d/dr 0产生额外的查询。答案是因为您使用subs而不是双参数eval。前者纯粹是语法替换,并没有评估结果。后者是人们在不知情的情况下经常需要的那种,并且“在(特定)点进行评估”。

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参数比它是做eval(subs(...))。人们使用subs,因为它听起来像“替代”,我想,或者他们看到别人使用它。有时subs是适合工作的正确工具,因此了解其差异很重要。

+0

这适用于我。我仍然想知道这些d/dr 0从哪里来,以及我将如何摆脱它们。 –

+0

好的,我添加了一个关于'subs'的注释。 – acer