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