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} @category{Share packages} @category{Package linearalgebra}
126 @c -----------------------------------------------------------------------------
128 @node Functions and Variables for linearalgebra, , Introduction to linearalgebra, linearalgebra
129 @section Functions and Variables for linearalgebra
130 @c -----------------------------------------------------------------------------
132 @c -----------------------------------------------------------------------------
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
138 行列@var{M_1}, @dots{}, @var{M_n}の和を返します。
139 関数@var{f}は任意の数の引数を受け付けなければいけません(Maxima n項関数)。
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);
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])
159 @category{Package linearalgebra}
163 @c -----------------------------------------------------------------------------
164 @anchor{blockmatrixp}
165 @deffn {関数} blockmatrixp (@var{M})
167 @var{M}のエントリがすべて行列なら、その時に限って、
171 @category{Package linearalgebra} @category{Predicate functions}
175 @c -----------------------------------------------------------------------------
177 @deffn {関数} columnop (@var{M}, @var{i}, @var{j}, @var{theta})
180 列演算@code{C_i <- C_i - @var{theta} * C_j}を施すことで生じる行列を返します。
181 もし@var{M}が行@var{i}か行@var{j}を持たないなら
185 @category{Package linearalgebra}
189 @c -----------------------------------------------------------------------------
191 @deffn {関数} columnswap (@var{M}, @var{i}, @var{j})
193 もし @var{M}が行列なら、列 @var{i}と @var{j}を交換します。
194 もし @var{M}に列 @var{i}か @var{j}がないなら、
198 @category{Package linearalgebra}
203 @c -----------------------------------------------------------------------------
205 @deffn {関数} columnspace (@var{M})
208 @code{span (v_1, ..., v_n)}を返します。
209 ここで、集合 @code{@{v_1, ..., v_n@}}は
211 空集合の包は @code{@{0@}}です。
216 @category{Package linearalgebra}
221 @c -----------------------------------------------------------------------------
223 @deffn {関数} copy (@var{e})
225 Maxima式 @var{e}のコピーを返します。
226 @var{e}は任意のMaxima式であり得ますが、
249 しかし、今回 @var{mm}を @var{m}のコピーとします。
268 今回、 @var{mm}への割り当ては@var{m}の値を変えません。
271 @category{Package linearalgebra}
275 @c -----------------------------------------------------------------------------
277 @deffn {関数} cholesky (@var{M})
278 @deffnx {関数} cholesky (@var{M}, @var{field})
280 自己共役(すなわちHermite)行列のCholesky分解を返します。
282 二番目の引数はデフォルトでは'generalring'です。
283 @var{field}の取り得る値の説明については @code{lu_factor}を参照してください。
286 @category{Matrix decompositions} @category{Package linearalgebra}
290 @c -----------------------------------------------------------------------------
292 @deffn {関数} ctranspose (@var{M})
294 行列 @var{M}の複素共役転置を返します。
295 関数 @code{ctranspose}は
297 @code{matrix_element_transpose}を使います。
300 @category{Package linearalgebra}
304 @c -----------------------------------------------------------------------------
306 @deffn {関数} diag_matrix (@var{d_1}, @var{d_2},...,@var{d_n})
308 対角成分 @var{d_1}, @var{d_2},...,@var{d_n}を持つ対角行列を返します。
315 @c diag_matrix(diag_matrix(1,2),diag_matrix(3,4));
319 (%i1) diag_matrix(diag_matrix(1,2),diag_matrix(3,4));
328 (%i2) diag_matrix(p,q);
336 @category{Package linearalgebra}
340 @c -----------------------------------------------------------------------------
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}は列ベクトルでなければいけません。
349 @category{Package linearalgebra}
353 @c -----------------------------------------------------------------------------
354 @anchor{eigens_by_jacobi}
355 @deffn {関数} eigens_by_jacobi (@var{A})
356 @deffnx {関数} eigens_by_jacobi (@var{A}, @var{field_type})
360 @var{A}は対称行列でなければいけません。
361 (しかし、正定値である必要も半正定値である必要もありません。)
362 @var{field_type}は計算上の体を示し、@code{floatfield}か @code{bigfloatfield}です。
363 もし @var{field_type}が指定されないなら、
364 デフォルトは @code{floatfield}です。
367 (@var{field_type}に依存して)@code{float}か @code{bfloat}を介して
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);
382 (%i1) S: matrix([1/sqrt(2), 1/sqrt(2)],[-1/sqrt(2), 1/sqrt(2)]);
388 [ - ------- ------- ]
390 (%i2) L : matrix ([sqrt(3), 0], [0, sqrt(5)]);
394 (%i3) M : S . L . transpose (S);
395 [ sqrt(5) sqrt(3) sqrt(5) sqrt(3) ]
396 [ ------- + ------- ------- - ------- ]
399 [ sqrt(5) sqrt(3) sqrt(5) sqrt(3) ]
400 [ ------- - ------- ------- + ------- ]
402 (%i4) eigens_by_jacobi (M);
403 The largest percent change was 0.1454972243679
404 The largest percent change was 0.0
406 number of rotations: 1
407 (%o4) [[1.732050807568877, 2.23606797749979],
408 [ 0.70710678118655 0.70710678118655 ]
410 [ - 0.70710678118655 0.70710678118655 ]
411 (%i5) float ([[sqrt(3), sqrt(5)], S]);
412 (%o5) [[1.732050807568877, 2.23606797749979],
413 [ 0.70710678118655 0.70710678118655 ]
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
420 number of rotations: 1
421 (%o6) [[1.732050807568877b0, 2.23606797749979b0],
422 [ 7.071067811865475b-1 7.071067811865475b-1 ]
424 [ - 7.071067811865475b-1 7.071067811865475b-1 ]
428 @category{Matrix decompositions} @category{Package linearalgebra}
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}は対角成分を含む下三角行列、
441 @code{@var{A} = @var{P} @var{L} @var{U}}が成り立ちます。
444 @category{Package linearalgebra}
448 @c -----------------------------------------------------------------------------
450 @deffn {関数} hankel (@var{col})
451 @deffnx {関数} hankel (@var{col}, @var{row})
453 Hankel行列 @var{H}を返します。
454 @var{H}の最初の列は @var{col}です;
456 @var{H}の最後の行は @var{row}です。
457 @var{row}のデフォルトは @var{col}と同じ長さを持つ零ベクトルです。
460 @category{Package linearalgebra}
464 @c -----------------------------------------------------------------------------
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)}です。
475 @c hessian (x * sin (y), [x, y]);
476 @c depends (F, [a, b]);
477 @c hessian (F, [a, b]);
480 (%i1) hessian (x * sin (y), [x, y]);
483 [ cos(y) - x sin(y) ]
484 (%i2) depends (F, [a, b]);
486 (%i3) hessian (F, [a, b]);
501 @category{Differential calculus} @category{Package linearalgebra}
505 @c -----------------------------------------------------------------------------
506 @anchor{hilbert_matrix}
507 @deffn {関数} hilbert_matrix (@var{n})
509 @var{n}掛け@var{n}のHilbert行列を返します。
510 @var{n}が正の整数でない時、エラーをシグナルします。
513 @category{Package linearalgebra}
517 @c -----------------------------------------------------------------------------
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}も参照してください。
534 @category{Package linearalgebra}
538 @c -----------------------------------------------------------------------------
539 @anchor{invert_by_lu}
540 @deffn {関数} invert_by_lu (@var{M}, @var{(rng generalring)})
544 LU分解は環 @var{rng}を使って実行されます。
548 @category{Package linearalgebra}
552 @c -----------------------------------------------------------------------------
554 @deffn {関数} jacobian (@var{f}, @var{x})
557 関数のリスト @var{f}のJacobi行列を返します。
558 Jacobi行列の @code{(i, j)}成分は
559 @code{diff(@var{f}[i], @var{x}[j])}です。
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]);
569 (%i1) jacobian ([sin (u - v), sin (u * v)], [u, v]);
570 [ cos(v - u) - cos(v - u) ]
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]);
586 @category{Differential calculus} @category{Package linearalgebra}
590 @c -----------------------------------------------------------------------------
591 @anchor{kronecker_product}
592 @deffn {関数} kronecker_product (@var{A}, @var{B})
594 行列 @var{A}と @var{B}のKronecker積を返します。
597 @category{Package linearalgebra}
601 @c -----------------------------------------------------------------------------
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}を返します。
614 @category{Package linearalgebra} @category{Predicate functions}
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})
623 引数 @var{r_1}から @var{c_2}は
624 行 @var{r_1}から @var{r_2}と列 @var{c_1}から @var{c_2}から成る
627 ある性質を満たす部分行列 @var{M}の中の成分を見つけます。
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}を最大にする成分を探して部分行列をスキャンします。
641 (3) @code{@var{rel} = 'min}で @var{f}が実関数:
643 @var{f}を最小にする成分を探して部分行列をスキャンします。
647 @category{Package linearalgebra}
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}}を解きます。
659 @category{Package linearalgebra}
663 @c -----------------------------------------------------------------------------
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}]}
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}も参照してください。)
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}のいずれかの時、
704 零ピボットを避ける必要があるときだけ、行がスイッチされます。
709 体 @code{runningerror}の要素は
710 形式 @code{[x,n]}の2つの要素のMaximaリストです。
711 ここで、 @var{x}は浮動小数点数で、
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}に多くの例があります。
728 行列成分それぞれを指定された体の元に変換することです。
729 変換が不可能な時は、分解はエラーメッセージとともに停止します。
730 体の元はMaxima式である必要はありません。
731 例えば、@code{complexfield}の元はCommon Lisp複素数です。
732 そして、分解を計算した後には、行列成分はMaxima式に変換されなければいけません。
734 @code{get_lu_factors}も参照してください。
739 @c w[i,j] := random (1.0) + %i * random (1.0);
741 @c M : genmatrix (w, 100, 100)$
742 @c lu_factor (M, complexfield)$
743 @c lu_factor (M, generalring)$
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];
751 (%i1) w[i,j] := random (1.0) + %i * random (1.0);
752 (%o1) w := random(1.) + %i random(1.)
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]);
768 (%i8) lu_factor (M, generalring);
771 (%o8) [[ 3 9 ], [1, 2], generalring]
772 [ ----- - z - ----- + 8 ]
774 (%i9) get_lu_factors (%);
777 (%o9) [[ ], [ 3 ], [ 9 ]]
778 [ 0 1 ] [ ----- 1 ] [ 0 - z - ----- + 8 ]
780 (%i10) %[1] . %[2] . %[3];
787 @category{Matrix decompositions} @category{Package linearalgebra}
791 @c -----------------------------------------------------------------------------
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}の実行時間は行列サイズの三乗に比例します;
802 無限大ノルム条件数の下限と上限を決定します。
805 @category{Package linearalgebra}
809 @c -----------------------------------------------------------------------------
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}は区分されない行列でなければいけません。
821 @category{Package linearalgebra}
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}が行列成分すべてに対して
834 @code{matrixp}がオプション引数を与えられない時は、
837 他のすべての場合には、 @code{false}を返します。
839 @code{blockmatrixp}も参照してください。
842 @category{Package linearalgebra} @category{Predicate functions}
846 @c -----------------------------------------------------------------------------
848 @deffn {関数} matrix_size (@var{M})
850 行列 @var{M}の行数と列数をそれぞれ与える2要素リストを返します。
853 @category{Package linearalgebra}
857 @c -----------------------------------------------------------------------------
858 @anchor{mat_fullunblocker}
859 @deffn {関数} mat_fullunblocker (@var{M})
864 @var{M}を返します; それ以外ではエラーをシグナルします。
867 @category{Package linearalgebra}
872 @c -----------------------------------------------------------------------------
874 @deffn {関数} mat_trace (@var{M})
877 もし @var{M}が行列でないなら、名詞形を返します。
880 @code{mat_trace(mat_unblocker(m))}するのと同じ値を返します。
883 @category{Package linearalgebra}
887 @c -----------------------------------------------------------------------------
888 @anchor{mat_unblocker}
889 @deffn {関数} mat_unblocker (@var{M})
894 @code{mat_unblocker (M)}は @var{M}を返します;
898 もし @var{M}の成分それぞれが行列なら、
899 @code{mat_unblocker (M)}は区分されていない行列を返しますが、
900 もし @var{M}の成分それぞれが区分行列なら、
901 @code{mat_unblocker (M)}は
906 @code{matrix_element_mult}を @code{"."}に、
907 @code{matrix_element_transpose}を @code{'transpose}に設定したくなるでしょう。
908 @code{mat_fullunblocker}も参照してください。
913 @c A : matrix ([1, 2], [3, 4]);
914 @c B : matrix ([7, 8], [9, 10]);
916 @c mat_unblocker (%);
919 (%i1) A : matrix ([1, 2], [3, 4]);
923 (%i2) B : matrix ([7, 8], [9, 10]);
927 (%i3) matrix ([A, B]);
933 (%i4) mat_unblocker (%);
940 @category{Package linearalgebra}
944 @c -----------------------------------------------------------------------------
946 @deffn {関数} nullspace (@var{M})
949 @code{span (v_1, ..., v_n)}を返します。
951 集合 @code{@{v_1, ..., v_n@}}は
953 空集合のスパンは @code{@{0@}}です。
954 なので、零空間が要素を1つだけ持つときは、@code{span ()}を返します。
957 @category{Package linearalgebra}
961 @c -----------------------------------------------------------------------------
963 @deffn {関数} nullity (@var{M})
969 @category{Package linearalgebra}
973 @c -----------------------------------------------------------------------------
974 @anchor{orthogonal_complement}
975 @deffn {関数} orthogonal_complement (@var{v_1}, ..., @var{v_n})
977 @code{span (u_1, ..., u_m)}を返します。
979 集合 @code{@{u_1, ..., u_m@}}は
980 集合 @code{(v_1, ..., v_n)}の直交補空間の基底です。
982 ベクトル @var{v_1}から @var{v_n}それぞれは列ベクトルでなければいけません。
985 @category{Package linearalgebra}
989 @c -----------------------------------------------------------------------------
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}の中の変数に関して多項式なら、
997 述語論理 @var{coeffp}は係数それぞれに対して @code{true}に評価されなければいけなく、
999 @var{L}の中の変数の指数すべてに対して @code{true}に評価されなければいけません。
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)}に同値です。
1015 @c polynomialp ((x + 1)*(x + 2), [x]);
1016 @c polynomialp ((x + 1)*(x + 2)^a, [x]);
1019 (%i1) polynomialp ((x + 1)*(x + 2), [x]);
1021 (%i2) polynomialp ((x + 1)*(x + 2)^a, [x]);
1025 coeffpとexponpにデフォルトでない値を使う例:
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,
1033 (%i1) polynomialp ((x + 1)*(x + 2)^(3/2), [x], numberp, numberp);
1035 (%i2) polynomialp ((x^(1/2) + 1)*(x + 2)^(3/2), [x], numberp,
1043 @c polynomialp (x^2 + 5*x*y + y^2, [x]);
1044 @c polynomialp (x^2 + 5*x*y + y^2, [x, y]);
1047 (%i1) polynomialp (x^2 + 5*x*y + y^2, [x]);
1049 (%i2) polynomialp (x^2 + 5*x*y + y^2, [x, y]);
1054 @category{Package linearalgebra} @category{Predicate functions}
1058 @c -----------------------------------------------------------------------------
1059 @anchor{polytocompanion}
1060 @deffn {関数} polytocompanion (@var{p}, @var{x})
1064 @var{p}のコンパニオン行列を返します。
1065 次数 @var{n}のモニック多項式(最高次数の係数が1の多項式)に対しては、
1066 @code{@var{p} = (-1)^@var{n} charpoly (polytocompanion (@var{p}, @var{x}))}.
1069 @var{p}が @var{x}の多項式でないなら、エラーをシグナルします。
1072 @category{Package linearalgebra}
1076 @c -----------------------------------------------------------------------------
1077 @anchor{ptringularize}
1078 @deffn {関数} ptriangularize (@var{M}, @var{v})
1080 もし @var{M}がそれぞれの成分が@var{v}の多項式の行列なら、
1081 以下のような行列 @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}の多項式かチェックしません。
1093 @category{Package linearalgebra}
1097 @c -----------------------------------------------------------------------------
1099 @deffn {関数} rowop (@var{M}, @var{i}, @var{j}, @var{theta})
1102 行演算 @code{R_i <- R_i - theta * R_j}をすることで生じる
1104 もし @var{M}に行@var{i}か @var{j}がないなら、
1108 @category{Package linearalgebra}
1112 @deffn {関数} rank (@var{M})
1119 @c rank(matrix([1,2],[2,4]));
1120 @c rank(matrix([1,b],[c,d]));
1123 (%i1) rank(matrix([1,2],[2,4]));
1125 (%i2) rank(matrix([1,b],[c,d]));
1126 Proviso: @{d - b c # 0@}
1131 @category{Package linearalgebra}
1136 @c -----------------------------------------------------------------------------
1138 @deffn {関数} rowswap (@var{M}, @var{i}, @var{j})
1140 もし @var{M}が行列なら、行 @var{i}と @var{j}を入れ替えます。
1141 もし @var{M}に行@var{i}か @var{j}がないなら、エラーをシグナルします。
1144 @category{Package linearalgebra}
1148 @c -----------------------------------------------------------------------------
1150 @deffn {関数} toeplitz (@var{col})
1151 @deffnx {関数} toeplitz (@var{col}, @var{row})
1153 Toeplitz行列 @var{T}を返します。
1154 @var{T}の一番目の列は @var{col}です;
1156 @var{T}の最初の行は @var{row}です。
1157 @var{row}のデフォルトは @var{col}の複素共役です。
1161 @c toeplitz([1,2,3],[x,y,z]);
1162 @c toeplitz([1,1+%i]);
1165 (%i1) toeplitz([1,2,3],[x,y,z]);
1174 (%i2) toeplitz([1,1+%i]);
1182 @category{Package linearalgebra}
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}行列を返します。
1195 @category{Package linearalgebra}
1199 @c -----------------------------------------------------------------------------
1201 @deffn {関数} zerofor (@var{M})
1202 @deffnx {関数} zerofor (@var{M}, @var{fld})
1204 行列 @var{M}と同じ形の零行列を返します。
1205 零行列の成分すべては体 @var{fld}の加算の単位元です;
1206 @var{fld}のデフォルトは @var{generalring}です。
1209 平方行列か行列以外でなければいけません。
1211 @var{M}の成分それぞれは平方行列であり得ます。
1212 -- 従って @var{M}は区分Maxima行列であり得ます。
1213 行列は任意の(有限の)深さに区分できます。
1215 @code{identfor}も参照してください。
1218 @category{Package linearalgebra}
1222 @c -----------------------------------------------------------------------------
1223 @anchor{zeromatrixp}
1224 @deffn {関数} zeromatrixp (@var{M})
1227 もし行列 @var{M}のそれぞれの要素 @var{e}に対して
1228 @code{is (equal (@var{e}, 0))}が真なら、
1231 もし@var{e}の要素それぞれに対して @code{zeromatrixp}が
1232 @code{true}に評価されるなら、
1236 @category{Package linearalgebra} @category{Predicate functions}