2 * Functions and Variables for diag::
5 @node Functions and Variables for diag, , diag, diag
6 @section Functions and Variables for diag
9 @deffn {関数} diag (@var{lm})
10 @var{lm}の行列を対角に持つ平方行列を構成します。
11 @var{lm}は行列かスカラーのリストです。
17 (%i2) a1:matrix([1,2,3],[0,4,5],[0,0,6])$
19 (%i3) a2:matrix([1,1],[1,0])$
21 (%i4) diag([a1,x,a2]);
35 この関数を使うためには、最初に@code{load("diag")}を書いてください。
39 @category{Share packages}
40 @category{Package diag}
46 @deffn {関数} JF (@var{lambda},@var{n})
47 固有値@var{lambda}を持つ次数@var{n}のJordan細胞を返します。
69 この関数を使うためには、最初に@code{load("diag")}を書いてください。
72 @category{Package diag}
78 @deffn {関数} jordan (@var{mat})
79 行列@var{mat}のJordan形を返しますが、それはMaximaリストでコード化されます。
81 @code{jordan}の出力を引数として使って関数@code{dispJordan}をコールしてください。
87 (%i3) a:matrix([2,0,0,0,0,0,0,0],
93 [-34,7,1,-2,-1,1,2,0],
94 [145,-17,-16,3,9,-2,0,3])$
97 (%o4) [[2, 3, 3, 1], [3, 1]]
116 この関数を使うためには、最初に@code{load("diag")}を書いてください。
117 @code{dispJordan}と@code{minimalPoly}も参照してください。
120 @category{Package diag}
126 @deffn {関数} dispJordan (@var{l})
127 関数@code{jordan}によって与えられる出力である
128 Maximaリスト@var{l}で与えられたコードに関連付けられた
135 (%i2) b1:matrix([0,0,1,1,1],
155 この関数を使うためには、最初に@code{load("diag")}を書いてください。
156 @code{jordan}と@code{minimalPoly}も参照してください。
159 @category{Package diag}
165 @deffn {関数} minimalPoly (@var{l})
166 関数@code{jordan}によって与えられる出力である
167 Maximaリスト@var{l}で与えられたコードに関連付けられた
174 (%i2) a:matrix([2,1,2,0],
180 (%o3) [[- 1, 1], [1, 3]]
181 (%i4) minimalPoly(%);
183 (%o4) (x - 1) (x + 1)
186 この関数を使うためには、最初に@code{load("diag")}を書いてください。
187 @code{jordan}と@code{dispJordan}も参照してください。
190 @category{Package diag}
195 @deffn {関数} ModeMatrix (@var{A},@var{l})
197 @math{(M^^-1).A.M=J}―
198 ただし@var{J}は@var{A}のJordan形とする―
202 関数@code{jordan}が返すようなJordan形のコード化された形式です。
208 (%i2) a:matrix([2,1,2,0],
214 (%o3) [[- 1, 1], [1, 3]]
215 (%i4) M: ModeMatrix(a,%);
229 (%i5) is( (M^^-1).a.M = dispJordan(%o3) );
232 @code{dispJordan(%o3)}は
233 行列@code{a}のJordan形であることに注意してください。
235 この関数を使うためには、最初に@code{load("diag")}を書いてください。
236 @code{jordan}と@code{dispJordan}も参照してください。
239 @category{Package diag}
245 @deffn {関数} mat_function (@var{f},@var{mat})
247 ここで、@var{f}は解析関数で@var{mat}は行列です。
248 この計算はCauchyの積分公式に基づきます。
250 もし@code{f(x)}が解析的、かつ、
253 mat = diag([JF(m1,n1),...,JF(mk,nk)]),
259 f(mat) = ModeMatrix*diag([f(JF(m1,n1)), ..., f(JF(mk,nk))])
265 この計算に関して約6か8の別の方法があることに注意してください。
273 (%i2) b2:matrix([0,1,0], [0,0,1], [-1,-3,-3])$
275 (%i3) mat_function(exp,t*b2);
278 (%o3) matrix([-------- + t %e + %e ,
282 t (- ----- - ----- + %e ) + t (2 %e - -----)
287 + 2 %e , t (%e - -----) + t (----- - -----)
291 + %e ], [- --------, - t (- ----- - ----- + %e ),
296 - t (----- - -----)], [-------- - t %e ,
300 t (- ----- - ----- + %e ) - t (2 %e - -----),
305 t (----- - -----) - t (%e - -----)])
310 [ -------------------- ]
314 (%o4) Col 1 = [ t %e ]
336 Col 3 = [ (t - 2 t) %e ]
337 [ - ---------------- ]
342 [ -------------------- ]
350 (%i5) b1:matrix([0,0,1,1,1],
356 (%i6) mat_function(exp,t*b1);
369 (%i7) minimalPoly(jordan(b1));
372 (%i8) ident(5)+t*b1+1/2*(t^2)*b1^^2;
385 (%i9) mat_function(exp,%i*t*b1);
388 [ 1 0 %i t %i t %i t - -- ]
391 (%o9) [ 0 1 0 %i t %i t ]
398 (%i10) mat_function(cos,t*b1)+%i*mat_function(sin,t*b1);
401 [ 1 0 %i t %i t %i t - -- ]
404 (%o10) [ 0 1 0 %i t %i t ]
415 (%i11) a1:matrix([2,1,0,0,0,0],
422 (%i12) fpow(x):=block([k],declare(k,integer),x^k)$
424 (%i13) mat_function(fpow,a1);
425 [ k k - 1 ] [ k - 1 ]
428 [ k - 1 ] [ k k - 1 ]
429 [ - k 3 ] [ 3 + k 3 ]
433 (%o13) Col 1 = [ ] Col 2 = [ ]
446 [ k k - 1 ] [ k - 1 ]
449 Col 3 = [ k - 1 ] Col 4 = [ k k - 1 ]
450 [ - k 3 ] [ 3 + k 3 ]
463 Col 5 = [ 0 ] Col 6 = [ ]
472 この関数を使うためには、最初に@code{load("diag")}を書いてください。
475 @category{Package diag}