2016-12-18 42 views
0

我正試圖通過替代maxima來簡化一個微分方程。但是,替代似乎沒有奏效。Maxima CAS - 取代

這裏是我的代碼:

depends (\rho,[t, r, \theta, z]); depends (V, [t, r, \theta, z]); 
f_contin : diff (\rho, t) + diff (\rho*r*V[r], r)*(1/r) = 0; 
base : diff (V[b]*r*\rho, r) = 0; 
V_sub : V[r] = V[b] + \epsilon*V[r]; 
subst (V_sub, f_contin); 
subst (base, %o6); 

最後一個換人沒有奏效。我在這裏做錯了什麼?

爲清楚起見我添加了一個截圖在這裏: enter image description here

回答

2

問題是subst(a=b, c)(或等效subst(b, a, c))只能在ac的確切子表達式時才能進行替換。

ratsubst(它參見)可以處理一些情況下,當a不是一個確切的subexepression,但在這種情況下,它似乎並沒有工作。

但我想你可以通過從另一個減去一個方程來得到你想要的結果。請注意0​​收益率a - c = b - d。另請注意,我已經在另一個步驟(在%i7中)應用diff運算符。此外,我已乘以%o7乘以r得到類似base

(%i1) depends (\rho,[t, r, \theta, z]); depends (V, [t, r, \theta, z]); 
(%o1)      [rho(t, r, theta, z)] 
(%o2)       [V(t, r, theta, z)] 
(%i3) f_contin : diff (\rho, t) + diff (\rho*r*V[r], r)*(1/r) = 0; 
          drho  d 
         r V ---- + r (-- (V)) rho + V rho 
       drho  r dr  dr r   r 
(%o3)   ---- + ------------------------------------ = 0 
       dt      r 
(%i4) base : diff (V[b]*r*\rho, r) = 0; 
         drho d 
(%o4)    V r ---- + (-- (V)) r rho + V rho = 0 
        b dr  dr b   b 
(%i5) V_sub : V[r] = V[b] + \epsilon*V[r]; 
(%o5)      V = epsilon V + V 
           r   r b 
(%i6) subst (V_sub, f_contin); 
     drho      drho  d 
(%o6) ---- + (r (epsilon V + V) ---- + r (-- (epsilon V + V)) rho 
     dt     r b dr  dr   r b 
               + (epsilon V + V) rho)/r = 0 
                  r b 
(%i7) %o6, nouns; 
     drho      drho    d   d 
(%o7) ---- + (r (epsilon V + V) ---- + r (epsilon (-- (V)) + -- (V)) rho 
     dt     r b dr    dr r  dr b 
               + (epsilon V + V) rho)/r = 0 
                  r b 
(%i8) expand (r*%o7 - base); 
     drho    drho    d 
(%o8) r ---- + epsilon r V ---- + epsilon r (-- (V)) rho + epsilon V rho = 0 
     dt    r dr    dr r     r 
-1

功能SUBST(A,B,C)代用品對於b在C。它使用3個參數,因爲它的解釋爲subst (V[b] + \epsilon*V[r],V[r], f_contin);

您的第二個subst可能被解釋爲subst (0,diff (V[b]*r*\rho, r),%)因此沒有被替換。你想替代什麼?

+0

我想用base中給出的表達式替換%o6。即在倒數第二個表達式中將d/dr(rho * Vb * r)設置爲零。 – Rhinocerotidae

+0

即使subst(a,b,c)也不起作用。 – Rhinocerotidae

+0

實際上,當第一個是方程時,「subst」可以有2個參數,例如, 'subst(foo = bar,myexpr)'。原來問題是OP給出的表達式不包含'base'的左邊作爲子表達式。 –