| [ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
| 47.1 Functions and Variables for diag |
| [ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
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
固有値 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
行列 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
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
Maximaリストlで与えられたコードに関連付けられた最小多項式を返します。
lは関数 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
(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形が2回計算されていることに注意してください。
これを避けるには、 jordan(A)の出力を変数に保存して、それを jordanと dispJordanに渡します。
この関数を使うためには最初に load("diag")と書いてください。
jordanと dispJordanも参照してください。
Categories: Package diag
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
| [ << ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
この文書は市川 雄二によって2014年4月月20日にtexi2html 1.82を用いて生成されました。