[ < ] | [ > ] |  | [ << ] | [ 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")`と書いてください。 `dispJordan`と `minimalPoly`も参照してください。

  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")`と書いてください。 `jordan`と `minimalPoly`も参照してください。

  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")`と書いてください。 `jordan`と `dispJordan`も参照してください。

  Categories: Package diag

関数: ModeMatrix (A, [jordan_info])

  (M^^-1).A.Mが Aの 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形が２回計算されていることに注意してください。 これを避けるには、 `jordan(A)`の出力を変数に保存して、それを `jordan`と `dispJordan`に渡します。

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

  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.