Fix bug #1848: taytorat leaks internal gensyms from multivar expansions
[maxima.git] / doc / info / ja / linearalgebra.texi
blob09c04f6d2952903b1a4d7cab59f5bdc902ca6768
1 @menu
2 * Introduction to linearalgebra::
3 * Functions and Variables for linearalgebra::
4 @end menu
6 @c -----------------------------------------------------------------------------
7 @node Introduction to linearalgebra, Functions and Variables for linearalgebra, linearalgebra, linearalgebra
8 @section Introduction to linearalgebra
9 @c -----------------------------------------------------------------------------
11 @code{linearalgebra}は線形代数に関する関数のコレクションです。
13 例:
15 @c ===beg===
16 @c M : matrix ([1, 2], [1, 2]);
17 @c nullspace (M);
18 @c columnspace (M);
19 @c ptriangularize (M - z*ident(2), z);
20 @c M : matrix ([1, 2, 3], [4, 5, 6], [7, 8, 9]) - z*ident(3);
21 @c MM : ptriangularize (M, z);
22 @c algebraic : true;
23 @c tellrat (MM [3, 3]);
24 @c MM : ratsimp (MM);
25 @c nullspace (MM);
26 @c M : matrix ([1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], 
27 @c                    [13, 14, 15, 16]);
28 @c columnspace (M);
29 @c apply ('orthogonal_complement, args (nullspace (transpose (M))));
30 @c ===end===
31 @example
32 (%i1) M : matrix ([1, 2], [1, 2]);
33                             [ 1  2 ]
34 (%o1)                       [      ]
35                             [ 1  2 ]
36 (%i2) nullspace (M);
37                                [  1  ]
38                                [     ]
39 (%o2)                     span([   1 ])
40                                [ - - ]
41                                [   2 ]
42 (%i3) columnspace (M);
43                                 [ 1 ]
44 (%o3)                      span([   ])
45                                 [ 1 ]
46 (%i4) ptriangularize (M - z*ident(2), z);
47                          [ 1   2 - z   ]
48 (%o4)                    [             ]
49                          [           2 ]
50                          [ 0  3 z - z  ]
51 (%i5) M : matrix ([1, 2, 3], [4, 5, 6], [7, 8, 9]) - z*ident(3);
52                      [ 1 - z    2      3   ]
53                      [                     ]
54 (%o5)                [   4    5 - z    6   ]
55                      [                     ]
56                      [   7      8    9 - z ]
57 (%i6) MM : ptriangularize (M, z);
58               [ 4  5 - z            6            ]
59               [                                  ]
60               [                2                 ]
61               [     66        z    102 z   132   ]
62               [ 0   --      - -- + ----- + ---   ]
63 (%o6)         [     49        7     49     49    ]
64               [                                  ]
65               [               3        2         ]
66               [           49 z    245 z    147 z ]
67               [ 0    0    ----- - ------ - ----- ]
68               [            264      88      44   ]
69 (%i7) algebraic : true;
70 (%o7)                         true
71 (%i8) tellrat (MM [3, 3]);
72                          3       2
73 (%o8)                  [z  - 15 z  - 18 z]
74 (%i9) MM : ratsimp (MM);
75                [ 4  5 - z           6           ]
76                [                                ]
77                [                2               ]
78 (%o9)          [     66      7 z  - 102 z - 132 ]
79                [ 0   --    - ------------------ ]
80                [     49              49         ]
81                [                                ]
82                [ 0    0             0           ]
83 (%i10) nullspace (MM);
84                         [        1         ]
85                         [                  ]
86                         [   2              ]
87                         [  z  - 14 z - 16  ]
88                         [  --------------  ]
89 (%o10)             span([        8         ])
90                         [                  ]
91                         [    2             ]
92                         [   z  - 18 z - 12 ]
93                         [ - -------------- ]
94                         [         12       ]
95 (%i11) M : matrix ([1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12],
96                    [13, 14, 15, 16]);
97                        [ 1   2   3   4  ]
98                        [                ]
99                        [ 5   6   7   8  ]
100 (%o11)                 [                ]
101                        [ 9   10  11  12 ]
102                        [                ]
103                        [ 13  14  15  16 ]
104 (%i12) columnspace (M);
105                            [ 1  ]  [ 2  ]
106                            [    ]  [    ]
107                            [ 5  ]  [ 6  ]
108 (%o12)                span([    ], [    ])
109                            [ 9  ]  [ 10 ]
110                            [    ]  [    ]
111                            [ 13 ]  [ 14 ]
112 (%i13) apply ('orthogonal_complement, args (nullspace (transpose (M))));
113                            [ 0 ]  [  1  ]
114                            [   ]  [     ]
115                            [ 1 ]  [  0  ]
116 (%o13)                span([   ], [     ])
117                            [ 2 ]  [ - 1 ]
118                            [   ]  [     ]
119                            [ 3 ]  [ - 2 ]
120 @end example
122 @opencatbox
123 @category{Linear algebra}
124 @category{Share packages}
125 @category{Package linearalgebra}
126 @closecatbox
128 @c -----------------------------------------------------------------------------
129 @need 800
130 @node Functions and Variables for linearalgebra,  , Introduction to linearalgebra, linearalgebra
131 @section Functions and Variables for linearalgebra
132 @c -----------------------------------------------------------------------------
134 @c -----------------------------------------------------------------------------
135 @anchor{addmatrices}
136 @deffn {関数} addmatrices (@var{f}, @var{M_1}, @dots{}, @var{M_n})
138 @c REWORD -- THE RESULT IS NOT GENERALLY THE SUM OF M_1, ..., M_N
139 関数@var{f}を加算関数として使い、
140 行列@var{M_1}, @dots{}, @var{M_n}の和を返します。
141 関数@var{f}は任意の数の引数を受け付けなければいけません(Maxima n項関数)。
143 例:
145 @c ===beg===
146 @c m1 : matrix([1,2],[3,4])$
147 @c m2 : matrix([7,8],[9,10])$
148 @c addmatrices('max,m1,m2);
149 @c addmatrices('max,m1,m2,5*m1);
150 @c ===end===
151 @example
152 (%i1) m1 : matrix([1,2],[3,4])$
153 (%i2) m2 : matrix([7,8],[9,10])$
154 (%i3) addmatrices('max,m1,m2);
155 (%o3) matrix([7,8],[9,10])
156 (%i4) addmatrices('max,m1,m2,5*m1);
157 (%o4) matrix([7,10],[15,20])
158 @end example
160 @opencatbox
161 @category{Package linearalgebra}
162 @closecatbox
163 @end deffn
165 @c -----------------------------------------------------------------------------
166 @anchor{blockmatrixp}
167 @deffn {関数} blockmatrixp (@var{M})
169 @var{M}のエントリがすべて行列なら、その時に限って、
170 trueを返します。
172 @opencatbox
173 @category{Package linearalgebra}
174 @category{Predicate functions}
175 @closecatbox
176 @end deffn
178 @c -----------------------------------------------------------------------------
179 @anchor{columnop}
180 @deffn {関数} columnop (@var{M}, @var{i}, @var{j}, @var{theta})
182 もし@var{M}が行列なら、
183 列演算@code{C_i <- C_i - @var{theta} * C_j}を施すことで生じる行列を返します。
184 もし@var{M}が行@var{i}か行@var{j}を持たないなら
185 エラーをシグナルします。
187 @opencatbox
188 @category{Package linearalgebra}
189 @closecatbox
190 @end deffn
192 @c -----------------------------------------------------------------------------
193 @anchor{columnswap}
194 @deffn {関数} columnswap (@var{M}, @var{i}, @var{j})
196 もし @var{M}が行列なら、列 @var{i}と @var{j}を交換します。
197 もし @var{M}に列 @var{i}か @var{j}がないなら、
198 エラーをシグナルします。
200 @opencatbox
201 @category{Package linearalgebra}
202 @closecatbox
204 @end deffn
206 @c -----------------------------------------------------------------------------
207 @anchor{columnspace}
208 @deffn {関数} columnspace (@var{M})
210 もし @var{M}が行列なら、
211 @code{span (v_1, ..., v_n)}を返します。
212 ここで、集合 @code{@{v_1, ..., v_n@}}は
213 @var{M}の列空間の基底です。
214 空集合の包は @code{@{0@}}です。
215 従って、列空間が1員だけ持つ時、
216 @code{span ()}を返します。
218 @opencatbox
219 @category{Package linearalgebra}
220 @closecatbox
222 @end deffn
224 @c -----------------------------------------------------------------------------
225 @anchor{copy}
226 @deffn {関数} copy (@var{e})
228 Maxima式 @var{e}のコピーを返します。
229 @var{e}は任意のMaxima式であり得ますが、
230 @var{e}がリストか行列の時、
231 コピー関数はもっとも役立ちます;
232 以下を考えてください:
234 @c ===beg===
235 @c m : [1,[2,3]]$
236 @c mm : m$
237 @c mm[2][1] : x$
238 @c m;
239 @c mm;
240 @c ===end===
241 @example 
242 (%i1) m : [1,[2,3]]$
243 (%i2) mm : m$
244 (%i3) mm[2][1] : x$
245 (%i4) m;
246 (%o4)                      [1,[x,3]]
247 (%i5) mm;
248 (%o5)                      [1,[x,3]]
249 @end example
251 同じ実験を試みましょう。
252 しかし、今回 @var{mm}を @var{m}のコピーとします。
254 @c ===beg===
255 @c m : [1,[2,3]]$
256 @c mm : copy(m)$
257 @c mm[2][1] : x$
258 @c m;
259 @c mm;
260 @c ===end===
261 @example
262 (%i6) m : [1,[2,3]]$
263 (%i7) mm : copy(m)$
264 (%i8) mm[2][1] : x$
265 (%i9) m;
266 (%o9)                     [1,[2,3]]
267 (%i10) mm;
268 (%o10)                    [1,[x,3]]
269 @end example
271 今回、 @var{mm}への割り当ては@var{m}の値を変えません。
273 @opencatbox
274 @category{Package linearalgebra}
275 @closecatbox
276 @end deffn
278 @c -----------------------------------------------------------------------------
279 @anchor{cholesky}
280 @deffn  {関数} cholesky (@var{M})
281 @deffnx {関数} cholesky (@var{M}, @var{field})
283 自己共役(すなわちHermite)行列のCholesky分解を返します。
285 二番目の引数はデフォルトでは'generalring'です。
286 @var{field}の取り得る値の説明については @code{lu_factor}を参照してください。
288 @opencatbox
289 @category{Matrix decompositions}
290 @category{Package linearalgebra}
291 @closecatbox
292 @end deffn
294 @c -----------------------------------------------------------------------------
295 @anchor{ctranspose}
296 @deffn {関数} ctranspose (@var{M})
298 行列 @var{M}の複素共役転置を返します。
299 関数 @code{ctranspose}は
300 それぞれの行列要素を転置するのに
301 @code{matrix_element_transpose}を使います。
303 @opencatbox
304 @category{Package linearalgebra}
305 @closecatbox
306 @end deffn
308 @c -----------------------------------------------------------------------------
309 @anchor{diag_matrix}
310 @deffn {関数} diag_matrix (@var{d_1}, @var{d_2},...,@var{d_n})
312 対角成分 @var{d_1}, @var{d_2},...,@var{d_n}を持つ対角行列を返します。
313 対角成分が行列の時、
314 戻り値行列の零成分は
315 適切なサイズの零行列です;
316 例えば:
318 @c ===beg===
319 @c diag_matrix(diag_matrix(1,2),diag_matrix(3,4));
320 @c diag_matrix(p,q);
321 @c ===end===
322 @example
323 (%i1) diag_matrix(diag_matrix(1,2),diag_matrix(3,4));
325                             [ [ 1  0 ]  [ 0  0 ] ]
326                             [ [      ]  [      ] ]
327                             [ [ 0  2 ]  [ 0  0 ] ]
328 (%o1)                       [                    ]
329                             [ [ 0  0 ]  [ 3  0 ] ]
330                             [ [      ]  [      ] ]
331                             [ [ 0  0 ]  [ 0  4 ] ]
332 (%i2) diag_matrix(p,q);
334                                    [ p  0 ]
335 (%o2)                              [      ]
336                                    [ 0  q ]
337 @end example
339 @opencatbox
340 @category{Package linearalgebra}
341 @closecatbox
342 @end deffn
344 @c -----------------------------------------------------------------------------
345 @anchor{dotproduct}
346 @deffn {関数} dotproduct (@var{u}, @var{v})
348 ベクトル @var{u}と @var{v}の内積を返します。
349 これは@code{conjugate (transpose (@var{u})) . @var{v}}と同じです。
350 引数 @var{u}と @var{v}は列ベクトルでなければいけません。
352 @opencatbox
353 @category{Package linearalgebra}
354 @closecatbox
355 @end deffn
357 @c -----------------------------------------------------------------------------
358 @anchor{eigens_by_jacobi}
359 @deffn  {関数} eigens_by_jacobi (@var{A})
360 @deffnx {関数} eigens_by_jacobi (@var{A}, @var{field_type})
362 @var{A}の固有値と固有ベクトルを
363 Jacobi回転法で計算します。
364 @var{A}は対称行列でなければいけません。
365 (しかし、正定値である必要も半正定値である必要もありません。)
366 @var{field_type}は計算上の体を示し、@code{floatfield}か @code{bigfloatfield}です。
367 もし @var{field_type}が指定されないなら、
368 デフォルトは @code{floatfield}です。
370 @var{A}の要素は、数か、
371 (@var{field_type}に依存して)@code{float}か @code{bfloat}を介して
372 数に評価される式でなければいけません。
374 例:
376 @c ===beg===
377 @c S : matrix ([1/sqrt(2), 1/sqrt(2)], [- 1/sqrt(2), 1/sqrt(2)]);
378 @c L : matrix ([sqrt(3), 0], [0, sqrt(5)]);
379 @c M : S . L . transpose (S);
380 @c eigens_by_jacobi (M);
381 @c float ([[sqrt(3), sqrt(5)], S]);
382 @c eigens_by_jacobi (M, bigfloatfield);
383 @c ===end===
385 @example
386 (%i1) S: matrix([1/sqrt(2), 1/sqrt(2)],[-1/sqrt(2), 1/sqrt(2)]);
387                      [     1         1    ]
388                      [  -------   ------- ]
389                      [  sqrt(2)   sqrt(2) ]
390 (%o1)                [                    ]
391                      [      1        1    ]
392                      [ - -------  ------- ]
393                      [   sqrt(2)  sqrt(2) ]
394 (%i2) L : matrix ([sqrt(3), 0], [0, sqrt(5)]);
395                       [ sqrt(3)     0    ]
396 (%o2)                 [                  ]
397                       [    0     sqrt(5) ]
398 (%i3) M : S . L . transpose (S);
399             [ sqrt(5)   sqrt(3)  sqrt(5)   sqrt(3) ]
400             [ ------- + -------  ------- - ------- ]
401             [    2         2        2         2    ]
402 (%o3)       [                                      ]
403             [ sqrt(5)   sqrt(3)  sqrt(5)   sqrt(3) ]
404             [ ------- - -------  ------- + ------- ]
405             [    2         2        2         2    ]
406 (%i4) eigens_by_jacobi (M);
407 The largest percent change was 0.1454972243679
408 The largest percent change was 0.0
409 number of sweeps: 2
410 number of rotations: 1
411 (%o4) [[1.732050807568877, 2.23606797749979], 
412                         [  0.70710678118655   0.70710678118655 ]
413                         [                                      ]]
414                         [ - 0.70710678118655  0.70710678118655 ]
415 (%i5) float ([[sqrt(3), sqrt(5)], S]);
416 (%o5) [[1.732050807568877, 2.23606797749979], 
417                         [  0.70710678118655   0.70710678118655 ]
418                         [                                      ]]
419                         [ - 0.70710678118655  0.70710678118655 ]
420 (%i6) eigens_by_jacobi (M, bigfloatfield);
421 The largest percent change was 1.454972243679028b-1
422 The largest percent change was 0.0b0
423 number of sweeps: 2
424 number of rotations: 1
425 (%o6) [[1.732050807568877b0, 2.23606797749979b0], 
426                 [  7.071067811865475b-1   7.071067811865475b-1 ]
427                 [                                              ]]
428                 [ - 7.071067811865475b-1  7.071067811865475b-1 ]
429 @end example
431 @opencatbox
432 @category{Matrix decompositions}
433 @category{Package linearalgebra}
434 @closecatbox
435 @end deffn
437 @c -----------------------------------------------------------------------------
438 @anchor{get_lu_factors}
439 @deffn {関数} get_lu_factors (@var{x}) 
441 @code{@var{x} = lu_factor (@var{A})}の時、
442 @code{get_lu_factors}は
443 形式 @code{[P, L, U]}のリストを返します。
444 ここで、 @var{P}は置換行列、 @var{L}は対角成分を含む下三角行列、
445 @var{U}は上三角行列であり、
446  @code{@var{A} = @var{P} @var{L} @var{U}}が成り立ちます。
448 @opencatbox
449 @category{Package linearalgebra}
450 @closecatbox
451 @end deffn
453 @c -----------------------------------------------------------------------------
454 @anchor{hankel}
455 @deffn  {関数} hankel (@var{col})
456 @deffnx {関数} hankel (@var{col}, @var{row})
458 Hankel行列 @var{H}を返します。
459 @var{H}の最初の列は @var{col}です;
460 最初の成分を除いて、
461 @var{H}の最後の行は @var{row}です。
462 @var{row}のデフォルトは @var{col}と同じ長さを持つ零ベクトルです。
464 @opencatbox
465 @category{Package linearalgebra}
466 @closecatbox
467 @end deffn
469 @c -----------------------------------------------------------------------------
470 @anchor{hessian}
471 @deffn {関数} hessian (@var{f}, @var{x})
473 変数 @var{x}のリストに関する @var{f}のHessian行列を返します。
474 Hessian行列の @code{(i, j)}成分は
475 @code{diff(@var{f}, @var{x}[i], 1, @var{x}[j], 1)}です。
477 例:
479 @c ===beg===
480 @c hessian (x * sin (y), [x, y]);
481 @c depends (F, [a, b]);
482 @c hessian (F, [a, b]);
483 @c ===end===
484 @example
485 (%i1) hessian (x * sin (y), [x, y]);
486                      [   0       cos(y)   ]
487 (%o1)                [                    ]
488                      [ cos(y)  - x sin(y) ]
489 (%i2) depends (F, [a, b]);
490 (%o2)                       [F(a, b)]
491 (%i3) hessian (F, [a, b]);
492                         [   2      2   ]
493                         [  d F    d F  ]
494                         [  ---   ----- ]
495                         [    2   da db ]
496                         [  da          ]
497 (%o3)                   [              ]
498                         [   2      2   ]
499                         [  d F    d F  ]
500                         [ -----   ---  ]
501                         [ da db     2  ]
502                         [         db   ]
503 @end example
505 @opencatbox
506 @category{Differential calculus}
507 @category{Package linearalgebra}
508 @closecatbox
509 @end deffn
511 @c -----------------------------------------------------------------------------
512 @anchor{hilbert_matrix}
513 @deffn {関数} hilbert_matrix (@var{n})
515 @var{n}掛け@var{n}のHilbert行列を返します。
516 @var{n}が正の整数でない時、エラーをシグナルします。
518 @opencatbox
519 @category{Package linearalgebra}
520 @closecatbox
521 @end deffn
523 @c -----------------------------------------------------------------------------
524 @anchor{identfor}
525 @deffn {関数} identfor (@var{M})
526 @deffnx {関数} identfor (@var{M}, @var{fld})
528 行列 @var{M}と同じ形を持つ単位行列を返します。
529 単位行列の対角成分は体 @var{fld}の乗算単位元です;
530 @var{fld}のデフォルトは @var{generalring}です。
532 一番目の引数 @var{M}は平方行列か非行列でなければいけません。
533 @var{M}が行列の時、 @var{M}のそれぞれの成分は平方行列であり得ます。
534 -- 従って、 @var{M}は区分されたMaxima行列であり得ます。
535 行列は、任意の(有限の)深さに区分できます。
537 @code{zerofor}も参照してください。
539 @opencatbox
540 @category{Package linearalgebra}
541 @closecatbox
542 @end deffn
544 @c -----------------------------------------------------------------------------
545 @anchor{invert_by_lu}
546 @deffn {関数} invert_by_lu (@var{M}, @var{(rng generalring)})
548 LU分解を使って、
549 行列 @var{M}の逆行列を返します。
550 LU分解は環 @var{rng}を使って実行されます。
553 @opencatbox
554 @category{Package linearalgebra}
555 @closecatbox
556 @end deffn
558 @c -----------------------------------------------------------------------------
559 @anchor{jacobian}
560 @deffn {関数} jacobian (@var{f}, @var{x})
562 変数のリスト @var{x}に関する
563 関数のリスト @var{f}のJacobi行列を返します。
564 Jacobi行列の @code{(i, j)}成分は
565 @code{diff(@var{f}[i], @var{x}[j])}です。
567 例:
569 @c ===beg===
570 @c jacobian ([sin (u - v), sin (u * v)], [u, v]);
571 @c depends ([F, G], [y, z]);
572 @c jacobian ([F, G], [y, z]);
573 @c ===end===
574 @example
575 (%i1) jacobian ([sin (u - v), sin (u * v)], [u, v]);
576                   [ cos(v - u)  - cos(v - u) ]
577 (%o1)             [                          ]
578                   [ v cos(u v)   u cos(u v)  ]
579 (%i2) depends ([F, G], [y, z]);
580 (%o2)                  [F(y, z), G(y, z)]
581 (%i3) jacobian ([F, G], [y, z]);
582                            [ dF  dF ]
583                            [ --  -- ]
584                            [ dy  dz ]
585 (%o3)                      [        ]
586                            [ dG  dG ]
587                            [ --  -- ]
588                            [ dy  dz ]
589 @end example
591 @opencatbox
592 @category{Differential calculus}
593 @category{Package linearalgebra}
594 @closecatbox
595 @end deffn
597 @c -----------------------------------------------------------------------------
598 @anchor{kronecker_product}
599 @deffn {関数} kronecker_product (@var{A}, @var{B})
601 行列 @var{A}と @var{B}のKronecker積を返します。
603 @opencatbox
604 @category{Package linearalgebra}
605 @closecatbox
606 @end deffn
608 @c -----------------------------------------------------------------------------
609 @anchor{listp}
610 @deffn  {関数} listp (@var{e}, @var{p})
611 @deffnx {関数} listp (@var{e})
613 オプションの引数 @var{p}が与えられたとして、
614 もし @var{e}がMaximaリストで、 @var{p}がすべてのリストの要素で
615 @code{true}に評価されるなら、 @code{true}を返します。
616 @code{listp}がオプションの引数を与えられない時、
617 もし @var{e}がMaximaリストなら、 @code{true}を返します。
618 他のすべての場合、 @code{false}を返します。
620 @opencatbox
621 @category{Package linearalgebra}
622 @category{Predicate functions}
623 @closecatbox
624 @end deffn
626 @c -----------------------------------------------------------------------------
627 @anchor{locate_matrix_entry}
628 @deffn {関数} locate_matrix_entry (@var{M}, @var{r_1}, @var{c_1}, @var{r_2}, @var{c_2}, @var{f}, @var{rel})
630 一番目の引数は行列でなければいけません;
631 引数 @var{r_1}から @var{c_2}は
632 行 @var{r_1}から @var{r_2}と列 @var{c_1}から @var{c_2}から成る
633 @var{M}の部分行列を決定します。
635 ある性質を満たす部分行列 @var{M}の中の成分を見つけます。
636 3つのケース:
638 (1) @code{@var{rel} = 'bool}で @var{f}が述語論理: 
640 左から右へ、そして上から下へ部分行列をスキャンし、
641 述語論理 @var{f}を満たす最初の成分のインデックスを返します。
642 もし @var{f}を満たす行列成分がないなら、 @code{false}を返します。
644 (2) @code{@var{rel} = 'max}で @var{f}が実関数:
646 @var{f}を最大にする成分を探して部分行列をスキャンします。
647 最大化の成分のインデックスを返します。
649 (3) @code{@var{rel} = 'min}で @var{f}が実関数:
651 @var{f}を最小にする成分を探して部分行列をスキャンします。
652 最小化の成分のインデックスを返します。
654 @opencatbox
655 @category{Package linearalgebra}
656 @closecatbox
658 @end deffn
660 @deffn {関数} lu_backsub (@var{M}, @var{b})
662 @code{@var{M} = lu_factor (@var{A}, @var{field})}の時、
663 @code{lu_backsub (@var{M}, @var{b})}は
664 線形系 @code{@var{A} @var{x} = @var{b}}を解きます。
666 @opencatbox
667 @category{Package linearalgebra}
668 @closecatbox
669 @end deffn
671 @c -----------------------------------------------------------------------------
672 @anchor{lu_factor}
673 @deffn {関数} lu_factor (@var{M}, @var{field})
675 形式 @code{[@var{LU}, @var{perm}, @var{fld}]}か
676 @code{[@var{LU}, @var{perm}, @var{fld}, @var{lower-cnd} @var{upper-cnd}]}
677 のリストを返します。
678 ここで、
680   (1) 行列 @var{LU}は@var{M}の分解をパックされた形式で含みます。
681 パックされた形式は3つのことを意味します;
682 第一に @var{LU}の行はリスト @var{perm}に従って置換されます。
683 もし、例えば、 @var{perm}がリスト @code{[3,2,1]}なら、
684 @var{LU}分解の実際の一番目の行は行列 @var{LU}の三番目の行です。
685 第二に、mの下三角因子はすべて1で置き換えられた対角成分を持つ @var{LU}の下三角部です。
686 第三に、 @var{M}の上三角因子は @var{LU}の上三角部です。
688   (2) 体が @code{floatfield}か @code{complexfield}の時、
689 数 @var{lower-cnd}と @var{upper-cnd}は
690 @var{M}の無限ノルム条件数の下限と上限です。
691 すべての体に対して条件数を見積ることができるわけではありません;
692 そんな体に対しては @code{lu_factor}は2項目リストを返します。
693 下限と上限どちらも真の値から任意に大きな因子だけ異なる可能性があります。
694 (@code{mat_cond}も参照してください。)
695    
696 引数 @var{M}は平方行列でなければいけません。
698 オプション引数 @var{fld}は環か体かを決めるシンボルでなければいけません。
699 予め定義された体と環は以下のものがあります:
701     (a) @code{generalring} -- Maxima式の環,
702     (b) @code{floatfield} --  倍精度浮動小数点数体,
703     (c) @code{complexfield} --  倍精度浮動小数点複素数体,
704     (d) @code{crering}  -- Maxima CRE式の環,
705     (e) @code{rationalfield} -- 有理数体,
706     (f) @code{runningerror} -- 浮動小数点の丸め誤差をトラック,
707     (g) @code{noncommutingring} -- 乗算が非可換ドット演算子のMaxima式の環
709 体が @code{floatfield}か @code{complexfield}、@code{runningerror}のいずれかの時、
710 アルゴリズムは部分ピボットを使います;
711 他のすべての体に対しては、
712 零ピボットを避ける必要があるときだけ、行がスイッチされます。
714 浮動小数点加算算術は結合的でなく、
715 '体'の意味は数学的定義と異なります。
717 体 @code{runningerror}の要素は
718 形式 @code{[x,n]}の2つの要素のMaximaリストです。
719 ここで、 @var{x}は浮動小数点数で、
720 @code{n}は整数です。
721  @code{x}の'真'の値と @code{x}の相対差は
722 計算機イプシロンに @code{n}をかけたもので近似的に抑えられます。
723 The running error bound drops some terms that of the order the square of the machine epsilon.
725 新しい体を定義するユーザーインターフェースはありません。
726 Common Lispに精通しているユーザーは新しい体を定義することができるはずです。
727 これをするには、ユーザーは算術演算のための関数と
728 体表現とMaximaの相互変換のための関数を定義しなければいけません。
729 さらに、(部分ピボットが使われる)順序体に関しては、
730 ユーザーは大きさの関数と体の元の比較関数を定義しなければいけません。
731 あとは、Common Lisp 構造体 @code{mring}を定義することだけです。
732 ファイル @code{mring}に多くの例があります。
734 分解を計算するために、
735 最初の仕事は
736 行列成分それぞれを指定された体の元に変換することです。
737 変換が不可能な時は、分解はエラーメッセージとともに停止します。
738 体の元はMaxima式である必要はありません。
739 例えば、@code{complexfield}の元はCommon Lisp複素数です。
740 そして、分解を計算した後には、行列成分はMaxima式に変換されなければいけません。
742 @code{get_lu_factors}も参照してください。
744 例:
746 @c ===beg===
747 @c w[i,j] := random (1.0) + %i * random (1.0);
748 @c showtime : true$
749 @c M : genmatrix (w, 100, 100)$
750 @c lu_factor (M, complexfield)$
751 @c lu_factor (M, generalring)$
752 @c showtime : false$
753 @c M : matrix ([1 - z, 3], [3, 8 - z]);
754 @c lu_factor (M, generalring);
755 @c get_lu_factors (%);
756 @c %[1] . %[2] . %[3];
757 @c ===end===
758 @example
759 (%i1) w[i,j] := random (1.0) + %i * random (1.0);
760 (%o1)          w     := random(1.) + %i random(1.)
761                 i, j
762 (%i2) showtime : true$
763 Evaluation took 0.00 seconds (0.00 elapsed)
764 (%i3) M : genmatrix (w, 100, 100)$
765 Evaluation took 7.40 seconds (8.23 elapsed)
766 (%i4) lu_factor (M, complexfield)$
767 Evaluation took 28.71 seconds (35.00 elapsed)
768 (%i5) lu_factor (M, generalring)$
769 Evaluation took 109.24 seconds (152.10 elapsed)
770 (%i6) showtime : false$
772 (%i7) M : matrix ([1 - z, 3], [3, 8 - z]); 
773                         [ 1 - z    3   ]
774 (%o7)                   [              ]
775                         [   3    8 - z ]
776 (%i8) lu_factor (M, generalring);
777           [ 1 - z         3        ]
778           [                        ]
779 (%o8)    [[   3            9       ], [1, 2], generalring]
780           [ -----  - z - ----- + 8 ]
781           [ 1 - z        1 - z     ]
782 (%i9) get_lu_factors (%);
783                   [   1    0 ]  [ 1 - z         3        ]
784         [ 1  0 ]  [          ]  [                        ]
785 (%o9)  [[      ], [   3      ], [                9       ]]
786         [ 0  1 ]  [ -----  1 ]  [   0    - z - ----- + 8 ]
787                   [ 1 - z    ]  [              1 - z     ]
788 (%i10) %[1] . %[2] . %[3];
789                         [ 1 - z    3   ]
790 (%o10)                  [              ]
791                         [   3    8 - z ]
792 @end example
794 @opencatbox
795 @category{Matrix decompositions}
796 @category{Package linearalgebra}
797 @closecatbox
798 @end deffn
800 @c -----------------------------------------------------------------------------
801 @anchor{mat_cond}
802 @deffn  {関数} mat_cond (@var{M}, 1)
803 @deffnx {関数} mat_cond (@var{M}, inf)
805 行列 @var{m}の@var{p}-ノルムの行列条件数を返します。
806 @var{p}に許される値は1と @var{inf}です。
807 この関数は、行列 @var{m}の逆元を計算するのにLU分解を使います。
808 このため、@code{mat_cond}の実行時間は行列サイズの三乗に比例します;
809 @code{lu_factor}は、
810 行列サイズの二乗に比例する時間内に
811 無限大ノルム条件数の下限と上限を決定します。
813 @opencatbox
814 @category{Package linearalgebra}
815 @closecatbox
816 @end deffn
818 @c -----------------------------------------------------------------------------
819 @anchor{mat_norm}
820 @deffn  {関数} mat_norm (@var{M}, 1)
821 @deffnx {関数} mat_norm (@var{M}, inf)
822 @deffnx {関数} mat_norm (@var{M}, frobenius)
824 行列 @var{M}の行列 @var{p}-ノルムを返します。
825 .  The allowed values for 
826 @var{p}に許される値は1か @code{inf}か @code{frobenius} (Frobenius行列ノルム)です。
827 行列 @var{M}は区分されない行列でなければいけません。
829 @opencatbox
830 @category{Package linearalgebra}
831 @closecatbox
832 @end deffn
834 @c -----------------------------------------------------------------------------
835 @anchor{linearalgebra_matrixp}
836 @deffn {関数} matrixp (@var{e}, @var{p})
837 @deffnx {関数} matrixp (@var{e})
839 オプション引数 @var{p}が与えられたとして、
840 もし @var{e}が行列で、 @var{p}が行列成分すべてに対して
841 @code{true}に評価されるなら、
842 @code{true}を返します。
843 @code{matrixp}がオプション引数を与えられない時は、
844 もし @code{e}が行列なら、
845 @code{true}を返します。
846 他のすべての場合には、 @code{false}を返します。
848 @code{blockmatrixp}も参照してください。
850 @opencatbox
851 @category{Package linearalgebra}
852 @category{Predicate functions}
853 @closecatbox
854 @end deffn
856 @c -----------------------------------------------------------------------------
857 @anchor{matrix_size}
858 @deffn {関数} matrix_size (@var{M})
860 行列 @var{M}の行数と列数をそれぞれ与える2要素リストを返します。
862 @opencatbox
863 @category{Package linearalgebra}
864 @closecatbox
865 @end deffn
867 @c -----------------------------------------------------------------------------
868 @anchor{mat_fullunblocker}
869 @deffn {関数} mat_fullunblocker (@var{M})
871 もし @var{M}が区分行列なら、
872 行列をすべてのレベルで区分解除します。
873 もし @var{M}が行列なら、
874 @var{M}を返します; それ以外ではエラーをシグナルします。
876 @opencatbox
877 @category{Package linearalgebra}
878 @closecatbox
880 @end deffn
882 @c -----------------------------------------------------------------------------
883 @anchor{mat_trace}
884 @deffn {関数} mat_trace (@var{M})
886 行列 @var{M}の跡を返します。
887 もし @var{M}が行列でないなら、名詞形を返します。
888 @var{M}が区分行列の時、
889 @code{mat_trace(M)}は
890 @code{mat_trace(mat_unblocker(m))}するのと同じ値を返します。
892 @opencatbox
893 @category{Package linearalgebra}
894 @closecatbox
895 @end deffn
897 @c -----------------------------------------------------------------------------
898 @anchor{mat_unblocker}
899 @deffn {関数} mat_unblocker (@var{M})
901 もし @var{M}が区分行列なら、
902 @var{M}を1レベル区分解除します。
903 もし @var{M}が行列なら、
904 @code{mat_unblocker (M)}は @var{M}を返します;
905 それ以外ではエラーをシグナルします。
907 このように、
908 もし @var{M}の成分それぞれが行列なら、
909 @code{mat_unblocker (M)}は区分されていない行列を返しますが、
910 もし @var{M}の成分それぞれが区分行列なら、
911 @code{mat_unblocker (M)}は
912 区分が1レベル少ない区分行列を返します。
914 もし区分行列を使うなら、
915 おそらく、
916 @code{matrix_element_mult}を @code{"."}に、
917 @code{matrix_element_transpose}を @code{'transpose}に設定したくなるでしょう。
918 @code{mat_fullunblocker}も参照してください。
920 例:
922 @c ===beg===
923 @c A : matrix ([1, 2], [3, 4]);
924 @c B : matrix ([7, 8], [9, 10]);
925 @c matrix ([A, B]);
926 @c mat_unblocker (%);
927 @c ===end===
928 @example
929 (%i1) A : matrix ([1, 2], [3, 4]);
930                             [ 1  2 ]
931 (%o1)                       [      ]
932                             [ 3  4 ]
933 (%i2) B : matrix ([7, 8], [9, 10]);
934                             [ 7  8  ]
935 (%o2)                       [       ]
936                             [ 9  10 ]
937 (%i3) matrix ([A, B]);
938 @group
939                      [ [ 1  2 ]  [ 7  8  ] ]
940 (%o3)                [ [      ]  [       ] ]
941                      [ [ 3  4 ]  [ 9  10 ] ]
942 @end group
943 (%i4) mat_unblocker (%);
944                          [ 1  2  7  8  ]
945 (%o4)                    [             ]
946                          [ 3  4  9  10 ]
947 @end example
949 @opencatbox
950 @category{Package linearalgebra}
951 @closecatbox
952 @end deffn
954 @c -----------------------------------------------------------------------------
955 @anchor{nullspace}
956 @deffn {関数} nullspace (@var{M})
958 もし @var{M}が行列なら、
959 @code{span (v_1, ..., v_n)}を返します。
960 ここで、, where the set
961 集合 @code{@{v_1, ..., v_n@}}は
962 @var{M}の零空間の基底です。
963 空集合のスパンは @code{@{0@}}です。
964 なので、零空間が要素を1つだけ持つときは、@code{span ()}を返します。
966 @opencatbox
967 @category{Package linearalgebra}
968 @closecatbox
969 @end deffn
971 @c -----------------------------------------------------------------------------
972 @anchor{nullity}
973 @deffn {関数} nullity (@var{M})
975 もし @var{M}が行列なら、
976 @var{M}の零空間の次元を返します。
978 @opencatbox
979 @category{Package linearalgebra}
980 @closecatbox
981 @end deffn
983 @c -----------------------------------------------------------------------------
984 @anchor{orthogonal_complement}
985 @deffn {関数} orthogonal_complement (@var{v_1}, ..., @var{v_n})
987 @code{span (u_1, ..., u_m)}を返します。
988 ここで、, where the se
989 集合 @code{@{u_1, ..., u_m@}}は
990 集合 @code{(v_1, ..., v_n)}の直交補空間の基底です。
992 ベクトル @var{v_1}から @var{v_n}それぞれは列ベクトルでなければいけません。
994 @opencatbox
995 @category{Package linearalgebra}
996 @closecatbox
997 @end deffn
999 @c -----------------------------------------------------------------------------
1000 @anchor{polynomialp}
1001 @deffn  {関数} polynomialp (@var{p}, @var{L}, @var{coeffp}, @var{exponp})
1002 @deffnx {関数} polynomialp (@var{p}, @var{L}, @var{coeffp})
1003 @deffnx {関数} polynomialp (@var{p}, @var{L})
1005 もし @var{p}がリスト @var{L}の中の変数に関して多項式なら、
1006 @code{true}を返します。
1007 述語論理 @var{coeffp}は係数それぞれに対して @code{true}に評価されなければいけなく、
1008 述語論理 @var{exponp}は
1009 @var{L}の中の変数の指数すべてに対して @code{true}に評価されなければいけません。
1010 もし
1011 @var{exponp}に対してデフォルトでない値を使いたいなら、
1012 たとえ@var{coeffp}に関してデフォルトを使いたくても
1013 @var{coeffp}を値とともに供給しなければいけません。
1015 @c WORK THE FOLLOWING INTO THE PRECEDING
1016 @code{polynomialp (@var{p}, @var{L}, @var{coeffp})}は
1017 @code{polynomialp (@var{p}, @var{L}, @var{coeffp}, 'nonnegintegerp)}に同値です。
1019 @code{polynomialp (@var{p}, @var{L})}は
1020 @code{polynomialp (@var{p}, L@var{,} 'constantp, 'nonnegintegerp)}に同値です。
1022 多項式は展開される必要はありません:
1024 @c ===beg===
1025 @c polynomialp ((x + 1)*(x + 2), [x]);
1026 @c polynomialp ((x + 1)*(x + 2)^a, [x]);
1027 @c ===end===
1028 @example
1029 (%i1) polynomialp ((x + 1)*(x + 2), [x]);
1030 (%o1)                         true
1031 (%i2) polynomialp ((x + 1)*(x + 2)^a, [x]);
1032 (%o2)                         false
1033 @end example
1035 coeffpとexponpにデフォルトでない値を使う例:
1037 @c ===beg===
1038 @c polynomialp ((x + 1)*(x + 2)^(3/2), [x], numberp, numberp);
1039 @c polynomialp ((x^(1/2) + 1)*(x + 2)^(3/2), [x], numberp, 
1040 @c                                                        numberp);
1041 @c ===end===
1042 @example
1043 (%i1) polynomialp ((x + 1)*(x + 2)^(3/2), [x], numberp, numberp);
1044 (%o1)                         true
1045 (%i2) polynomialp ((x^(1/2) + 1)*(x + 2)^(3/2), [x], numberp,
1046                                                         numberp);
1047 (%o2)                         true
1048 @end example
1050 2変数多項式:
1052 @c ===beg===
1053 @c polynomialp (x^2 + 5*x*y + y^2, [x]);
1054 @c polynomialp (x^2 + 5*x*y + y^2, [x, y]);
1055 @c ===end===
1056 @example
1057 (%i1) polynomialp (x^2 + 5*x*y + y^2, [x]);
1058 (%o1)                         false
1059 (%i2) polynomialp (x^2 + 5*x*y + y^2, [x, y]);
1060 (%o2)                         true
1061 @end example
1063 @opencatbox
1064 @category{Package linearalgebra}
1065 @category{Predicate functions}
1066 @closecatbox
1067 @end deffn
1069 @c -----------------------------------------------------------------------------
1070 @anchor{polytocompanion}
1071 @deffn {関数} polytocompanion (@var{p}, @var{x})
1073 もし @var{p}が
1074 @var{x}の多項式なら、
1075 @var{p}のコンパニオン行列を返します。
1076 次数 @var{n}のモニック多項式(最高次数の係数が1の多項式)に対しては、
1077 @code{@var{p} = (-1)^@var{n} charpoly (polytocompanion (@var{p}, @var{x}))}.
1078 があります。
1080 @var{p}が @var{x}の多項式でないなら、エラーをシグナルします。
1082 @opencatbox
1083 @category{Package linearalgebra}
1084 @closecatbox
1085 @end deffn
1087 @c -----------------------------------------------------------------------------
1088 @anchor{ptringularize}
1089 @deffn {関数} ptriangularize (@var{M}, @var{v})
1091 もし @var{M}がそれぞれの成分が@var{v}の多項式の行列なら、
1092 以下のような行列 @var{M2}を返します。
1094 (1) @var{M2}は上三角で、
1096 (2) @code{@var{M2} = @var{E_n} ... @var{E_1} @var{M}},
1097 ここで、 @var{E_1}から @var{E_n}は成分が@var{v}の多項式の基本行列です。
1099 (3) @code{|det (@var{M})| = |det (@var{M2})|},
1101 注意: この関数はすべての成分が@var{v}の多項式かチェックしません。
1103 @opencatbox
1104 @category{Package linearalgebra}
1105 @closecatbox
1106 @end deffn
1108 @c -----------------------------------------------------------------------------
1109 @anchor{rowp}
1110 @deffn {関数} rowop (@var{M}, @var{i}, @var{j}, @var{theta})
1112 もし @var{M}が行列なら、
1113 行演算 @code{R_i <- R_i - theta * R_j}をすることで生じる
1114 行列を返します。
1115 もし @var{M}に行@var{i}か @var{j}がないなら、
1116 エラーをシグナルします。
1118 @opencatbox
1119 @category{Package linearalgebra}
1120 @closecatbox
1121 @end deffn
1123 @deffn {関数} rank (@var{M})
1125 行列 @var{M}の階数を返します。
1126 階数は列空間の次元です。
1128 例:
1129 @c ===beg===
1130 @c rank(matrix([1,2],[2,4]));
1131 @c rank(matrix([1,b],[c,d]));
1132 @c ===end===
1133 @example
1134 (%i1) rank(matrix([1,2],[2,4]));
1135 (%o1)                                  1
1136 (%i2) rank(matrix([1,b],[c,d]));
1137 Proviso:  @{d - b c # 0@}
1138 (%o2)                                  2
1139 @end example
1141 @opencatbox
1142 @category{Package linearalgebra}
1143 @closecatbox
1145 @end deffn
1147 @c -----------------------------------------------------------------------------
1148 @anchor{rowswap}
1149 @deffn {関数} rowswap (@var{M}, @var{i}, @var{j})
1151 もし @var{M}が行列なら、行 @var{i}と @var{j}を入れ替えます。
1152 もし @var{M}に行@var{i}か @var{j}がないなら、エラーをシグナルします。
1154 @opencatbox
1155 @category{Package linearalgebra}
1156 @closecatbox
1157 @end deffn
1159 @c -----------------------------------------------------------------------------
1160 @anchor{toeplitz}
1161 @deffn {関数} toeplitz (@var{col})
1162 @deffnx {関数} toeplitz (@var{col}, @var{row})
1164 Toeplitz行列 @var{T}を返します。
1165 @var{T}の一番目の列は @var{col}です;
1166 一番目の成分を除いて、
1167 @var{T}の最初の行は @var{row}です。
1168 @var{row}のデフォルトは @var{col}の複素共役です。
1170 例:
1171 @c ===beg===
1172 @c toeplitz([1,2,3],[x,y,z]);
1173 @c toeplitz([1,1+%i]);
1174 @c ===end===
1175 @example
1176 (%i1)  toeplitz([1,2,3],[x,y,z]);
1177 @group
1179                                   [ 1  y  z ]
1180                                   [         ]
1181 (%o1)                             [ 2  1  y ]
1182                                   [         ]
1183                                   [ 3  2  1 ]
1184 @end group
1185 (%i2)  toeplitz([1,1+%i]);
1187                               [   1     1 - %I ]
1188 (%o2)                         [                ]
1189                               [ %I + 1    1    ]
1190 @end example
1192 @opencatbox
1193 @category{Package linearalgebra}
1194 @closecatbox
1195 @end deffn
1197 @c -----------------------------------------------------------------------------
1198 @anchor{vandermonde_matrix}
1199 @deffn {関数} vandermonde_matrix ([@var{x_1}, ..., @var{x_n}])
1201 @var{i}番目の行が@code{[1, @var{x_i}, @var{x_i}^2, ... @var{x_i}^(@var{n}-1)]}の
1202 @var{n}掛け@var{n}行列を返します。
1205 @opencatbox
1206 @category{Package linearalgebra}
1207 @closecatbox
1208 @end deffn
1210 @c -----------------------------------------------------------------------------
1211 @anchor{zerofor}
1212 @deffn  {関数} zerofor (@var{M})
1213 @deffnx {関数} zerofor (@var{M}, @var{fld})
1215 行列 @var{M}と同じ形の零行列を返します。
1216 零行列の成分すべては体 @var{fld}の加算の単位元です;
1217 @var{fld}のデフォルトは @var{generalring}です。
1219 一番目の引数 @var{M}は
1220 平方行列か行列以外でなければいけません。
1221 @var{M}が行列の時、
1222 @var{M}の成分それぞれは平方行列であり得ます。
1223 -- 従って @var{M}は区分Maxima行列であり得ます。
1224 行列は任意の(有限の)深さに区分できます。
1226 @code{identfor}も参照してください。
1228 @opencatbox
1229 @category{Package linearalgebra}
1230 @closecatbox
1231 @end deffn
1233 @c -----------------------------------------------------------------------------
1234 @anchor{zeromatrixp}
1235 @deffn {関数} zeromatrixp (@var{M})
1237 @var{M}が区分行列でない時、
1238 もし行列 @var{M}のそれぞれの要素 @var{e}に対して
1239 @code{is (equal (@var{e}, 0))}が真なら、
1240 @code{true}を返します。
1241 @var{M}が区分行列の時、
1242 もし@var{e}の要素それぞれに対して @code{zeromatrixp}が
1243 @code{true}に評価されるなら、
1244 @code{true}を返します。
1246 @opencatbox
1247 @category{Package linearalgebra}
1248 @category{Predicate functions}
1249 @closecatbox
1250 @end deffn