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

50. diag


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

50.1 Functions and Variables for diag

関数: diag (lm)

lmの要素のブロックサムである行列を構成します。 lmの要素は行列だと仮定します; もし要素がスカラーなら、1x1の行列として扱います。

lmの要素それぞれが正方なら、結果の行列は正方になります。

例:

 
(%i1) load("diag")$

(%i2) a1:matrix([1,2,3],[0,4,5],[0,0,6])$

(%i3) a2:matrix([1,1],[1,0])$

(%i4) diag([a1,x,a2]);
                   [ 1  2  3  0  0  0 ]
                   [                  ]
                   [ 0  4  5  0  0  0 ]
                   [                  ]
                   [ 0  0  6  0  0  0 ]
(%o4)              [                  ]
                   [ 0  0  0  x  0  0 ]
                   [                  ]
                   [ 0  0  0  0  1  1 ]
                   [                  ]
                   [ 0  0  0  0  1  0 ]
(%i5) diag ([matrix([1,2]), 3]);
                        [ 1  2  0 ]
(%o5)                   [         ]
                        [ 0  0  3 ]

この関数を使うためには最初に load("diag")と書いてください。

Categories:  Matrices · Share packages · Package diag

関数: JF (lambda,n)

固有値 lambdaを持つ次数 nの Jordan細胞を返します。

例:

 
(%i1) load("diag")$

(%i2) JF(2,5);
                    [ 2  1  0  0  0 ]
                    [               ]
                    [ 0  2  1  0  0 ]
                    [               ]
(%o2)               [ 0  0  2  1  0 ]
                    [               ]
                    [ 0  0  0  2  1 ]
                    [               ]
                    [ 0  0  0  0  2 ]
(%i3) JF(3,2);
                         [ 3  1 ]
(%o3)                    [      ]
                         [ 0  3 ]

この関数を使うためには最初に load("diag")と書いてください。

Categories:  Package diag

関数: jordan (mat)

行列 matの特別な形式でリストにエンコードされた Jordan形を返します。 対応する行列を得るには、 jordanの出力を引数として使って関数 dispJordanをコールしてください。

戻り値のリストの要素はそれ自身リストです。 それぞれの一番目の要素は matの固有値です。 残りの要素はこの固有値に関するJordanブロックの長さ(正の整数)です。 これらの整数は降順で並びます。 固有値は繰り返されません。

関数 dispJordan, minimalPoly, ModeMatrixは、 jordanを呼び出した出力を引数として期待します。 もしこの引数を、 jordanを呼び出さず手で構成するなら、 それぞれの固有値が一度だけ現れること、ブロックサイズが降順で並ぶことを保証しなくてはいけません。 そうでなければ、関数は正しくない答えを返すかもしれません。

例:

 
(%i1) load("diag")$
(%i2) A: matrix([2,0,0,0,0,0,0,0],
                [1,2,0,0,0,0,0,0],
                [-4,1,2,0,0,0,0,0],
                [2,0,0,2,0,0,0,0],
                [-7,2,0,0,2,0,0,0],
                [9,0,-2,0,1,2,0,0],
                [-34,7,1,-2,-1,1,2,0],
                [145,-17,-16,3,9,-2,0,3])$
(%i3) jordan (A);
(%o3)                [[2, 3, 3, 1], [3, 1]]
(%i4) dispJordan (%);
                   [ 2  1  0  0  0  0  0  0 ]
                   [                        ]
                   [ 0  2  1  0  0  0  0  0 ]
                   [                        ]
                   [ 0  0  2  0  0  0  0  0 ]
                   [                        ]
                   [ 0  0  0  2  1  0  0  0 ]
(%o4)              [                        ]
                   [ 0  0  0  0  2  1  0  0 ]
                   [                        ]
                   [ 0  0  0  0  0  2  0  0 ]
                   [                        ]
                   [ 0  0  0  0  0  0  2  0 ]
                   [                        ]
                   [ 0  0  0  0  0  0  0  3 ]

この関数を使うためには最初に load("diag")と書いてください。 dispJordanminimalPolyも参照してください。

Categories:  Package diag

関数: dispJordan (l)

lで与えられた固有値と重複度のリストに対応した行列をJordan標準形で返します。 このリストはは関数 jordanが与える形式でなければいけません。 この形式の詳細は jordanを参照してください。

例:

 
(%i1) load("diag")$

(%i2) b1:matrix([0,0,1,1,1],
                [0,0,0,1,1],
                [0,0,0,0,1],
                [0,0,0,0,0],
                [0,0,0,0,0])$

(%i3) jordan(b1);
(%o3)                  [[0, 3, 2]]
(%i4) dispJordan(%);
                    [ 0  1  0  0  0 ]
                    [               ]
                    [ 0  0  1  0  0 ]
                    [               ]
(%o4)               [ 0  0  0  0  0 ]
                    [               ]
                    [ 0  0  0  0  1 ]
                    [               ]
                    [ 0  0  0  0  0 ]

この関数を使うためには最初に load("diag")と書いてください。 jordanminimalPolyも参照してください。

Categories:  Package diag

関数: minimalPoly (l)

Maximaリストlで与えられたコードに関連付けられた最小多項式を返します。 lは関数 jordanが与える出力です。 この形式の詳細については jordanを参照してください。

