2016-12-18 2 views
0

Ich versuche, eine Differentialgleichung durch Substitution in maxima zu vereinfachen. Die Substitution scheint jedoch nicht zu funktionieren.Maxima CAS - Substitution

Hier ist mein Code:

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); 

Die letzte Substitution hat nicht funktioniert. Was mache ich hier falsch?

Aus Gründen der Klarheit füge ich einen Screenshot hier: enter image description here

Antwort

2

Das Problem ist, dass subst(a=b, c) (oder äquivalent subst(b, a, c)) nur Substitutionen machen kann, wenn a eine exakte subexpression von c ist.

ratsubst (die sehen) kann einige Fälle behandeln, wenn a keine exakte Subexpression ist, aber in diesem Fall scheint es nicht zu funktionieren.

Aber ich denke, Sie können das gewünschte Ergebnis erhalten, indem Sie nur die eine Gleichung von der anderen abziehen. Beachten Sie, dass (a=b) - (c=d)a - c = b - d ergibt. Beachten Sie auch, dass ich einen weiteren Schritt (in% i7) eingefügt habe, um den Operator diff anzuwenden. Außerdem habe ich% o7 um r multipliziert, um so etwas wie base zu erhalten.

(%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

Die Funktion subst (a, b, c) ersetzt a für b in c. Es verwendet 3 Argumente, Ihre erste Subst funktioniert, weil es als subst (V[b] + \epsilon*V[r],V[r], f_contin);

interpretiert Ihre zweite subst wird wahrscheinlich interpretiert als subst (0,diff (V[b]*r*\rho, r),%) dafür nichts ersetzt wird. Was willst du ersetzen?

+0

Ich möchte den Ausdruck in der Basis in% o6 ersetzen. Das heißt, d/dr (rho * Vb * r) im vorletzten Ausdruck auf Null zu setzen. – Rhinocerotidae

+0

Sogar subst (a, b, c) funktioniert nicht. – Rhinocerotidae

+0

Eigentlich kann "subst" zwei Argumente haben, wenn das erste eine Gleichung ist, z. 'subst (foo = bar, myexpr)'. Es stellt sich heraus, dass der von OP gegebene Ausdruck die linke Seite von "base" nicht als Teilausdruck enthält. –