[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
50.1 Functions and Variables for diag |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
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
が与える出力です。
この形式の詳細については 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
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated by 市川雄二 on June, 21 2016 using texi2html 1.76.