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")}を書いてください。
38 @category{Matrices} @category{Share packages} @category{Package diag}
44 @deffn {関数} JF (@var{lambda},@var{n})
45 固有値@var{lambda}を持つ次数@var{n}のJordan細胞を返します。
67 この関数を使うためには、最初に@code{load("diag")}を書いてください。
70 @category{Package diag}
76 @deffn {関数} jordan (@var{mat})
77 行列@var{mat}のJordan形を返しますが、それはMaximaリストでコード化されます。
79 @code{jordan}の出力を引数として使って関数@code{dispJordan}をコールしてください。
85 (%i3) a:matrix([2,0,0,0,0,0,0,0],
91 [-34,7,1,-2,-1,1,2,0],
92 [145,-17,-16,3,9,-2,0,3])$
95 (%o4) [[2, 3, 3, 1], [3, 1]]
114 この関数を使うためには、最初に@code{load("diag")}を書いてください。
115 @code{dispJordan}と@code{minimalPoly}も参照してください。
118 @category{Package diag}
124 @deffn {関数} dispJordan (@var{l})
125 関数@code{jordan}によって与えられる出力である
126 Maximaリスト@var{l}で与えられたコードに関連付けられた
133 (%i2) b1:matrix([0,0,1,1,1],
153 この関数を使うためには、最初に@code{load("diag")}を書いてください。
154 @code{jordan}と@code{minimalPoly}も参照してください。
157 @category{Package diag}
163 @deffn {関数} minimalPoly (@var{l})
164 関数@code{jordan}によって与えられる出力である
165 Maximaリスト@var{l}で与えられたコードに関連付けられた
172 (%i2) a:matrix([2,1,2,0],
178 (%o3) [[- 1, 1], [1, 3]]
179 (%i4) minimalPoly(%);
181 (%o4) (x - 1) (x + 1)
184 この関数を使うためには、最初に@code{load("diag")}を書いてください。
185 @code{jordan}と@code{dispJordan}も参照してください。
188 @category{Package diag}
193 @deffn {関数} ModeMatrix (@var{A},@var{l})
195 @math{(M^^-1).A.M=J}―
196 ただし@var{J}は@var{A}のJordan形とする―
200 関数@code{jordan}が返すようなJordan形のコード化された形式です。
206 (%i2) a:matrix([2,1,2,0],
212 (%o3) [[- 1, 1], [1, 3]]
213 (%i4) M: ModeMatrix(a,%);
227 (%i5) is( (M^^-1).a.M = dispJordan(%o3) );
230 @code{dispJordan(%o3)}は
231 行列@code{a}のJordan形であることに注意してください。
233 この関数を使うためには、最初に@code{load("diag")}を書いてください。
234 @code{jordan}と@code{dispJordan}も参照してください。
237 @category{Package diag}
243 @deffn {関数} mat_function (@var{f},@var{mat})
245 ここで、@var{f}は解析関数で@var{mat}は行列です。
246 この計算はCauchyの積分公式に基づきます。
248 もし@code{f(x)}が解析的、かつ、
251 mat = diag([JF(m1,n1),...,JF(mk,nk)]),
257 f(mat) = ModeMatrix*diag([f(JF(m1,n1)), ..., f(JF(mk,nk))])
263 この計算に関して約6か8の別の方法があることに注意してください。
271 (%i2) b2:matrix([0,1,0], [0,0,1], [-1,-3,-3])$
273 (%i3) mat_function(exp,t*b2);
276 (%o3) matrix([-------- + t %e + %e ,
280 t (- ----- - ----- + %e ) + t (2 %e - -----)
285 + 2 %e , t (%e - -----) + t (----- - -----)
289 + %e ], [- --------, - t (- ----- - ----- + %e ),
294 - t (----- - -----)], [-------- - t %e ,
298 t (- ----- - ----- + %e ) - t (2 %e - -----),
303 t (----- - -----) - t (%e - -----)])
308 [ -------------------- ]
312 (%o4) Col 1 = [ t %e ]
334 Col 3 = [ (t - 2 t) %e ]
335 [ - ---------------- ]
340 [ -------------------- ]
348 (%i5) b1:matrix([0,0,1,1,1],
354 (%i6) mat_function(exp,t*b1);
367 (%i7) minimalPoly(jordan(b1));
370 (%i8) ident(5)+t*b1+1/2*(t^2)*b1^^2;
383 (%i9) mat_function(exp,%i*t*b1);
386 [ 1 0 %i t %i t %i t - -- ]
389 (%o9) [ 0 1 0 %i t %i t ]
396 (%i10) mat_function(cos,t*b1)+%i*mat_function(sin,t*b1);
399 [ 1 0 %i t %i t %i t - -- ]
402 (%o10) [ 0 1 0 %i t %i t ]
413 (%i11) a1:matrix([2,1,0,0,0,0],
420 (%i12) fpow(x):=block([k],declare(k,integer),x^k)$
422 (%i13) mat_function(fpow,a1);
423 [ k k - 1 ] [ k - 1 ]
426 [ k - 1 ] [ k k - 1 ]
427 [ - k 3 ] [ 3 + k 3 ]
431 (%o13) Col 1 = [ ] Col 2 = [ ]
444 [ k k - 1 ] [ k - 1 ]
447 Col 3 = [ k - 1 ] Col 4 = [ k k - 1 ]
448 [ - k 3 ] [ 3 + k 3 ]
461 Col 5 = [ 0 ] Col 6 = [ ]
470 この関数を使うためには、最初に@code{load("diag")}を書いてください。
473 @category{Package diag}