例:

 
(%i1) load("diag")$

(%i2) a:matrix([2,1,2,0],
               [-2,2,1,2],
               [-2,-1,-1,1],
               [3,1,2,-1])$

(%i3) jordan(a);
(%o3)               [[- 1, 1], [1, 3]]
(%i4) minimalPoly(%);
                            3
(%o4)                (x - 1)  (x + 1)

この関数を使うためには最初に load("diag")と書いてください。 jordandispJordanも参照してください。

Categories:  Package diag

関数: ModeMatrix (A, [jordan_info])

(M^^-1).A.MAの Jordan形になるような可逆行列 Mを返します。

これを計算するために、Maximaは Aの Jordan形を見つけなければいけません。 それは非常に重い計算になる可能性があります。 もし既に jordanを以前に呼び出して計算したなら、二番目の引数 jordan_infoにそれを渡してください。 要求される形式の詳細は jordanを参照してください。

例:

 
(%i1) load("diag")$
(%i2) A: matrix([2,1,2,0], [-2,2,1,2], [-2,-1,-1,1], [3,1,2,-1])$
(%i3) M: ModeMatrix (A);
                      [  1    - 1   1   1 ]
                      [                   ]
                      [   1               ]
                      [ - -   - 1   0   0 ]
                      [   9               ]
                      [                   ]
(%o3)                 [   13              ]
                      [ - --   1   - 1  0 ]
                      [   9               ]
                      [                   ]
                      [  17               ]
                      [  --   - 1   1   1 ]
                      [  9                ]
(%i4) is ((M^^-1) . A . M = dispJordan (jordan (A)));
(%o4)                         true

この例で、Aの Jordan形が2回計算されていることに注意してください。 これを避けるには、 jordan(A)の出力を変数に保存して、それを jordandispJordanに渡します。

この関数を使うためには最初に load("diag")と書いてください。 jordandispJordanも参照してください。

Categories:  Package diag

関数: mat_function (f,A)

f(A)を返します。 ここで fは解析関数で Aは行列です。 この計算は fのTaylor展開に基づきます。 数値評価には効率的ではありませんが、小さな行列に関して記号的な答えを出すことができます。

例 1:

行列の指数関数。 出力が非常に大きいので、答えの一番目の行だけを求めます。

 
(%i1) load("diag")$
(%i2) A: matrix ([0,1,0], [0,0,1], [-1,-3,-3])$
(%i3) ratsimp (mat_function (exp, t*A)[1]);
           2              - t                   2   - t
         (t  + 2 t + 2) %e       2        - t  t  %e
(%o3)   [--------------------, (t  + t) %e   , --------]
                  2                               2

例 2:

指数関数に関するTaylor級数との比較。 また、 exp(%i*A)をsine, cosineと比較。

 
(%i1) load("diag")$
(%i2) A: matrix ([0,1,1,1],
                 [0,0,0,1],
                 [0,0,0,1],
                 [0,0,0,0])$
(%i3) ratsimp (mat_function (exp, t*A));
                       [           2     ]
                       [ 1  t  t  t  + t ]
                       [                 ]
(%o3)                  [ 0  1  0    t    ]
                       [                 ]
                       [ 0  0  1    t    ]
                       [                 ]
                       [ 0  0  0    1    ]
(%i4) minimalPoly (jordan (A));
                                3
(%o4)                          x
(%i5) ratsimp (ident(4) + t*A + 1/2*(t^2)*A^^2);
                       [           2     ]
                       [ 1  t  t  t  + t ]
                       [                 ]
(%o5)                  [ 0  1  0    t    ]
                       [                 ]
                       [ 0  0  1    t    ]
                       [                 ]
                       [ 0  0  0    1    ]
(%i6) ratsimp (mat_function (exp, %i*t*A));
                  [                        2 ]
                  [ 1  %i t  %i t  %i t - t  ]
                  [                          ]
(%o6)             [ 0   1     0      %i t    ]
                  [                          ]
                  [ 0   0     1      %i t    ]
                  [                          ]
                  [ 0   0     0        1     ]
(%i7) ratsimp (mat_function (cos, t*A) + %i*mat_function (sin, t*A));
                  [                        2 ]
                  [ 1  %i t  %i t  %i t - t  ]
                  [                          ]
(%o7)             [ 0   1     0      %i t    ]
                  [                          ]
                  [ 0   0     1      %i t    ]
                  [                          ]
                  [ 0   0     0        1     ]

例 3:

べき演算。

 
(%i1) load("diag")$
(%i2) A: matrix([1,2,0], [0,1,0], [1,0,1])$
(%i3) integer_pow(x) := block ([k], declare (k, integer), x^k)$
(%i4) mat_function (integer_pow, A);
                       [ 1     2 k     0 ]
                       [                 ]
(%o4)                  [ 0      1      0 ]
                       [                 ]
                       [ k  (k - 1) k  1 ]
(%i5) A^^20;
                         [ 1   40   0 ]
                         [            ]
(%o5)                    [ 0    1   0 ]
                         [            ]
                         [ 20  380  1 ]

この関数を使うためには最初に load("diag")と書いてください。

Categories:  Package diag


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

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