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は、2 つの変数の 1 次導関数と 2 次導関数を含む非常に長いものです。特定の変数に関する導関数はすべて 0 であることを知っており、それらを削除したいと考えています)。

4

1 に答える 1

2

1 つの方法は、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、 2-argument の代わりに使用したためです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

これらのオブジェクトを評価すると 0 が生成されることがわかります。d/dr 0しかし、2 引数の eval を使用するよりも、多くの場合、より良い方法ですeval(subs(...))subs「代用」のように聞こえるか、他の人がそれを使用しているのを見て、人々はそれを使用します。が仕事に適したツールである場合もsubsあるため、違いを知ることが重要です。

于 2015-09-10T05:15:14.760 に答える