Examples cleanup
[maxima.git] / doc / info / ja / linearalgebra.texi
blobd64c2fef91c2869a2a9f0b1c32a2b86a32e02a3e
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} @category{Share packages} @category{Package linearalgebra}
124 @closecatbox
126 @c -----------------------------------------------------------------------------
127 @need 800
128 @node Functions and Variables for linearalgebra,  , Introduction to linearalgebra, linearalgebra
129 @section Functions and Variables for linearalgebra
130 @c -----------------------------------------------------------------------------
132 @c -----------------------------------------------------------------------------
133 @anchor{addmatrices}
134 @deffn {関数} addmatrices (@var{f}, @var{M_1}, @dots{}, @var{M_n})
136 @c REWORD -- THE RESULT IS NOT GENERALLY THE SUM OF M_1, ..., M_N
137 関数@var{f}を加算関数として使い、
138 行列@var{M_1}, @dots{}, @var{M_n}の和を返します。
139 関数@var{f}は任意の数の引数を受け付けなければいけません(Maxima n項関数)。
141 例:
143 @c ===beg===
144 @c m1 : matrix([1,2],[3,4])$
145 @c m2 : matrix([7,8],[9,10])$
146 @c addmatrices('max,m1,m2);
147 @c addmatrices('max,m1,m2,5*m1);
148 @c ===end===
149 @example
150 (%i1) m1 : matrix([1,2],[3,4])$
151 (%i2) m2 : matrix([7,8],[9,10])$
152 (%i3) addmatrices('max,m1,m2);
153 (%o3) matrix([7,8],[9,10])
154 (%i4) addmatrices('max,m1,m2,5*m1);
155 (%o4) matrix([7,10],[15,20])
156 @end example
158 @opencatbox
159 @category{Package linearalgebra}
160 @closecatbox
161 @end deffn
163 @c -----------------------------------------------------------------------------
164 @anchor{blockmatrixp}
165 @deffn {関数} blockmatrixp (@var{M})
167 @var{M}のエントリがすべて行列なら、その時に限って、
168 trueを返します。
170 @opencatbox
171 @category{Package linearalgebra} @category{Predicate functions}
172 @closecatbox
173 @end deffn
175 @c -----------------------------------------------------------------------------
176 @anchor{columnop}
177 @deffn {関数} columnop (@var{M}, @var{i}, @var{j}, @var{theta})
179 もし@var{M}が行列なら、
180 列演算@code{C_i <- C_i - @var{theta} * C_j}を施すことで生じる行列を返します。
181 もし@var{M}が行@var{i}か行@var{j}を持たないなら
182 エラーをシグナルします。
184 @opencatbox
185 @category{Package linearalgebra}
186 @closecatbox
187 @end deffn
189 @c -----------------------------------------------------------------------------
190 @anchor{columnswap}
191 @deffn {関数} columnswap (@var{M}, @var{i}, @var{j})
193 もし @var{M}が行列なら、列 @var{i}と @var{j}を交換します。
194 もし @var{M}に列 @var{i}か @var{j}がないなら、
195 エラーをシグナルします。
197 @opencatbox
198 @category{Package linearalgebra}
199 @closecatbox
201 @end deffn
203 @c -----------------------------------------------------------------------------
204 @anchor{columnspace}
205 @deffn {関数} columnspace (@var{M})
207 もし @var{M}が行列なら、
208 @code{span (v_1, ..., v_n)}を返します。
209 ここで、集合 @code{@{v_1, ..., v_n@}}は
210 @var{M}の列空間の基底です。
211 空集合の包は @code{@{0@}}です。
212 従って、列空間が1員だけ持つ時、
213 @code{span ()}を返します。
215 @opencatbox
216 @category{Package linearalgebra}
217 @closecatbox
219 @end deffn
221 @c -----------------------------------------------------------------------------
222 @anchor{copy}
223 @deffn {関数} copy (@var{e})
225 Maxima式 @var{e}のコピーを返します。
226 @var{e}は任意のMaxima式であり得ますが、
227 @var{e}がリストか行列の時、
228 コピー関数はもっとも役立ちます;
229 以下を考えてください:
231 @c ===beg===
232 @c m : [1,[2,3]]$
233 @c mm : m$
234 @c mm[2][1] : x$
235 @c m;
236 @c mm;
237 @c ===end===
238 @example 
239 (%i1) m : [1,[2,3]]$
240 (%i2) mm : m$
241 (%i3) mm[2][1] : x$
242 (%i4) m;
243 (%o4)                      [1,[x,3]]
244 (%i5) mm;
245 (%o5)                      [1,[x,3]]
246 @end example
248 同じ実験を試みましょう。
249 しかし、今回 @var{mm}を @var{m}のコピーとします。
251 @c ===beg===
252 @c m : [1,[2,3]]$
253 @c mm : copy(m)$
254 @c mm[2][1] : x$
255 @c m;
256 @c mm;
257 @c ===end===
258 @example
259 (%i6) m : [1,[2,3]]$
260 (%i7) mm : copy(m)$
261 (%i8) mm[2][1] : x$
262 (%i9) m;
263 (%o9)                     [1,[2,3]]
264 (%i10) mm;
265 (%o10)                    [1,[x,3]]
266 @end example
268 今回、 @var{mm}への割り当ては@var{m}の値を変えません。
270 @opencatbox
271 @category{Package linearalgebra}
272 @closecatbox
273 @end deffn
275 @c -----------------------------------------------------------------------------
276 @anchor{cholesky}
277 @deffn  {関数} cholesky (@var{M})
278 @deffnx {関数} cholesky (@var{M}, @var{field})
280 自己共役(すなわちHermite)行列のCholesky分解を返します。
282 二番目の引数はデフォルトでは'generalring'です。
283 @var{field}の取り得る値の説明については @code{lu_factor}を参照してください。
285 @opencatbox
286 @category{Matrix decompositions} @category{Package linearalgebra}
287 @closecatbox
288 @end deffn
290 @c -----------------------------------------------------------------------------
291 @anchor{ctranspose}
292 @deffn {関数} ctranspose (@var{M})
294 行列 @var{M}の複素共役転置を返します。
295 関数 @code{ctranspose}は
296 それぞれの行列要素を転置するのに
297 @code{matrix_element_transpose}を使います。
299 @opencatbox
300 @category{Package linearalgebra}
301 @closecatbox
302 @end deffn
304 @c -----------------------------------------------------------------------------
305 @anchor{diag_matrix}
306 @deffn {関数} diag_matrix (@var{d_1}, @var{d_2},...,@var{d_n})
308 対角成分 @var{d_1}, @var{d_2},...,@var{d_n}を持つ対角行列を返します。
309 対角成分が行列の時、
310 戻り値行列の零成分は
311 適切なサイズの零行列です;
312 例えば:
314 @c ===beg===
315 @c diag_matrix(diag_matrix(1,2),diag_matrix(3,4));
316 @c diag_matrix(p,q);
317 @c ===end===
318 @example
319 (%i1) diag_matrix(diag_matrix(1,2),diag_matrix(3,4));
321                             [ [ 1  0 ]  [ 0  0 ] ]
322                             [ [      ]  [      ] ]
323                             [ [ 0  2 ]  [ 0  0 ] ]
324 (%o1)                       [                    ]
325                             [ [ 0  0 ]  [ 3  0 ] ]
326                             [ [      ]  [      ] ]
327                             [ [ 0  0 ]  [ 0  4 ] ]
328 (%i2) diag_matrix(p,q);
330                                    [ p  0 ]
331 (%o2)                              [      ]
332                                    [ 0  q ]
333 @end example
335 @opencatbox
336 @category{Package linearalgebra}
337 @closecatbox
338 @end deffn
340 @c -----------------------------------------------------------------------------
341 @anchor{dotproduct}
342 @deffn {関数} dotproduct (@var{u}, @var{v})
344 ベクトル @var{u}と @var{v}の内積を返します。
345 これは@code{conjugate (transpose (@var{u})) . @var{v}}と同じです。
346 引数 @var{u}と @var{v}は列ベクトルでなければいけません。
348 @opencatbox
349 @category{Package linearalgebra}
350 @closecatbox
351 @end deffn
353 @c -----------------------------------------------------------------------------
354 @anchor{eigens_by_jacobi}
355 @deffn  {関数} eigens_by_jacobi (@var{A})
356 @deffnx {関数} eigens_by_jacobi (@var{A}, @var{field_type})
358 @var{A}の固有値と固有ベクトルを
359 Jacobi回転法で計算します。
360 @var{A}は対称行列でなければいけません。
361 (しかし、正定値である必要も半正定値である必要もありません。)
362 @var{field_type}は計算上の体を示し、@code{floatfield}か @code{bigfloatfield}です。
363 もし @var{field_type}が指定されないなら、
364 デフォルトは @code{floatfield}です。
366 @var{A}の要素は、数か、
367 (@var{field_type}に依存して)@code{float}か @code{bfloat}を介して
368 数に評価される式でなければいけません。
370 例:
372 @c ===beg===
373 @c S : matrix ([1/sqrt(2), 1/sqrt(2)], [- 1/sqrt(2), 1/sqrt(2)]);
374 @c L : matrix ([sqrt(3), 0], [0, sqrt(5)]);
375 @c M : S . L . transpose (S);
376 @c eigens_by_jacobi (M);
377 @c float ([[sqrt(3), sqrt(5)], S]);
378 @c eigens_by_jacobi (M, bigfloatfield);
379 @c ===end===
381 @example
382 (%i1) S: matrix([1/sqrt(2), 1/sqrt(2)],[-1/sqrt(2), 1/sqrt(2)]);
383                      [     1         1    ]
384                      [  -------   ------- ]
385                      [  sqrt(2)   sqrt(2) ]
386 (%o1)                [                    ]
387                      [      1        1    ]
388                      [ - -------  ------- ]
389                      [   sqrt(2)  sqrt(2) ]
390 (%i2) L : matrix ([sqrt(3), 0], [0, sqrt(5)]);
391                       [ sqrt(3)     0    ]
392 (%o2)                 [                  ]
393                       [    0     sqrt(5) ]
394 (%i3) M : S . L . transpose (S);
395             [ sqrt(5)   sqrt(3)  sqrt(5)   sqrt(3) ]
396             [ ------- + -------  ------- - ------- ]
397             [    2         2        2         2    ]
398 (%o3)       [                                      ]
399             [ sqrt(5)   sqrt(3)  sqrt(5)   sqrt(3) ]
400             [ ------- - -------  ------- + ------- ]
401             [    2         2        2         2    ]
402 (%i4) eigens_by_jacobi (M);
403 The largest percent change was 0.1454972243679
404 The largest percent change was 0.0
405 number of sweeps: 2
406 number of rotations: 1
407 (%o4) [[1.732050807568877, 2.23606797749979], 
408                         [  0.70710678118655   0.70710678118655 ]
409                         [                                      ]]
410                         [ - 0.70710678118655  0.70710678118655 ]
411 (%i5) float ([[sqrt(3), sqrt(5)], S]);
412 (%o5) [[1.732050807568877, 2.23606797749979], 
413                         [  0.70710678118655   0.70710678118655 ]
414                         [                                      ]]
415                         [ - 0.70710678118655  0.70710678118655 ]
416 (%i6) eigens_by_jacobi (M, bigfloatfield);
417 The largest percent change was 1.454972243679028b-1
418 The largest percent change was 0.0b0
419 number of sweeps: 2
420 number of rotations: 1
421 (%o6) [[1.732050807568877b0, 2.23606797749979b0], 
422                 [  7.071067811865475b-1   7.071067811865475b-1 ]
423                 [                                              ]]
424                 [ - 7.071067811865475b-1  7.071067811865475b-1 ]
425 @end example
427 @opencatbox
428 @category{Matrix decompositions} @category{Package linearalgebra}
429 @closecatbox
430 @end deffn
432 @c -----------------------------------------------------------------------------
433 @anchor{get_lu_factors}
434 @deffn {関数} get_lu_factors (@var{x}) 
436 @code{@var{x} = lu_factor (@var{A})}の時、
437 @code{get_lu_factors}は
438 形式 @code{[P, L, U]}のリストを返します。
439 ここで、 @var{P}は置換行列、 @var{L}は対角成分を含む下三角行列、
440 @var{U}は上三角行列であり、
441  @code{@var{A} = @var{P} @var{L} @var{U}}が成り立ちます。
443 @opencatbox
444 @category{Package linearalgebra}
445 @closecatbox
446 @end deffn
448 @c -----------------------------------------------------------------------------
449 @anchor{hankel}
450 @deffn  {関数} hankel (@var{col})
451 @deffnx {関数} hankel (@var{col}, @var{row})
453 Hankel行列 @var{H}を返します。
454 @var{H}の最初の列は @var{col}です;
455 最初の成分を除いて、
456 @var{H}の最後の行は @var{row}です。
457 @var{row}のデフォルトは @var{col}と同じ長さを持つ零ベクトルです。
459 @opencatbox
460 @category{Package linearalgebra}
461 @closecatbox
462 @end deffn
464 @c -----------------------------------------------------------------------------
465 @anchor{hessian}
466 @deffn {関数} hessian (@var{f}, @var{x})
468 変数 @var{x}のリストに関する @var{f}のHessian行列を返します。
469 Hessian行列の @code{(i, j)}成分は
470 @code{diff(@var{f}, @var{x}[i], 1, @var{x}[j], 1)}です。
472 例:
474 @c ===beg===
475 @c hessian (x * sin (y), [x, y]);
476 @c depends (F, [a, b]);
477 @c hessian (F, [a, b]);
478 @c ===end===
479 @example
480 (%i1) hessian (x * sin (y), [x, y]);
481                      [   0       cos(y)   ]
482 (%o1)                [                    ]
483                      [ cos(y)  - x sin(y) ]
484 (%i2) depends (F, [a, b]);
485 (%o2)                       [F(a, b)]
486 (%i3) hessian (F, [a, b]);
487                         [   2      2   ]
488                         [  d F    d F  ]
489                         [  ---   ----- ]
490                         [    2   da db ]
491                         [  da          ]
492 (%o3)                   [              ]
493                         [   2      2   ]
494                         [  d F    d F  ]
495                         [ -----   ---  ]
496                         [ da db     2  ]
497                         [         db   ]
498 @end example
500 @opencatbox
501 @category{Differential calculus} @category{Package linearalgebra}
502 @closecatbox
503 @end deffn
505 @c -----------------------------------------------------------------------------
506 @anchor{hilbert_matrix}
507 @deffn {関数} hilbert_matrix (@var{n})
509 @var{n}掛け@var{n}のHilbert行列を返します。
510 @var{n}が正の整数でない時、エラーをシグナルします。
512 @opencatbox
513 @category{Package linearalgebra}
514 @closecatbox
515 @end deffn
517 @c -----------------------------------------------------------------------------
518 @anchor{identfor}
519 @deffn {関数} identfor (@var{M})
520 @deffnx {関数} identfor (@var{M}, @var{fld})
522 行列 @var{M}と同じ形を持つ単位行列を返します。
523 単位行列の対角成分は体 @var{fld}の乗算単位元です;
524 @var{fld}のデフォルトは @var{generalring}です。
526 一番目の引数 @var{M}は平方行列か非行列でなければいけません。
527 @var{M}が行列の時、 @var{M}のそれぞれの成分は平方行列であり得ます。
528 -- 従って、 @var{M}は区分されたMaxima行列であり得ます。
529 行列は、任意の(有限の)深さに区分できます。
531 @code{zerofor}も参照してください。
533 @opencatbox
534 @category{Package linearalgebra}
535 @closecatbox
536 @end deffn
538 @c -----------------------------------------------------------------------------
539 @anchor{invert_by_lu}
540 @deffn {関数} invert_by_lu (@var{M}, @var{(rng generalring)})
542 LU分解を使って、
543 行列 @var{M}の逆行列を返します。
544 LU分解は環 @var{rng}を使って実行されます。
547 @opencatbox
548 @category{Package linearalgebra}
549 @closecatbox
550 @end deffn
552 @c -----------------------------------------------------------------------------
553 @anchor{jacobian}
554 @deffn {関数} jacobian (@var{f}, @var{x})
556 変数のリスト @var{x}に関する
557 関数のリスト @var{f}のJacobi行列を返します。
558 Jacobi行列の @code{(i, j)}成分は
559 @code{diff(@var{f}[i], @var{x}[j])}です。
561 例:
563 @c ===beg===
564 @c jacobian ([sin (u - v), sin (u * v)], [u, v]);
565 @c depends ([F, G], [y, z]);
566 @c jacobian ([F, G], [y, z]);
567 @c ===end===
568 @example
569 (%i1) jacobian ([sin (u - v), sin (u * v)], [u, v]);
570                   [ cos(v - u)  - cos(v - u) ]
571 (%o1)             [                          ]
572                   [ v cos(u v)   u cos(u v)  ]
573 (%i2) depends ([F, G], [y, z]);
574 (%o2)                  [F(y, z), G(y, z)]
575 (%i3) jacobian ([F, G], [y, z]);
576                            [ dF  dF ]
577                            [ --  -- ]
578                            [ dy  dz ]
579 (%o3)                      [        ]
580                            [ dG  dG ]
581                            [ --  -- ]
582                            [ dy  dz ]
583 @end example
585 @opencatbox
586 @category{Differential calculus} @category{Package linearalgebra}
587 @closecatbox
588 @end deffn
590 @c -----------------------------------------------------------------------------
591 @anchor{kronecker_product}
592 @deffn {関数} kronecker_product (@var{A}, @var{B})
594 行列 @var{A}と @var{B}のKronecker積を返します。
596 @opencatbox
597 @category{Package linearalgebra}
598 @closecatbox
599 @end deffn
601 @c -----------------------------------------------------------------------------
602 @anchor{listp}
603 @deffn  {関数} listp (@var{e}, @var{p})
604 @deffnx {関数} listp (@var{e})
606 オプションの引数 @var{p}が与えられたとして、
607 もし @var{e}がMaximaリストで、 @var{p}がすべてのリストの要素で
608 @code{true}に評価されるなら、 @code{true}を返します。
609 @code{listp}がオプションの引数を与えられない時、
610 もし @var{e}がMaximaリストなら、 @code{true}を返します。
611 他のすべての場合、 @code{false}を返します。
613 @opencatbox
614 @category{Package linearalgebra} @category{Predicate functions}
615 @closecatbox
616 @end deffn
618 @c -----------------------------------------------------------------------------
619 @anchor{locate_matrix_entry}
620 @deffn {関数} locate_matrix_entry (@var{M}, @var{r_1}, @var{c_1}, @var{r_2}, @var{c_2}, @var{f}, @var{rel})
622 一番目の引数は行列でなければいけません;
623 引数 @var{r_1}から @var{c_2}は
624 行 @var{r_1}から @var{r_2}と列 @var{c_1}から @var{c_2}から成る
625 @var{M}の部分行列を決定します。
627 ある性質を満たす部分行列 @var{M}の中の成分を見つけます。
628 3つのケース:
630 (1) @code{@var{rel} = 'bool}で @var{f}が述語論理: 
632 左から右へ、そして上から下へ部分行列をスキャンし、
633 述語論理 @var{f}を満たす最初の成分のインデックスを返します。
634 もし @var{f}を満たす行列成分がないなら、 @code{false}を返します。
636 (2) @code{@var{rel} = 'max}で @var{f}が実関数:
638 @var{f}を最大にする成分を探して部分行列をスキャンします。
639 最大化の成分のインデックスを返します。
641 (3) @code{@var{rel} = 'min}で @var{f}が実関数:
643 @var{f}を最小にする成分を探して部分行列をスキャンします。
644 最小化の成分のインデックスを返します。
646 @opencatbox
647 @category{Package linearalgebra}
648 @closecatbox
650 @end deffn
652 @deffn {関数} lu_backsub (@var{M}, @var{b})
654 @code{@var{M} = lu_factor (@var{A}, @var{field})}の時、
655 @code{lu_backsub (@var{M}, @var{b})}は
656 線形系 @code{@var{A} @var{x} = @var{b}}を解きます。
658 @opencatbox
659 @category{Package linearalgebra}
660 @closecatbox
661 @end deffn
663 @c -----------------------------------------------------------------------------
664 @anchor{lu_factor}
665 @deffn {関数} lu_factor (@var{M}, @var{field})
667 形式 @code{[@var{LU}, @var{perm}, @var{fld}]}か
668 @code{[@var{LU}, @var{perm}, @var{fld}, @var{lower-cnd} @var{upper-cnd}]}
669 のリストを返します。
670 ここで、
672   (1) 行列 @var{LU}は@var{M}の分解をパックされた形式で含みます。
673 パックされた形式は3つのことを意味します;
674 第一に @var{LU}の行はリスト @var{perm}に従って置換されます。
675 もし、例えば、 @var{perm}がリスト @code{[3,2,1]}なら、
676 @var{LU}分解の実際の一番目の行は行列 @var{LU}の三番目の行です。
677 第二に、mの下三角因子はすべて1で置き換えられた対角成分を持つ @var{LU}の下三角部です。
678 第三に、 @var{M}の上三角因子は @var{LU}の上三角部です。
680   (2) 体が @code{floatfield}か @code{complexfield}の時、
681 数 @var{lower-cnd}と @var{upper-cnd}は
682 @var{M}の無限ノルム条件数の下限と上限です。
683 すべての体に対して条件数を見積ることができるわけではありません;
684 そんな体に対しては @code{lu_factor}は2項目リストを返します。
685 下限と上限どちらも真の値から任意に大きな因子だけ異なる可能性があります。
686 (@code{mat_cond}も参照してください。)
687    
688 引数 @var{M}は平方行列でなければいけません。
690 オプション引数 @var{fld}は環か体かを決めるシンボルでなければいけません。
691 予め定義された体と環は以下のものがあります:
693     (a) @code{generalring} -- Maxima式の環,
694     (b) @code{floatfield} --  倍精度浮動小数点数体,
695     (c) @code{complexfield} --  倍精度浮動小数点複素数体,
696     (d) @code{crering}  -- Maxima CRE式の環,
697     (e) @code{rationalfield} -- 有理数体,
698     (f) @code{runningerror} -- 浮動小数点の丸め誤差をトラック,
699     (g) @code{noncommutingring} -- 乗算が非可換ドット演算子のMaxima式の環
701 体が @code{floatfield}か @code{complexfield}、@code{runningerror}のいずれかの時、
702 アルゴリズムは部分ピボットを使います;
703 他のすべての体に対しては、
704 零ピボットを避ける必要があるときだけ、行がスイッチされます。
706 浮動小数点加算算術は結合的でなく、
707 '体'の意味は数学的定義と異なります。
709 体 @code{runningerror}の要素は
710 形式 @code{[x,n]}の2つの要素のMaximaリストです。
711 ここで、 @var{x}は浮動小数点数で、
712 @code{n}は整数です。
713  @code{x}の'真'の値と @code{x}の相対差は
714 計算機イプシロンに @code{n}をかけたもので近似的に抑えられます。
715 The running error bound drops some terms that of the order the square of the machine epsilon.
717 新しい体を定義するユーザーインターフェースはありません。
718 Common Lispに精通しているユーザーは新しい体を定義することができるはずです。
719 これをするには、ユーザーは算術演算のための関数と
720 体表現とMaximaの相互変換のための関数を定義しなければいけません。
721 さらに、(部分ピボットが使われる)順序体に関しては、
722 ユーザーは大きさの関数と体の元の比較関数を定義しなければいけません。
723 あとは、Common Lisp 構造体 @code{mring}を定義することだけです。
724 ファイル @code{mring}に多くの例があります。
726 分解を計算するために、
727 最初の仕事は
728 行列成分それぞれを指定された体の元に変換することです。
729 変換が不可能な時は、分解はエラーメッセージとともに停止します。
730 体の元はMaxima式である必要はありません。
731 例えば、@code{complexfield}の元はCommon Lisp複素数です。
732 そして、分解を計算した後には、行列成分はMaxima式に変換されなければいけません。
734 @code{get_lu_factors}も参照してください。
736 例:
738 @c ===beg===
739 @c w[i,j] := random (1.0) + %i * random (1.0);
740 @c showtime : true$
741 @c M : genmatrix (w, 100, 100)$
742 @c lu_factor (M, complexfield)$
743 @c lu_factor (M, generalring)$
744 @c showtime : false$
745 @c M : matrix ([1 - z, 3], [3, 8 - z]);
746 @c lu_factor (M, generalring);
747 @c get_lu_factors (%);
748 @c %[1] . %[2] . %[3];
749 @c ===end===
750 @example
751 (%i1) w[i,j] := random (1.0) + %i * random (1.0);
752 (%o1)          w     := random(1.) + %i random(1.)
753                 i, j
754 (%i2) showtime : true$
755 Evaluation took 0.00 seconds (0.00 elapsed)
756 (%i3) M : genmatrix (w, 100, 100)$
757 Evaluation took 7.40 seconds (8.23 elapsed)
758 (%i4) lu_factor (M, complexfield)$
759 Evaluation took 28.71 seconds (35.00 elapsed)
760 (%i5) lu_factor (M, generalring)$
761 Evaluation took 109.24 seconds (152.10 elapsed)
762 (%i6) showtime : false$
764 (%i7) M : matrix ([1 - z, 3], [3, 8 - z]); 
765                         [ 1 - z    3   ]
766 (%o7)                   [              ]
767                         [   3    8 - z ]
768 (%i8) lu_factor (M, generalring);
769           [ 1 - z         3        ]
770           [                        ]
771 (%o8)    [[   3            9       ], [1, 2], generalring]
772           [ -----  - z - ----- + 8 ]
773           [ 1 - z        1 - z     ]
774 (%i9) get_lu_factors (%);
775                   [   1    0 ]  [ 1 - z         3        ]
776         [ 1  0 ]  [          ]  [                        ]
777 (%o9)  [[      ], [   3      ], [                9       ]]
778         [ 0  1 ]  [ -----  1 ]  [   0    - z - ----- + 8 ]
779                   [ 1 - z    ]  [              1 - z     ]
780 (%i10) %[1] . %[2] . %[3];
781                         [ 1 - z    3   ]
782 (%o10)                  [              ]
783                         [   3    8 - z ]
784 @end example
786 @opencatbox
787 @category{Matrix decompositions} @category{Package linearalgebra}
788 @closecatbox
789 @end deffn
791 @c -----------------------------------------------------------------------------
792 @anchor{mat_cond}
793 @deffn  {関数} mat_cond (@var{M}, 1)
794 @deffnx {関数} mat_cond (@var{M}, inf)
796 行列 @var{m}の@var{p}-ノルムの行列条件数を返します。
797 @var{p}に許される値は1と @var{inf}です。
798 この関数は、行列 @var{m}の逆元を計算するのにLU分解を使います。
799 このため、@code{mat_cond}の実行時間は行列サイズの三乗に比例します;
800 @code{lu_factor}は、
801 行列サイズの二乗に比例する時間内に
802 無限大ノルム条件数の下限と上限を決定します。
804 @opencatbox
805 @category{Package linearalgebra}
806 @closecatbox
807 @end deffn
809 @c -----------------------------------------------------------------------------
810 @anchor{mat_norm}
811 @deffn  {関数} mat_norm (@var{M}, 1)
812 @deffnx {関数} mat_norm (@var{M}, inf)
813 @deffnx {関数} mat_norm (@var{M}, frobenius)
815 行列 @var{M}の行列 @var{p}-ノルムを返します。
816 .  The allowed values for 
817 @var{p}に許される値は1か @code{inf}か @code{frobenius} (Frobenius行列ノルム)です。
818 行列 @var{M}は区分されない行列でなければいけません。
820 @opencatbox
821 @category{Package linearalgebra}
822 @closecatbox
823 @end deffn
825 @c -----------------------------------------------------------------------------
826 @anchor{linearalgebra_matrixp}
827 @deffn {関数} matrixp (@var{e}, @var{p})
828 @deffnx {関数} matrixp (@var{e})
830 オプション引数 @var{p}が与えられたとして、
831 もし @var{e}が行列で、 @var{p}が行列成分すべてに対して
832 @code{true}に評価されるなら、
833 @code{true}を返します。
834 @code{matrixp}がオプション引数を与えられない時は、
835 もし @code{e}が行列なら、
836 @code{true}を返します。
837 他のすべての場合には、 @code{false}を返します。
839 @code{blockmatrixp}も参照してください。
841 @opencatbox
842 @category{Package linearalgebra} @category{Predicate functions}
843 @closecatbox
844 @end deffn
846 @c -----------------------------------------------------------------------------
847 @anchor{matrix_size}
848 @deffn {関数} matrix_size (@var{M})
850 行列 @var{M}の行数と列数をそれぞれ与える2要素リストを返します。
852 @opencatbox
853 @category{Package linearalgebra}
854 @closecatbox
855 @end deffn
857 @c -----------------------------------------------------------------------------
858 @anchor{mat_fullunblocker}
859 @deffn {関数} mat_fullunblocker (@var{M})
861 もし @var{M}が区分行列なら、
862 行列をすべてのレベルで区分解除します。
863 もし @var{M}が行列なら、
864 @var{M}を返します; それ以外ではエラーをシグナルします。
866 @opencatbox
867 @category{Package linearalgebra}
868 @closecatbox
870 @end deffn
872 @c -----------------------------------------------------------------------------
873 @anchor{mat_trace}
874 @deffn {関数} mat_trace (@var{M})
876 行列 @var{M}の跡を返します。
877 もし @var{M}が行列でないなら、名詞形を返します。
878 @var{M}が区分行列の時、
879 @code{mat_trace(M)}は
880 @code{mat_trace(mat_unblocker(m))}するのと同じ値を返します。
882 @opencatbox
883 @category{Package linearalgebra}
884 @closecatbox
885 @end deffn
887 @c -----------------------------------------------------------------------------
888 @anchor{mat_unblocker}
889 @deffn {関数} mat_unblocker (@var{M})
891 もし @var{M}が区分行列なら、
892 @var{M}を1レベル区分解除します。
893 もし @var{M}が行列なら、
894 @code{mat_unblocker (M)}は @var{M}を返します;
895 それ以外ではエラーをシグナルします。
897 このように、
898 もし @var{M}の成分それぞれが行列なら、
899 @code{mat_unblocker (M)}は区分されていない行列を返しますが、
900 もし @var{M}の成分それぞれが区分行列なら、
901 @code{mat_unblocker (M)}は
902 区分が1レベル少ない区分行列を返します。
904 もし区分行列を使うなら、
905 おそらく、
906 @code{matrix_element_mult}を @code{"."}に、
907 @code{matrix_element_transpose}を @code{'transpose}に設定したくなるでしょう。
908 @code{mat_fullunblocker}も参照してください。
910 例:
912 @c ===beg===
913 @c A : matrix ([1, 2], [3, 4]);
914 @c B : matrix ([7, 8], [9, 10]);
915 @c matrix ([A, B]);
916 @c mat_unblocker (%);
917 @c ===end===
918 @example
919 (%i1) A : matrix ([1, 2], [3, 4]);
920                             [ 1  2 ]
921 (%o1)                       [      ]
922                             [ 3  4 ]
923 (%i2) B : matrix ([7, 8], [9, 10]);
924                             [ 7  8  ]
925 (%o2)                       [       ]
926                             [ 9  10 ]
927 (%i3) matrix ([A, B]);
928 @group
929                      [ [ 1  2 ]  [ 7  8  ] ]
930 (%o3)                [ [      ]  [       ] ]
931                      [ [ 3  4 ]  [ 9  10 ] ]
932 @end group
933 (%i4) mat_unblocker (%);
934                          [ 1  2  7  8  ]
935 (%o4)                    [             ]
936                          [ 3  4  9  10 ]
937 @end example
939 @opencatbox
940 @category{Package linearalgebra}
941 @closecatbox
942 @end deffn
944 @c -----------------------------------------------------------------------------
945 @anchor{nullspace}
946 @deffn {関数} nullspace (@var{M})
948 もし @var{M}が行列なら、
949 @code{span (v_1, ..., v_n)}を返します。
950 ここで、, where the set
951 集合 @code{@{v_1, ..., v_n@}}は
952 @var{M}の零空間の基底です。
953 空集合のスパンは @code{@{0@}}です。
954 なので、零空間が要素を1つだけ持つときは、@code{span ()}を返します。
956 @opencatbox
957 @category{Package linearalgebra}
958 @closecatbox
959 @end deffn
961 @c -----------------------------------------------------------------------------
962 @anchor{nullity}
963 @deffn {関数} nullity (@var{M})
965 もし @var{M}が行列なら、
966 @var{M}の零空間の次元を返します。
968 @opencatbox
969 @category{Package linearalgebra}
970 @closecatbox
971 @end deffn
973 @c -----------------------------------------------------------------------------
974 @anchor{orthogonal_complement}
975 @deffn {関数} orthogonal_complement (@var{v_1}, ..., @var{v_n})
977 @code{span (u_1, ..., u_m)}を返します。
978 ここで、, where the se
979 集合 @code{@{u_1, ..., u_m@}}は
980 集合 @code{(v_1, ..., v_n)}の直交補空間の基底です。
982 ベクトル @var{v_1}から @var{v_n}それぞれは列ベクトルでなければいけません。
984 @opencatbox
985 @category{Package linearalgebra}
986 @closecatbox
987 @end deffn
989 @c -----------------------------------------------------------------------------
990 @anchor{polynomialp}
991 @deffn  {関数} polynomialp (@var{p}, @var{L}, @var{coeffp}, @var{exponp})
992 @deffnx {関数} polynomialp (@var{p}, @var{L}, @var{coeffp})
993 @deffnx {関数} polynomialp (@var{p}, @var{L})
995 もし @var{p}がリスト @var{L}の中の変数に関して多項式なら、
996 @code{true}を返します。
997 述語論理 @var{coeffp}は係数それぞれに対して @code{true}に評価されなければいけなく、
998 述語論理 @var{exponp}は
999 @var{L}の中の変数の指数すべてに対して @code{true}に評価されなければいけません。
1000 もし
1001 @var{exponp}に対してデフォルトでない値を使いたいなら、
1002 たとえ@var{coeffp}に関してデフォルトを使いたくても
1003 @var{coeffp}を値とともに供給しなければいけません。
1005 @c WORK THE FOLLOWING INTO THE PRECEDING
1006 @code{polynomialp (@var{p}, @var{L}, @var{coeffp})}は
1007 @code{polynomialp (@var{p}, @var{L}, @var{coeffp}, 'nonnegintegerp)}に同値です。
1009 @code{polynomialp (@var{p}, @var{L})}は
1010 @code{polynomialp (@var{p}, L@var{,} 'constantp, 'nonnegintegerp)}に同値です。
1012 多項式は展開される必要はありません:
1014 @c ===beg===
1015 @c polynomialp ((x + 1)*(x + 2), [x]);
1016 @c polynomialp ((x + 1)*(x + 2)^a, [x]);
1017 @c ===end===
1018 @example
1019 (%i1) polynomialp ((x + 1)*(x + 2), [x]);
1020 (%o1)                         true
1021 (%i2) polynomialp ((x + 1)*(x + 2)^a, [x]);
1022 (%o2)                         false
1023 @end example
1025 coeffpとexponpにデフォルトでない値を使う例:
1027 @c ===beg===
1028 @c polynomialp ((x + 1)*(x + 2)^(3/2), [x], numberp, numberp);
1029 @c polynomialp ((x^(1/2) + 1)*(x + 2)^(3/2), [x], numberp, 
1030 @c                                                        numberp);
1031 @c ===end===
1032 @example
1033 (%i1) polynomialp ((x + 1)*(x + 2)^(3/2), [x], numberp, numberp);
1034 (%o1)                         true
1035 (%i2) polynomialp ((x^(1/2) + 1)*(x + 2)^(3/2), [x], numberp,
1036                                                         numberp);
1037 (%o2)                         true
1038 @end example
1040 2変数多項式:
1042 @c ===beg===
1043 @c polynomialp (x^2 + 5*x*y + y^2, [x]);
1044 @c polynomialp (x^2 + 5*x*y + y^2, [x, y]);
1045 @c ===end===
1046 @example
1047 (%i1) polynomialp (x^2 + 5*x*y + y^2, [x]);
1048 (%o1)                         false
1049 (%i2) polynomialp (x^2 + 5*x*y + y^2, [x, y]);
1050 (%o2)                         true
1051 @end example
1053 @opencatbox
1054 @category{Package linearalgebra} @category{Predicate functions}
1055 @closecatbox
1056 @end deffn
1058 @c -----------------------------------------------------------------------------
1059 @anchor{polytocompanion}
1060 @deffn {関数} polytocompanion (@var{p}, @var{x})
1062 もし @var{p}が
1063 @var{x}の多項式なら、
1064 @var{p}のコンパニオン行列を返します。
1065 次数 @var{n}のモニック多項式(最高次数の係数が1の多項式)に対しては、
1066 @code{@var{p} = (-1)^@var{n} charpoly (polytocompanion (@var{p}, @var{x}))}.
1067 があります。
1069 @var{p}が @var{x}の多項式でないなら、エラーをシグナルします。
1071 @opencatbox
1072 @category{Package linearalgebra}
1073 @closecatbox
1074 @end deffn
1076 @c -----------------------------------------------------------------------------
1077 @anchor{ptringularize}
1078 @deffn {関数} ptriangularize (@var{M}, @var{v})
1080 もし @var{M}がそれぞれの成分が@var{v}の多項式の行列なら、
1081 以下のような行列 @var{M2}を返します。
1083 (1) @var{M2}は上三角で、
1085 (2) @code{@var{M2} = @var{E_n} ... @var{E_1} @var{M}},
1086 ここで、 @var{E_1}から @var{E_n}は成分が@var{v}の多項式の基本行列です。
1088 (3) @code{|det (@var{M})| = |det (@var{M2})|},
1090 注意: この関数はすべての成分が@var{v}の多項式かチェックしません。
1092 @opencatbox
1093 @category{Package linearalgebra}
1094 @closecatbox
1095 @end deffn
1097 @c -----------------------------------------------------------------------------
1098 @anchor{rowp}
1099 @deffn {関数} rowop (@var{M}, @var{i}, @var{j}, @var{theta})
1101 もし @var{M}が行列なら、
1102 行演算 @code{R_i <- R_i - theta * R_j}をすることで生じる
1103 行列を返します。
1104 もし @var{M}に行@var{i}か @var{j}がないなら、
1105 エラーをシグナルします。
1107 @opencatbox
1108 @category{Package linearalgebra}
1109 @closecatbox
1110 @end deffn
1112 @deffn {関数} rank (@var{M})
1114 行列 @var{M}の階数を返します。
1115 階数は列空間の次元です。
1117 例:
1118 @c ===beg===
1119 @c rank(matrix([1,2],[2,4]));
1120 @c rank(matrix([1,b],[c,d]));
1121 @c ===end===
1122 @example
1123 (%i1) rank(matrix([1,2],[2,4]));
1124 (%o1)                                  1
1125 (%i2) rank(matrix([1,b],[c,d]));
1126 Proviso:  @{d - b c # 0@}
1127 (%o2)                                  2
1128 @end example
1130 @opencatbox
1131 @category{Package linearalgebra}
1132 @closecatbox
1134 @end deffn
1136 @c -----------------------------------------------------------------------------
1137 @anchor{rowswap}
1138 @deffn {関数} rowswap (@var{M}, @var{i}, @var{j})
1140 もし @var{M}が行列なら、行 @var{i}と @var{j}を入れ替えます。
1141 もし @var{M}に行@var{i}か @var{j}がないなら、エラーをシグナルします。
1143 @opencatbox
1144 @category{Package linearalgebra}
1145 @closecatbox
1146 @end deffn
1148 @c -----------------------------------------------------------------------------
1149 @anchor{toeplitz}
1150 @deffn {関数} toeplitz (@var{col})
1151 @deffnx {関数} toeplitz (@var{col}, @var{row})
1153 Toeplitz行列 @var{T}を返します。
1154 @var{T}の一番目の列は @var{col}です;
1155 一番目の成分を除いて、
1156 @var{T}の最初の行は @var{row}です。
1157 @var{row}のデフォルトは @var{col}の複素共役です。
1159 例:
1160 @c ===beg===
1161 @c toeplitz([1,2,3],[x,y,z]);
1162 @c toeplitz([1,1+%i]);
1163 @c ==end===
1164 @example
1165 (%i1)  toeplitz([1,2,3],[x,y,z]);
1166 @group
1168                                   [ 1  y  z ]
1169                                   [         ]
1170 (%o1)                             [ 2  1  y ]
1171                                   [         ]
1172                                   [ 3  2  1 ]
1173 @end group
1174 (%i2)  toeplitz([1,1+%i]);
1176                               [   1     1 - %I ]
1177 (%o2)                         [                ]
1178                               [ %I + 1    1    ]
1179 @end example
1181 @opencatbox
1182 @category{Package linearalgebra}
1183 @closecatbox
1184 @end deffn
1186 @c -----------------------------------------------------------------------------
1187 @anchor{vandermonde_matrix}
1188 @deffn {関数} vandermonde_matrix ([@var{x_1}, ..., @var{x_n}])
1190 @var{i}番目の行が@code{[1, @var{x_i}, @var{x_i}^2, ... @var{x_i}^(@var{n}-1)]}の
1191 @var{n}掛け@var{n}行列を返します。
1194 @opencatbox
1195 @category{Package linearalgebra}
1196 @closecatbox
1197 @end deffn
1199 @c -----------------------------------------------------------------------------
1200 @anchor{zerofor}
1201 @deffn  {関数} zerofor (@var{M})
1202 @deffnx {関数} zerofor (@var{M}, @var{fld})
1204 行列 @var{M}と同じ形の零行列を返します。
1205 零行列の成分すべては体 @var{fld}の加算の単位元です;
1206 @var{fld}のデフォルトは @var{generalring}です。
1208 一番目の引数 @var{M}は
1209 平方行列か行列以外でなければいけません。
1210 @var{M}が行列の時、
1211 @var{M}の成分それぞれは平方行列であり得ます。
1212 -- 従って @var{M}は区分Maxima行列であり得ます。
1213 行列は任意の(有限の)深さに区分できます。
1215 @code{identfor}も参照してください。
1217 @opencatbox
1218 @category{Package linearalgebra}
1219 @closecatbox
1220 @end deffn
1222 @c -----------------------------------------------------------------------------
1223 @anchor{zeromatrixp}
1224 @deffn {関数} zeromatrixp (@var{M})
1226 @var{M}が区分行列でない時、
1227 もし行列 @var{M}のそれぞれの要素 @var{e}に対して
1228 @code{is (equal (@var{e}, 0))}が真なら、
1229 @code{true}を返します。
1230 @var{M}が区分行列の時、
1231 もし@var{e}の要素それぞれに対して @code{zeromatrixp}が
1232 @code{true}に評価されるなら、
1233 @code{true}を返します。
1235 @opencatbox
1236 @category{Package linearalgebra} @category{Predicate functions}
1237 @closecatbox
1238 @end deffn