2 * Introduction to linearalgebra::
3 * Functions and Variables for linearalgebra::
6 @c -----------------------------------------------------------------------------
7 @node Introduction to linearalgebra, Functions and Variables for linearalgebra, linearalgebra, linearalgebra
8 @section Introduction to linearalgebra
9 @c -----------------------------------------------------------------------------
11 @code{linearalgebra}は線形代数に関する関数のコレクションです。
16 @c M : matrix ([1, 2], [1, 2]);
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);
23 @c tellrat (MM [3, 3]);
26 @c M : matrix ([1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12],
29 @c apply ('orthogonal_complement, args (nullspace (transpose (M))));
32 (%i1) M : matrix ([1, 2], [1, 2]);
42 (%i3) columnspace (M);
46 (%i4) ptriangularize (M - z*ident(2), z);
51 (%i5) M : matrix ([1, 2, 3], [4, 5, 6], [7, 8, 9]) - z*ident(3);
57 (%i6) MM : ptriangularize (M, z);
62 [ 0 -- - -- + ----- + --- ]
67 [ 0 0 ----- - ------ - ----- ]
69 (%i7) algebraic : true;
71 (%i8) tellrat (MM [3, 3]);
73 (%o8) [z - 15 z - 18 z]
74 (%i9) MM : ratsimp (MM);
78 (%o9) [ 66 7 z - 102 z - 132 ]
79 [ 0 -- - ------------------ ]
83 (%i10) nullspace (MM);
95 (%i11) M : matrix ([1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12],
104 (%i12) columnspace (M);
108 (%o12) span([ ], [ ])
112 (%i13) apply ('orthogonal_complement, args (nullspace (transpose (M))));
116 (%o13) span([ ], [ ])
123 @category{Linear algebra}
124 @category{Share packages}
125 @category{Package linearalgebra}
128 @c -----------------------------------------------------------------------------
130 @node Functions and Variables for linearalgebra, , Introduction to linearalgebra, linearalgebra
131 @section Functions and Variables for linearalgebra
132 @c -----------------------------------------------------------------------------
134 @c -----------------------------------------------------------------------------
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
140 行列@var{M_1}, @dots{}, @var{M_n}の和を返します。
141 関数@var{f}は任意の数の引数を受け付けなければいけません(Maxima n項関数)。
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);
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])
161 @category{Package linearalgebra}
165 @c -----------------------------------------------------------------------------
166 @anchor{blockmatrixp}
167 @deffn {関数} blockmatrixp (@var{M})
169 @var{M}のエントリがすべて行列なら、その時に限って、
173 @category{Package linearalgebra}
174 @category{Predicate functions}
178 @c -----------------------------------------------------------------------------
180 @deffn {関数} columnop (@var{M}, @var{i}, @var{j}, @var{theta})
183 列演算@code{C_i <- C_i - @var{theta} * C_j}を施すことで生じる行列を返します。
184 もし@var{M}が行@var{i}か行@var{j}を持たないなら
188 @category{Package linearalgebra}
192 @c -----------------------------------------------------------------------------
194 @deffn {関数} columnswap (@var{M}, @var{i}, @var{j})
196 もし @var{M}が行列なら、列 @var{i}と @var{j}を交換します。
197 もし @var{M}に列 @var{i}か @var{j}がないなら、
201 @category{Package linearalgebra}
206 @c -----------------------------------------------------------------------------
208 @deffn {関数} columnspace (@var{M})
211 @code{span (v_1, ..., v_n)}を返します。
212 ここで、集合 @code{@{v_1, ..., v_n@}}は
214 空集合の包は @code{@{0@}}です。
219 @category{Package linearalgebra}
224 @c -----------------------------------------------------------------------------
226 @deffn {関数} copy (@var{e})
228 Maxima式 @var{e}のコピーを返します。
229 @var{e}は任意のMaxima式であり得ますが、
252 しかし、今回 @var{mm}を @var{m}のコピーとします。
271 今回、 @var{mm}への割り当ては@var{m}の値を変えません。
274 @category{Package linearalgebra}
278 @c -----------------------------------------------------------------------------
280 @deffn {関数} cholesky (@var{M})
281 @deffnx {関数} cholesky (@var{M}, @var{field})
283 自己共役(すなわちHermite)行列のCholesky分解を返します。
285 二番目の引数はデフォルトでは'generalring'です。
286 @var{field}の取り得る値の説明については @code{lu_factor}を参照してください。
289 @category{Matrix decompositions}
290 @category{Package linearalgebra}
294 @c -----------------------------------------------------------------------------
296 @deffn {関数} ctranspose (@var{M})
298 行列 @var{M}の複素共役転置を返します。
299 関数 @code{ctranspose}は
301 @code{matrix_element_transpose}を使います。
304 @category{Package linearalgebra}
308 @c -----------------------------------------------------------------------------
310 @deffn {関数} diag_matrix (@var{d_1}, @var{d_2},...,@var{d_n})
312 対角成分 @var{d_1}, @var{d_2},...,@var{d_n}を持つ対角行列を返します。
319 @c diag_matrix(diag_matrix(1,2),diag_matrix(3,4));
323 (%i1) diag_matrix(diag_matrix(1,2),diag_matrix(3,4));
332 (%i2) diag_matrix(p,q);
340 @category{Package linearalgebra}
344 @c -----------------------------------------------------------------------------
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}は列ベクトルでなければいけません。
353 @category{Package linearalgebra}
357 @c -----------------------------------------------------------------------------
358 @anchor{eigens_by_jacobi}
359 @deffn {関数} eigens_by_jacobi (@var{A})
360 @deffnx {関数} eigens_by_jacobi (@var{A}, @var{field_type})
364 @var{A}は対称行列でなければいけません。
365 (しかし、正定値である必要も半正定値である必要もありません。)
366 @var{field_type}は計算上の体を示し、@code{floatfield}か @code{bigfloatfield}です。
367 もし @var{field_type}が指定されないなら、
368 デフォルトは @code{floatfield}です。
371 (@var{field_type}に依存して)@code{float}か @code{bfloat}を介して
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);
386 (%i1) S: matrix([1/sqrt(2), 1/sqrt(2)],[-1/sqrt(2), 1/sqrt(2)]);
392 [ - ------- ------- ]
394 (%i2) L : matrix ([sqrt(3), 0], [0, sqrt(5)]);
398 (%i3) M : S . L . transpose (S);
399 [ sqrt(5) sqrt(3) sqrt(5) sqrt(3) ]
400 [ ------- + ------- ------- - ------- ]
403 [ sqrt(5) sqrt(3) sqrt(5) sqrt(3) ]
404 [ ------- - ------- ------- + ------- ]
406 (%i4) eigens_by_jacobi (M);
407 The largest percent change was 0.1454972243679
408 The largest percent change was 0.0
410 number of rotations: 1
411 (%o4) [[1.732050807568877, 2.23606797749979],
412 [ 0.70710678118655 0.70710678118655 ]
414 [ - 0.70710678118655 0.70710678118655 ]
415 (%i5) float ([[sqrt(3), sqrt(5)], S]);
416 (%o5) [[1.732050807568877, 2.23606797749979],
417 [ 0.70710678118655 0.70710678118655 ]
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
424 number of rotations: 1
425 (%o6) [[1.732050807568877b0, 2.23606797749979b0],
426 [ 7.071067811865475b-1 7.071067811865475b-1 ]
428 [ - 7.071067811865475b-1 7.071067811865475b-1 ]
432 @category{Matrix decompositions}
433 @category{Package linearalgebra}
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}は対角成分を含む下三角行列、
446 @code{@var{A} = @var{P} @var{L} @var{U}}が成り立ちます。
449 @category{Package linearalgebra}
453 @c -----------------------------------------------------------------------------
455 @deffn {関数} hankel (@var{col})
456 @deffnx {関数} hankel (@var{col}, @var{row})
458 Hankel行列 @var{H}を返します。
459 @var{H}の最初の列は @var{col}です;
461 @var{H}の最後の行は @var{row}です。
462 @var{row}のデフォルトは @var{col}と同じ長さを持つ零ベクトルです。
465 @category{Package linearalgebra}
469 @c -----------------------------------------------------------------------------
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)}です。
480 @c hessian (x * sin (y), [x, y]);
481 @c depends (F, [a, b]);
482 @c hessian (F, [a, b]);
485 (%i1) hessian (x * sin (y), [x, y]);
488 [ cos(y) - x sin(y) ]
489 (%i2) depends (F, [a, b]);
491 (%i3) hessian (F, [a, b]);
506 @category{Differential calculus}
507 @category{Package linearalgebra}
511 @c -----------------------------------------------------------------------------
512 @anchor{hilbert_matrix}
513 @deffn {関数} hilbert_matrix (@var{n})
515 @var{n}掛け@var{n}のHilbert行列を返します。
516 @var{n}が正の整数でない時、エラーをシグナルします。
519 @category{Package linearalgebra}
523 @c -----------------------------------------------------------------------------
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}も参照してください。
540 @category{Package linearalgebra}
544 @c -----------------------------------------------------------------------------
545 @anchor{invert_by_lu}
546 @deffn {関数} invert_by_lu (@var{M}, @var{(rng generalring)})
550 LU分解は環 @var{rng}を使って実行されます。
554 @category{Package linearalgebra}
558 @c -----------------------------------------------------------------------------
560 @deffn {関数} jacobian (@var{f}, @var{x})
563 関数のリスト @var{f}のJacobi行列を返します。
564 Jacobi行列の @code{(i, j)}成分は
565 @code{diff(@var{f}[i], @var{x}[j])}です。
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]);
575 (%i1) jacobian ([sin (u - v), sin (u * v)], [u, v]);
576 [ cos(v - u) - cos(v - u) ]
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]);
592 @category{Differential calculus}
593 @category{Package linearalgebra}
597 @c -----------------------------------------------------------------------------
598 @anchor{kronecker_product}
599 @deffn {関数} kronecker_product (@var{A}, @var{B})
601 行列 @var{A}と @var{B}のKronecker積を返します。
604 @category{Package linearalgebra}
608 @c -----------------------------------------------------------------------------
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}を返します。
621 @category{Package linearalgebra}
622 @category{Predicate functions}
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})
631 引数 @var{r_1}から @var{c_2}は
632 行 @var{r_1}から @var{r_2}と列 @var{c_1}から @var{c_2}から成る
635 ある性質を満たす部分行列 @var{M}の中の成分を見つけます。
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}を最大にする成分を探して部分行列をスキャンします。
649 (3) @code{@var{rel} = 'min}で @var{f}が実関数:
651 @var{f}を最小にする成分を探して部分行列をスキャンします。
655 @category{Package linearalgebra}
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}}を解きます。
667 @category{Package linearalgebra}
671 @c -----------------------------------------------------------------------------
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}]}
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}も参照してください。)
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}のいずれかの時、
712 零ピボットを避ける必要があるときだけ、行がスイッチされます。
717 体 @code{runningerror}の要素は
718 形式 @code{[x,n]}の2つの要素のMaximaリストです。
719 ここで、 @var{x}は浮動小数点数で、
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}に多くの例があります。
736 行列成分それぞれを指定された体の元に変換することです。
737 変換が不可能な時は、分解はエラーメッセージとともに停止します。
738 体の元はMaxima式である必要はありません。
739 例えば、@code{complexfield}の元はCommon Lisp複素数です。
740 そして、分解を計算した後には、行列成分はMaxima式に変換されなければいけません。
742 @code{get_lu_factors}も参照してください。
747 @c w[i,j] := random (1.0) + %i * random (1.0);
749 @c M : genmatrix (w, 100, 100)$
750 @c lu_factor (M, complexfield)$
751 @c lu_factor (M, generalring)$
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];
759 (%i1) w[i,j] := random (1.0) + %i * random (1.0);
760 (%o1) w := random(1.) + %i random(1.)
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]);
776 (%i8) lu_factor (M, generalring);
779 (%o8) [[ 3 9 ], [1, 2], generalring]
780 [ ----- - z - ----- + 8 ]
782 (%i9) get_lu_factors (%);
785 (%o9) [[ ], [ 3 ], [ 9 ]]
786 [ 0 1 ] [ ----- 1 ] [ 0 - z - ----- + 8 ]
788 (%i10) %[1] . %[2] . %[3];
795 @category{Matrix decompositions}
796 @category{Package linearalgebra}
800 @c -----------------------------------------------------------------------------
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}の実行時間は行列サイズの三乗に比例します;
811 無限大ノルム条件数の下限と上限を決定します。
814 @category{Package linearalgebra}
818 @c -----------------------------------------------------------------------------
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}は区分されない行列でなければいけません。
830 @category{Package linearalgebra}
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}が行列成分すべてに対して
843 @code{matrixp}がオプション引数を与えられない時は、
846 他のすべての場合には、 @code{false}を返します。
848 @code{blockmatrixp}も参照してください。
851 @category{Package linearalgebra}
852 @category{Predicate functions}
856 @c -----------------------------------------------------------------------------
858 @deffn {関数} matrix_size (@var{M})
860 行列 @var{M}の行数と列数をそれぞれ与える2要素リストを返します。
863 @category{Package linearalgebra}
867 @c -----------------------------------------------------------------------------
868 @anchor{mat_fullunblocker}
869 @deffn {関数} mat_fullunblocker (@var{M})
874 @var{M}を返します; それ以外ではエラーをシグナルします。
877 @category{Package linearalgebra}
882 @c -----------------------------------------------------------------------------
884 @deffn {関数} mat_trace (@var{M})
887 もし @var{M}が行列でないなら、名詞形を返します。
890 @code{mat_trace(mat_unblocker(m))}するのと同じ値を返します。
893 @category{Package linearalgebra}
897 @c -----------------------------------------------------------------------------
898 @anchor{mat_unblocker}
899 @deffn {関数} mat_unblocker (@var{M})
904 @code{mat_unblocker (M)}は @var{M}を返します;
908 もし @var{M}の成分それぞれが行列なら、
909 @code{mat_unblocker (M)}は区分されていない行列を返しますが、
910 もし @var{M}の成分それぞれが区分行列なら、
911 @code{mat_unblocker (M)}は
916 @code{matrix_element_mult}を @code{"."}に、
917 @code{matrix_element_transpose}を @code{'transpose}に設定したくなるでしょう。
918 @code{mat_fullunblocker}も参照してください。
923 @c A : matrix ([1, 2], [3, 4]);
924 @c B : matrix ([7, 8], [9, 10]);
926 @c mat_unblocker (%);
929 (%i1) A : matrix ([1, 2], [3, 4]);
933 (%i2) B : matrix ([7, 8], [9, 10]);
937 (%i3) matrix ([A, B]);
943 (%i4) mat_unblocker (%);
950 @category{Package linearalgebra}
954 @c -----------------------------------------------------------------------------
956 @deffn {関数} nullspace (@var{M})
959 @code{span (v_1, ..., v_n)}を返します。
961 集合 @code{@{v_1, ..., v_n@}}は
963 空集合のスパンは @code{@{0@}}です。
964 なので、零空間が要素を1つだけ持つときは、@code{span ()}を返します。
967 @category{Package linearalgebra}
971 @c -----------------------------------------------------------------------------
973 @deffn {関数} nullity (@var{M})
979 @category{Package linearalgebra}
983 @c -----------------------------------------------------------------------------
984 @anchor{orthogonal_complement}
985 @deffn {関数} orthogonal_complement (@var{v_1}, ..., @var{v_n})
987 @code{span (u_1, ..., u_m)}を返します。
989 集合 @code{@{u_1, ..., u_m@}}は
990 集合 @code{(v_1, ..., v_n)}の直交補空間の基底です。
992 ベクトル @var{v_1}から @var{v_n}それぞれは列ベクトルでなければいけません。
995 @category{Package linearalgebra}
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}の中の変数に関して多項式なら、
1007 述語論理 @var{coeffp}は係数それぞれに対して @code{true}に評価されなければいけなく、
1009 @var{L}の中の変数の指数すべてに対して @code{true}に評価されなければいけません。
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)}に同値です。
1025 @c polynomialp ((x + 1)*(x + 2), [x]);
1026 @c polynomialp ((x + 1)*(x + 2)^a, [x]);
1029 (%i1) polynomialp ((x + 1)*(x + 2), [x]);
1031 (%i2) polynomialp ((x + 1)*(x + 2)^a, [x]);
1035 coeffpとexponpにデフォルトでない値を使う例:
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,
1043 (%i1) polynomialp ((x + 1)*(x + 2)^(3/2), [x], numberp, numberp);
1045 (%i2) polynomialp ((x^(1/2) + 1)*(x + 2)^(3/2), [x], numberp,
1053 @c polynomialp (x^2 + 5*x*y + y^2, [x]);
1054 @c polynomialp (x^2 + 5*x*y + y^2, [x, y]);
1057 (%i1) polynomialp (x^2 + 5*x*y + y^2, [x]);
1059 (%i2) polynomialp (x^2 + 5*x*y + y^2, [x, y]);
1064 @category{Package linearalgebra}
1065 @category{Predicate functions}
1069 @c -----------------------------------------------------------------------------
1070 @anchor{polytocompanion}
1071 @deffn {関数} polytocompanion (@var{p}, @var{x})
1075 @var{p}のコンパニオン行列を返します。
1076 次数 @var{n}のモニック多項式(最高次数の係数が1の多項式)に対しては、
1077 @code{@var{p} = (-1)^@var{n} charpoly (polytocompanion (@var{p}, @var{x}))}.
1080 @var{p}が @var{x}の多項式でないなら、エラーをシグナルします。
1083 @category{Package linearalgebra}
1087 @c -----------------------------------------------------------------------------
1088 @anchor{ptringularize}
1089 @deffn {関数} ptriangularize (@var{M}, @var{v})
1091 もし @var{M}がそれぞれの成分が@var{v}の多項式の行列なら、
1092 以下のような行列 @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}の多項式かチェックしません。
1104 @category{Package linearalgebra}
1108 @c -----------------------------------------------------------------------------
1110 @deffn {関数} rowop (@var{M}, @var{i}, @var{j}, @var{theta})
1113 行演算 @code{R_i <- R_i - theta * R_j}をすることで生じる
1115 もし @var{M}に行@var{i}か @var{j}がないなら、
1119 @category{Package linearalgebra}
1123 @deffn {関数} rank (@var{M})
1130 @c rank(matrix([1,2],[2,4]));
1131 @c rank(matrix([1,b],[c,d]));
1134 (%i1) rank(matrix([1,2],[2,4]));
1136 (%i2) rank(matrix([1,b],[c,d]));
1137 Proviso: @{d - b c # 0@}
1142 @category{Package linearalgebra}
1147 @c -----------------------------------------------------------------------------
1149 @deffn {関数} rowswap (@var{M}, @var{i}, @var{j})
1151 もし @var{M}が行列なら、行 @var{i}と @var{j}を入れ替えます。
1152 もし @var{M}に行@var{i}か @var{j}がないなら、エラーをシグナルします。
1155 @category{Package linearalgebra}
1159 @c -----------------------------------------------------------------------------
1161 @deffn {関数} toeplitz (@var{col})
1162 @deffnx {関数} toeplitz (@var{col}, @var{row})
1164 Toeplitz行列 @var{T}を返します。
1165 @var{T}の一番目の列は @var{col}です;
1167 @var{T}の最初の行は @var{row}です。
1168 @var{row}のデフォルトは @var{col}の複素共役です。
1172 @c toeplitz([1,2,3],[x,y,z]);
1173 @c toeplitz([1,1+%i]);
1176 (%i1) toeplitz([1,2,3],[x,y,z]);
1185 (%i2) toeplitz([1,1+%i]);
1193 @category{Package linearalgebra}
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}行列を返します。
1206 @category{Package linearalgebra}
1210 @c -----------------------------------------------------------------------------
1212 @deffn {関数} zerofor (@var{M})
1213 @deffnx {関数} zerofor (@var{M}, @var{fld})
1215 行列 @var{M}と同じ形の零行列を返します。
1216 零行列の成分すべては体 @var{fld}の加算の単位元です;
1217 @var{fld}のデフォルトは @var{generalring}です。
1220 平方行列か行列以外でなければいけません。
1222 @var{M}の成分それぞれは平方行列であり得ます。
1223 -- 従って @var{M}は区分Maxima行列であり得ます。
1224 行列は任意の(有限の)深さに区分できます。
1226 @code{identfor}も参照してください。
1229 @category{Package linearalgebra}
1233 @c -----------------------------------------------------------------------------
1234 @anchor{zeromatrixp}
1235 @deffn {関数} zeromatrixp (@var{M})
1238 もし行列 @var{M}のそれぞれの要素 @var{e}に対して
1239 @code{is (equal (@var{e}, 0))}が真なら、
1242 もし@var{e}の要素それぞれに対して @code{zeromatrixp}が
1243 @code{true}に評価されるなら、
1247 @category{Package linearalgebra}
1248 @category{Predicate functions}