2016-12-18 8 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

問題はacの正確な部分式である場合subst(a=b, c)(または同等subst(b, a, c)が)のみの置換を行うことができるということです。

ratsubst(参照)は、aが正確なサブ表現ではない場合がありますが、この場合は動作していないようです。

しかし、あなたはもう一方の方程式から1つの方程式を引くだけで、あなたが望む結果を得ることができると思います。 (a=b) - (c=d)a - c = b - dであることに注意してください。 diff演算子を適用するために、別のステップ(%i7)を実行したことにも注意してください。また、%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)はCにBを置換します。 3つの引数を使用すると、最初のsubstは次のように解釈されます。subst (V[b] + \epsilon*V[r],V[r], f_contin);

2番目のsubstは恐らくsubst (0,diff (V[b]*r*\rho, r),%)と解釈され、何も置換されません。あなたは何を何に置き換えたいですか?

+0

私は%o6にbaseで与えられた式を代入したいと思います。つまり、最後から2番目の式でd/dr(rho * Vb * r)をゼロに設定することです。 – Rhinocerotidae

+0

subst(a、b、c)も機能しません。 – Rhinocerotidae

+0

実際には、 'subst'は、最初の式が式の場合に2つの引数を持つことができます。 'subst(foo = bar、myexpr)'です。問題は、OPによって与えられた式が、副次表現として 'base'の左辺を含んでいないことです。 –