[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18. Differentiation


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.1 Functions and Variables for Differentiation

関数: antid (expr, x, u(x))

2要素リストを返します。 そのリストから exprxに関する不定積分(antiderivative)が構成できます。 式 exprは未知の関数 uとその導関数を含むかもしれません。

2要素リスト Lantidの戻り値だとします。 L[1] + 'integrate (L[2], x)exprxに関する不定積分です。

antidが完全に成功した時、戻り値の二番目の要素は0です。 そうでないなら、二番目の要素は0ではなく、一番目の要素は0でないか0かです。 もし antidが全く進展できないなら、 一番目の要素が0で、二番目は0ではないです。

load ("antid")はこの関数をロードします。 antidパッケージは関数 nonzeroandfreeoflinearも定義します。

antidは以下のように antidiffと関係します。 2要素リスト Lantidの戻り値とします。 antidiffの戻り値は L[1] + 'integrate (L[2], x)に等しいです。 ここで xは積分変数です。

例:

 
(%i1) load ("antid")$
(%i2) expr: exp (z(x)) * diff (z(x), x) * y(x);
                            z(x)  d
(%o2)                y(x) %e     (-- (z(x)))
                                  dx
(%i3) a1: antid (expr, x, z(x));
                       z(x)      z(x)  d
(%o3)          [y(x) %e    , - %e     (-- (y(x)))]
                                       dx
(%i4) a2: antidiff (expr, x, z(x));
                            /
                     z(x)   [   z(x)  d
(%o4)         y(x) %e     - I %e     (-- (y(x))) dx
                            ]         dx
                            /
(%i5) a2 - (first (a1) + 'integrate (second (a1), x));
(%o5)                           0
(%i6) antid (expr, x, y(x));
                             z(x)  d
(%o6)             [0, y(x) %e     (-- (z(x)))]
                                   dx
(%i7) antidiff (expr, x, y(x));
                  /
                  [        z(x)  d
(%o7)             I y(x) %e     (-- (z(x))) dx
                  ]              dx
                  /

Categories:  Integral calculus

関数: antidiff (expr, x, u(x))

exprxに関する不定積分(antiderivative)を返します。 式 exprは未知の関数 uとその導関数を含むかもしれません。

antidiffが完全に成功した時、 結果の式は積分記号を含みません(すなわち integrate名詞を含みません)。 そうでないなら、 antidiffは部分的にまたは完全に積分記号内にある式を返します。 もし antidiffが全く進展できないなら、戻り値はそっくり積分記号内にあります。

load ("antid")はこの関数をロードします。 antidパッケージは関数 nonzeroandfreeoflinearも定義します。

antidiffは以下のように antidと関係します。 2要素リスト Lantidの戻り値とします。 antidiffの戻り値は L[1] + 'integrate (L[2], x)に等しいです。 ここで xは積分変数です。

例:

 
(%i1) load ("antid")$
(%i2) expr: exp (z(x)) * diff (z(x), x) * y(x);
                            z(x)  d
(%o2)                y(x) %e     (-- (z(x)))
                                  dx
(%i3) a1: antid (expr, x, z(x));
                       z(x)      z(x)  d
(%o3)          [y(x) %e    , - %e     (-- (y(x)))]
                                       dx
(%i4) a2: antidiff (expr, x, z(x));
                            /
                     z(x)   [   z(x)  d
(%o4)         y(x) %e     - I %e     (-- (y(x))) dx
                            ]         dx
                            /
(%i5) a2 - (first (a1) + 'integrate (second (a1), x));
(%o5)                           0
(%i6) antid (expr, x, y(x));
                             z(x)  d
(%o6)             [0, y(x) %e     (-- (z(x)))]
                                   dx
(%i7) antidiff (expr, x, y(x));
                  /
                  [        z(x)  d
(%o7)             I y(x) %e     (-- (z(x))) dx
                  ]              dx
                  /

Categories:  Integral calculus

関数: at  
    at (expr, [eqn_1, …, eqn_n])  
    at (expr, eqn)

等式のリスト [eqn_1, ..., eqn_n] もしくは1つの等式 eqnの中で指定されたように値を仮定された変数を使って 式 exprを評価します。

もし値が指定される変数のいずれかに部分式が依存するけれど 指定のatvalueがなく他の方法で評価できないなら、 atの名詞形を返し、2次元形式で表示します。

atは多重代入を並列に実行します。

atvalueも参照してください。 代入を実行する他の関数に関しては substevも参照してください。

例:

 
(%i1) atvalue (f(x,y), [x = 0, y = 1], a^2);
                                2
(%o1)                          a
(%i2) atvalue ('diff (f(x,y), x), x = 0, 1 + y);
(%o2)                        @2 + 1
(%i3) printprops (all, atvalue);
                                !
                  d             !
                 --- (f(@1, @2))!       = @2 + 1
                 d@1            !
                                !@1 = 0

                                     2
                          f(0, 1) = a

(%o3)                         done
(%i4) diff (4*f(x, y)^2 - u(x, y)^2, x);
                  d                          d
(%o4)  8 f(x, y) (-- (f(x, y))) - 2 u(x, y) (-- (u(x, y)))
                  dx                         dx
(%i5) at (%, [x = 0, y = 1]);
                                            !
                 2              d           !
(%o5)        16 a  - 2 u(0, 1) (-- (u(x, 1))!     )
                                dx          !
                                            !x = 0

yは微分変数として使われないので、 最後の行で yxと異なる扱いだということに注意してください。

subst, at, evの違いは以下の例で見ることができます:

 
(%i1) e1:I(t)=C*diff(U(t),t)$
(%i2) e2:U(t)=L*diff(I(t),t)$
(%i3) at(e1,e2);
                               !
                      d        !
(%o3)       I(t) = C (-- (U(t))!                    )
                      dt       !          d
                               !U(t) = L (-- (I(t)))
                                          dt
(%i4) subst(e2,e1);
                            d      d
(%o4)             I(t) = C (-- (L (-- (I(t)))))
                            dt     dt
(%i5) ev(e1,e2,diff);
                                  2
                                 d
(%o5)                I(t) = C L (--- (I(t)))
                                   2
                                 dt

Property: atomgrad

atomgradは式のアトムの勾配プロパティです。 このプロパティは gradefで割り当てられます。

Categories:  Differential calculus

関数: atvalue  
    atvalue (expr, [x_1 = a_1, …, x_m = a_m], c)  
    atvalue (expr, x_1 = a_1, c)

cを点 x = aexprに割り当てます。 典型的にはこのメカニズムが境界値を確立します。

exprは関数引数が明示的に現れる関数評価 f(x_1, ..., x_m)か導関数 diff (f(x_1, ..., x_m), x_1, n_1, ..., x_n, n_m) です。 n_ix_iに関する微分の階数です。

等式のリスト [x_1 = a_1, ..., x_m = a_m] はatvalueを確立する点を与えます。 もし1変数 x_1なら、 リストとしてくくることなしに等式1つを与えます。

printprops ([f_1, f_2, ...], atvalue)は 関数 f_1, f_2, ...のatvalueを atvalueコールで指定されたように表示します。

printprops (f, atvalue)は 1関数 fのatvalueを表示します。 printprops (all, atvalue)は atvaluesが定義された関数すべての atvalueを表示します。

atvaluesが表示される時、 シンボル @1, @2, … は 変数 x_1, x_2, …を表します。

atvalueは引数を評価します。 atvaluec, atvalueそのものを返します。

atも参照してください。

例:

 
(%i1) atvalue (f(x,y), [x = 0, y = 1], a^2);
                                2
(%o1)                          a
(%i2) atvalue ('diff (f(x,y), x), x = 0, 1 + y);
(%o2)                        @2 + 1
(%i3) printprops (all, atvalue);
                                !
                  d             !
                 --- (f(@1, @2))!       = @2 + 1
                 d@1            !
                                !@1 = 0

                                     2
                          f(0, 1) = a

(%o3)                         done
(%i4) diff (4*f(x,y)^2 - u(x,y)^2, x);
                  d                          d
(%o4)  8 f(x, y) (-- (f(x, y))) - 2 u(x, y) (-- (u(x, y)))
                  dx                         dx
(%i5) at (%, [x = 0, y = 1]);
                                            !
                 2              d           !
(%o5)        16 a  - 2 u(0, 1) (-- (u(x, 1))!     )
                                dx          !
                                            !x = 0

関数: cartan

微分形式の外積代数はエリーカルタンによって開発された微分幾何の基本ツールであり、 偏微分方程式論で有用な応用があります。 cartanパッケージは 演算子 ~ (ウェッジ積)と | (形式とベクトルの縮約)と合わせて 関数 ext_difflie_diffを実装します。 例と一緒にこれらのコマンドの簡潔な記述を見るには demo (tensor)を実行してください。

cartanは F.B. EstabrookとH.D. Wahlquistによって実装されました。

Categories:  Differential geometry

関数: del (x)

del (x)は変数 xの微分を表します。

もし独立変数を指定しないなら、 diffは delを含む式を返します。 この場合、戻り値は「全微分」と呼ばれるものです。

例:

 
(%i1) diff (log (x));
                             del(x)
(%o1)                        ------
                               x
(%i2) diff (exp (x*y));
                     x y              x y
(%o2)            x %e    del(y) + y %e    del(x)
(%i3) diff (x*y*z);
(%o3)         x y del(z) + x z del(y) + y z del(x)

Categories:  Differential calculus

関数: delta (t)

Diracのデルタ関数

今のところ、laplaceだけが deltaを知っています。

例:

 
(%i1) laplace (delta (t - a) * sin(b*t), t, s);
Is  a  positive, negative, or zero?

p;
                                   - a s
(%o1)                   sin(a b) %e

システム変数: dependencies
関数: dependencies (f_1, …, f_n)

変数 dependenciesは、 dependsや関数 dependencies, gradefが割り当てた関数依存を持つアトムのリストです。 dependenciesリストは累積的です: dependsdependencies, gradefをコールする毎に上乗せの項目を追加します。 dependenciesのデフォルト値は []です。

関数 dependencies(f_1, …, f_n)f_1, …, f_ndependenciesリストに追加します。 ここで、 f_1, …, f_nは形式 f(x_1, …, x_m)の式であり、 x_1, …, x_mは任意の数の引数です。

dependencies(f(x_1, …, x_m))depends(f, [x_1, …, x_m])と等価です。

dependsgradefを参照してください。

 
(%i1) dependencies;
(%o1)                          []
(%i2) depends (foo, [bar, baz]);
(%o2)                    [foo(bar, baz)]
(%i3) depends ([g, h], [a, b, c]);
(%o3)               [g(a, b, c), h(a, b, c)]
(%i4) dependencies;
(%o4)        [foo(bar, baz), g(a, b, c), h(a, b, c)]
(%i5) dependencies (quux (x, y), mumble (u));
(%o5)                [quux(x, y), mumble(u)]
(%i6) dependencies;
(%o6) [foo(bar, baz), g(a, b, c), h(a, b, c), quux(x, y),
                                                       mumble(u)]
(%i7) remove (quux, dependency);
(%o7)                         done
(%i8) dependencies;
(%o8)  [foo(bar, baz), g(a, b, c), h(a, b, c), mumble(u)]

関数: depends (f_1, x_1, ..., f_n, x_n)

導関数を計算するために変数の間の関数依存を宣言します。 宣言された依存関係がないと diff (f, x)の結果はゼロです。 もし depends (f, x)を宣言したら、 diff (f, x)の結果はシンボリックな導関数(すなわち diff名詞)です。

それぞれの引数 f_1, x_1などは、 変数や配列の名前、または名前のリストをとり得ます。 f_i (多分ただ1つの要素)のすべての要素は、 x_i (多分ただ1つの要素)のすべての要素に依存するように宣言されます。 もしいくつかの f_iが配列名だったり配列名を含むなら、 配列の要素すべては x_iに依存します。

diffdependsが確立した間接的依存関係を認識し、 これらの場合に連鎖規則を適用します。

remove (f, dependency)fに関して宣言された依存関係すべてを取り除きます。

dependsは確立した依存関係のリストを返します。 依存関係はグローバル変数 dependenciesに追加されます。 dependsは引数を評価します。

diffdependsが確立する依存関係を認識する唯一の Maximaコマンドです。 他の関数( integrate, laplaceなど)は 引数が明示的に示す依存関係だけを認識します。 例えば、integrateは、 integrate (f(x), x)のように陽に表現されないなら fxへの依存性を認識しません。

depends(f, [x_1, …, x_n])dependencies(f(x_1, …, x_n))と等価です。

 
(%i1) depends ([f, g], x);
(%o1)                     [f(x), g(x)]
(%i2) depends ([r, s], [u, v, w]);
(%o2)               [r(u, v, w), s(u, v, w)]
(%i3) depends (u, t);
(%o3)                        [u(t)]
(%i4) dependencies;
(%o4)      [f(x), g(x), r(u, v, w), s(u, v, w), u(t)]
(%i5) diff (r.s, u);
                         dr           ds
(%o5)                    -- . s + r . --
                         du           du
 
(%i6) diff (r.s, t);
                      dr du           ds du
(%o6)                 -- -- . s + r . -- --
                      du dt           du dt
 
(%i7) remove (r, dependency);
(%o7)                         done
(%i8) diff (r.s, t);
                                ds du
(%o8)                       r . -- --
                                du dt

オプション変数: derivabbrev

デフォルト値: false

derivabbrevtrueの時、 シンボリックな導関数(すなわち diff名詞)が下付き添字として表示されます。 そうでないなら導関数はライプニッツ表記 dy/dxで表示されます。

関数: derivdegree (expr, y, x)

exprに現れる独立変数 xに関する従属変数 yの微分の最高階数を返します。

例:

 
(%i1) 'diff (y, x, 2) + 'diff (y, z, 3) + 'diff (y, x) * x^2;
                         3     2
                        d y   d y    2 dy
(%o1)                   --- + --- + x  --
                          3     2      dx
                        dz    dx
(%i2) derivdegree (%, y, x);
(%o2)                           2

関数: derivlist (var_1, …, var_k)

evコマンド内にて示された変数に関する微分だけを生じさせます。

Categories:  Differential calculus · Evaluation

オプション変数: derivsubst

デフォルト値: false

derivsubsttrueの時、 subst (x, 'diff (y, t), 'diff (y, t, 2)) のような非構文法的代入は 'diff (x, t)をもらします。

関数: diff  
    diff (expr, x_1, n_1, …, x_m, n_m)  
    diff (expr, x, n)  
    diff (expr, x)  
    diff (expr)

exprの中のすべての変数の中のいくつかに関する exprの導関数すなわち微分を返します。

diff (expr, x, n)xに関する exprn階微分を返します。

diff (expr, x_1, n_1, ..., x_m, n_m)x_1, ..., x_mに関する exprの偏微分を返します。 これは diff (... (diff (expr, x_m, n_m) ...), x_1, n_1)と同値です。

diff (expr, x)は変数 xに関する exprの1階微分を返します。

diff (expr)exprの全微分を返します。 すなわち、それぞれの変数に関する exprの微分に変数それぞれの微分 delを掛けたものの和を返します。 delの更なる整理は提供されません。

微分方程式を記述する時などいくつかの文脈で diffの名詞形式が要求されます。 これらの場合、 diffは微分が実行される代わりに名詞形式を出力するために ('diffとして)クォートされるかもしれません。

derivabbrevtrueの時、導関数は下付き添字として表示されます。 そうでないなら、導関数はライブニツ記法の dy/dxで表示されます。

例:

 
(%i1) diff (exp (f(x)), x, 2);
                     2
              f(x)  d               f(x)  d         2
(%o1)       %e     (--- (f(x))) + %e     (-- (f(x)))
                      2                   dx
                    dx
(%i2) derivabbrev: true$
(%i3) 'integrate (f(x, y), y, g(x), h(x));
                         h(x)
                        /
                        [
(%o3)                   I     f(x, y) dy
                        ]
                        /
                         g(x)
(%i4) diff (%, x);
       h(x)
      /
      [
(%o4) I     f(x, y)  dy + f(x, h(x)) h(x)  - f(x, g(x)) g(x)
      ]            x                     x                  x
      /
       g(x)

テンソルパッケージのために以下の変更が取り込まれています:

(1) exprの中の任意の添字付きオブジェクトの導関数は 追加された引数として添えられた変数 x_iを持ちます。 そして導関数の添字はすべてソートされます。

(2) x_iは 1から変数 dimension [デフォルト値: 4]の値までの整数を取ります。 これにより、例えば [x, y, z, t]など座標名のリストして設定されたリスト coordinatesx_i番目のメンバーに関する微分が実行されます。 もし coordinatesがアトムの変数にバインドされているなら、 x_iで下付き添字された変数が、微分の変数として使われます。 これにより、座標名や X[1], X[2], …のような下付き添字付き名前の配列が使えることになります。 もし coordinatesに値が割り当てられていないなら、変数は上の(1)のように扱われます。

Categories:  Differential calculus

特殊シンボル: diff

evコールで evflagとして diffが存在する時、 exprの中で表現されたすべての微分が実行されます。

関数: dscalar (f)

スカラーのダランベルシアンをスカラー関数 fに適用します。

load ("ctensor")はこの関数をロードします。

関数: express (expr)

名詞形の微分演算子を偏微分を使った式に展開します。 expressは演算子 grad, div, curl, laplacianを認識します。 expressは外積 ~も展開します。

ev関数コールかコマンドラインに diffを含ませることで、 expressの戻り値の中のシンボリックな導関数(すなわち diff名詞)を評価することができます。 この文脈では diffevfunとして振る舞います。

load ("vect")はこの関数をロードします。

例:

 
(%i1) load ("vect")$
(%i2) grad (x^2 + y^2 + z^2);
                              2    2    2
(%o2)                  grad (z  + y  + x )
(%i3) express (%);
       d    2    2    2   d    2    2    2   d    2    2    2
(%o3) [-- (z  + y  + x ), -- (z  + y  + x ), -- (z  + y  + x )]
       dx                 dy                 dz
(%i4) ev (%, diff);
(%o4)                    [2 x, 2 y, 2 z]
(%i5) div ([x^2, y^2, z^2]);
                              2   2   2
(%o5)                   div [x , y , z ]
(%i6) express (%);
                   d    2    d    2    d    2
(%o6)              -- (z ) + -- (y ) + -- (x )
                   dz        dy        dx
(%i7) ev (%, diff);
(%o7)                    2 z + 2 y + 2 x
(%i8) curl ([x^2, y^2, z^2]);
                               2   2   2
(%o8)                   curl [x , y , z ]
(%i9) express (%);
       d    2    d    2   d    2    d    2   d    2    d    2
(%o9) [-- (z ) - -- (y ), -- (x ) - -- (z ), -- (y ) - -- (x )]
       dy        dz       dz        dx       dx        dy
(%i10) ev (%, diff);
(%o10)                      [0, 0, 0]
(%i11) laplacian (x^2 * y^2 * z^2);
                                  2  2  2
(%o11)                laplacian (x  y  z )
(%i12) express (%);
         2                2                2
        d     2  2  2    d     2  2  2    d     2  2  2
(%o12)  --- (x  y  z ) + --- (x  y  z ) + --- (x  y  z )
          2                2                2
        dz               dy               dx
(%i13) ev (%, diff);
                      2  2      2  2      2  2
(%o13)             2 y  z  + 2 x  z  + 2 x  y
(%i14) [a, b, c] ~ [x, y, z];
(%o14)                [a, b, c] ~ [x, y, z]
(%i15) express (%);
(%o15)          [b z - c y, c x - a z, a y - b x]

Categories:  Differential calculus · Vectors · Operators

関数: gradef  
    gradef (f(x_1, …, x_n), g_1, …, g_m)  
    gradef (a, x, expr)

関数 fまたは変数 aの偏微分(すなわち、勾配の成分)を定義します。

gradef (f(x_1, ..., x_n), g_1, ..., g_m)df/dx_ig_iとして定義します。 ここで g_iは式です; g_iは関数コールでもあり得ますが関数名ではありません。 偏微分の数 mは引数の数 nよりも小さいかもしれません。 その場合、微分は x_1から x_mまでのみに関して定義されます。

gradef (a, x, expr)は変数 axに関する微分を exprと定義します。 これは (depends (a, x)を介して) axへの依存性も確立します。

最初の引数 f(x_1, ..., x_n)または aはクォートされますが、 残りの引数 g_1, ..., g_mは評価されます。 gradefは偏微分が定義される関数や変数を返します。

gradefは Maximaの組み込み関数の微分を再定義できます。 例えば、gradef (sin(x), sqrt (1 - sin(x)^2))sinの微分を再定義します。

gradefは添字付き関数の偏微分を定義できません。

printprops ([f_1, ..., f_n], gradef)は関数 f_1, ..., f_nの偏微分を gradefで定義されたように表示します。

printprops ([a_n, ..., a_n], atomgrad)は変数 a_n, ..., a_nの偏微分を gradefで定義されたように表示します。

gradefsgradefが偏微分を定義した関数のリストです。 gradefsgradefが偏微分を定義した変数は含みません。

例えば、関数は明示的は知られていませんが一階微分が知られていて、 高階の微分を得ることが望まれる時、勾配が必要とされます。

システム変数: gradefs

デフォルト値: []

gradefsgradefが偏微分を定義した関数のリストです。 gradefsgradefが偏微分を定義した変数は含みません。

関数: laplace (expr, t, s)

変数 tに関するラブラス変換 exprを計算し、パラメータ sに変換しようとします。

laplaceexprの中で derivative, integrate, sum, iltはもちろん関数 delta, exp, log, sin, cos, sinh, cosh, erfを認識します。 もし laplaceが変換を見つけられなかったら、 関数 specintをコールします。 specintはベッセル関数 bessel_j, bessel_i, …のような 特殊関数を含む式のラプラス変換を見つけることができ、 unit_step関数を扱うことができます。 specintも参照してください。

もし specintも解を見つけられないなら、 名詞 laplaceを返します。

exprは従属変数の atvalueが使われている線形定数係数微分方程式であり得ます。 要求の atvalueは 変換を計算する前でも後でも供給できます。 初期条件をゼロ点で指定しなければいけないので、 もし他に課される境界条件を持つなら 一般解にそれらを課すことができます。 それらに関して一般解を解き、それらの値を代入し返すことによって定数を消去できます。

laplaceは、形式 integrate (f(x) * g(t - x), x, 0, t)の畳み込み積分を認識します; 他の種類の畳み込みは認識されません。

関数関係は exprで明示的に表現しなければいけません; dependsで確立した暗黙の関係は認識されません。 例えば、もし fxyに依存するなら、 f (x, y)exprの中に現れなければいけません。

逆ラプラス変換 iltも参照してください。

例:

 
(%i1) laplace (exp (2*t + a) * sin(t) * t, t, s);
                            a
                          %e  (2 s - 4)
(%o1)                    ---------------
                           2           2
                         (s  - 4 s + 5)
(%i2) laplace ('diff (f (x), x), x, s);
(%o2)             s laplace(f(x), x, s) - f(0)
(%i3) diff (diff (delta (t), t), t);
                          2
                         d
(%o3)                    --- (delta(t))
                           2
                         dt
(%i4) laplace (%, t, s);
                            !
               d            !         2
(%o4)        - -- (delta(t))!      + s  - delta(0) s
               dt           !
                            !t = 0
(%i5) assume(a>0)$
(%i6) laplace(gamma_incomplete(a,t),t,s),gamma_expand:true;
                                              - a - 1
                         gamma(a)   gamma(a) s
(%o6)                    -------- - -----------------
                            s            1     a
                                        (- + 1)
                                         s
(%i7) factor(laplace(gamma_incomplete(1/2,t),t,s));
                                              s + 1
                      sqrt(%pi) (sqrt(s) sqrt(-----) - 1)
                                                s
(%o7)                 -----------------------------------
                                3/2      s + 1
                               s    sqrt(-----)
                                           s
(%i8) assume(exp(%pi*s)>1)$
(%i9) laplace(sum((-1)^n*unit_step(t-n*%pi)*sin(t),n,0,inf),t,s),
         simpsum;
                         %i                         %i
              ------------------------ - ------------------------
                              - %pi s                    - %pi s
              (s + %i) (1 - %e       )   (s - %i) (1 - %e       )
(%o9)         ---------------------------------------------------
                                       2
(%i9) factor(%);
                                      %pi s
                                    %e
(%o9)                   -------------------------------
                                             %pi s
                        (s - %i) (s + %i) (%e      - 1)


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by 市川雄二 on June, 5 2017 using texi2html 1.76.