[ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [ ? ]

# 68. linearalgebra

 [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [ ? ]

## 68.1 Introduction to linearalgebra

`linearalgebra`は線形代数に関する関数のコレクションです。

 ```(%i1) M : matrix ([1, 2], [1, 2]); [ 1 2 ] (%o1) [ ] [ 1 2 ] (%i2) nullspace (M); [ 1 ] [ ] (%o2) span([ 1 ]) [ - - ] [ 2 ] (%i3) columnspace (M); [ 1 ] (%o3) span([ ]) [ 1 ] (%i4) ptriangularize (M - z*ident(2), z); [ 1 2 - z ] (%o4) [ ] [ 2 ] [ 0 3 z - z ] (%i5) M : matrix ([1, 2, 3], [4, 5, 6], [7, 8, 9]) - z*ident(3); [ 1 - z 2 3 ] [ ] (%o5) [ 4 5 - z 6 ] [ ] [ 7 8 9 - z ] (%i6) MM : ptriangularize (M, z); [ 4 5 - z 6 ] [ ] [ 2 ] [ 66 z 102 z 132 ] [ 0 -- - -- + ----- + --- ] (%o6) [ 49 7 49 49 ] [ ] [ 3 2 ] [ 49 z 245 z 147 z ] [ 0 0 ----- - ------ - ----- ] [ 264 88 44 ] (%i7) algebraic : true; (%o7) true (%i8) tellrat (MM [3, 3]); 3 2 (%o8) [z - 15 z - 18 z] (%i9) MM : ratsimp (MM); [ 4 5 - z 6 ] [ ] [ 2 ] (%o9) [ 66 7 z - 102 z - 132 ] [ 0 -- - ------------------ ] [ 49 49 ] [ ] [ 0 0 0 ] (%i10) nullspace (MM); [ 1 ] [ ] [ 2 ] [ z - 14 z - 16 ] [ -------------- ] (%o10) span([ 8 ]) [ ] [ 2 ] [ z - 18 z - 12 ] [ - -------------- ] [ 12 ] (%i11) M : matrix ([1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]); [ 1 2 3 4 ] [ ] [ 5 6 7 8 ] (%o11) [ ] [ 9 10 11 12 ] [ ] [ 13 14 15 16 ] (%i12) columnspace (M); [ 1 ] [ 2 ] [ ] [ ] [ 5 ] [ 6 ] (%o12) span([ ], [ ]) [ 9 ] [ 10 ] [ ] [ ] [ 13 ] [ 14 ] (%i13) apply ('orthogonal_complement, args (nullspace (transpose (M)))); [ 0 ] [ 1 ] [ ] [ ] [ 1 ] [ 0 ] (%o13) span([ ], [ ]) [ 2 ] [ - 1 ] [ ] [ ] [ 3 ] [ - 2 ] ```

Categories:  Linear algebra · Share packages · Package linearalgebra

 [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [ ? ]

## 68.2 Functions and Variables for linearalgebra

 ```(%i1) m1 : matrix([1,2],[3,4])\$ (%i2) m2 : matrix([7,8],[9,10])\$ (%i3) addmatrices('max,m1,m2); (%o3) matrix([7,8],[9,10]) (%i4) addmatrices('max,m1,m2,5*m1); (%o4) matrix([7,10],[15,20]) ```

Categories:  Package linearalgebra

Mのエントリがすべて行列なら、その時に限って trueを返します。

もし Mが行列なら、 列演算 `C_i <- C_i - theta * C_j`を施すことで生じる行列を返します。 もし Mが行 iか行 jを持たないならエラーをシグナルします。

Categories:  Package linearalgebra

もし Mが行列なら、列 ijを交換します。 もし Mに列 ijがないならエラーをシグナルします。

Categories:  Package linearalgebra

もし Mが行列なら `span (v_1, ..., v_n)`を返します。 ここで、集合 `{v_1, ..., v_n}`Mの列空間の基底です。 空集合の包は `{0}`です。 従って、列空間が 1員だけ持つ時 `span ()`を返します。

Categories:  Package linearalgebra

Maxima式 eのコピーを返します。 eは任意の Maxima式であり得ますが、 eがリストか行列の時、コピー関数はもっとも役立ちます; 以下を考えてください:

 ```(%i1) m : [1,[2,3]]\$ (%i2) mm : m\$ (%i3) mm[2][1] : x\$ (%i4) m; (%o4) [1,[x,3]] (%i5) mm; (%o5) [1,[x,3]] ```

 ```(%i6) m : [1,[2,3]]\$ (%i7) mm : copy(m)\$ (%i8) mm[2][1] : x\$ (%i9) m; (%o9) [1,[2,3]] (%i10) mm; (%o10) [1,[x,3]] ```

Categories:  Package linearalgebra

cholesky (M)
cholesky (M, field)

Categories:  Package linearalgebra

 ```(%i1) diag_matrix(diag_matrix(1,2),diag_matrix(3,4)); [ [ 1 0 ] [ 0 0 ] ] [ [ ] [ ] ] [ [ 0 2 ] [ 0 0 ] ] (%o1) [ ] [ [ 0 0 ] [ 3 0 ] ] [ [ ] [ ] ] [ [ 0 0 ] [ 0 4 ] ] (%i2) diag_matrix(p,q); [ p 0 ] (%o2) [ ] [ 0 q ] ```

Categories:  Package linearalgebra

ベクトル uvの内積を返します。 これは `conjugate (transpose (u)) . v`と同じです。 引数 uvは列ベクトルでなければいけません。

Categories:  Package linearalgebra

eigens_by_jacobi (A)
eigens_by_jacobi (A, field_type)

Aの固有値と固有ベクトルを Jacobi回転法で計算します。 Aは対称行列でなければいけません。 (しかし、正定値である必要も半正定値である必要もありません。) field_typeは計算上の体を示し、 `floatfield``bigfloatfield`です。 もし field_typeを指定しないなら、デフォルトは `floatfield`です。

Aの要素は、数か、 (field_typeに依存して )`float``bfloat`を介して数に評価される式でなければいけません。

 ```(%i1) S: matrix([1/sqrt(2), 1/sqrt(2)],[-1/sqrt(2), 1/sqrt(2)]); [ 1 1 ] [ ------- ------- ] [ sqrt(2) sqrt(2) ] (%o1) [ ] [ 1 1 ] [ - ------- ------- ] [ sqrt(2) sqrt(2) ] (%i2) L : matrix ([sqrt(3), 0], [0, sqrt(5)]); [ sqrt(3) 0 ] (%o2) [ ] [ 0 sqrt(5) ] (%i3) M : S . L . transpose (S); [ sqrt(5) sqrt(3) sqrt(5) sqrt(3) ] [ ------- + ------- ------- - ------- ] [ 2 2 2 2 ] (%o3) [ ] [ sqrt(5) sqrt(3) sqrt(5) sqrt(3) ] [ ------- - ------- ------- + ------- ] [ 2 2 2 2 ] (%i4) eigens_by_jacobi (M); The largest percent change was 0.1454972243679 The largest percent change was 0.0 number of sweeps: 2 number of rotations: 1 (%o4) [[1.732050807568877, 2.23606797749979], [ 0.70710678118655 0.70710678118655 ] [ ]] [ - 0.70710678118655 0.70710678118655 ] (%i5) float ([[sqrt(3), sqrt(5)], S]); (%o5) [[1.732050807568877, 2.23606797749979], [ 0.70710678118655 0.70710678118655 ] [ ]] [ - 0.70710678118655 0.70710678118655 ] (%i6) eigens_by_jacobi (M, bigfloatfield); The largest percent change was 1.454972243679028b-1 The largest percent change was 0.0b0 number of sweeps: 2 number of rotations: 1 (%o6) [[1.732050807568877b0, 2.23606797749979b0], [ 7.071067811865475b-1 7.071067811865475b-1 ] [ ]] [ - 7.071067811865475b-1 7.071067811865475b-1 ] ```

`x = lu_factor (A)`の時、 `get_lu_factors`は形式 `[P, L, U]`のリストを返します。 ここで、 Pは置換行列、 Lは対角成分を含む下三角行列、 Uは上三角行列であり、 `A = P L U`が成り立ちます。

Categories:  Package linearalgebra

hankel (col)
hankel (col, row)

Hankel行列 Hを返します。 Hの最初の列は colです; 最初の成分を除いて、 Hの最後の行は rowです。 rowのデフォルトは colと同じ長さを持つ零ベクトルです。

Categories:  Package linearalgebra

 ```(%i1) hessian (x * sin (y), [x, y]); [ 0 cos(y) ] (%o1) [ ] [ cos(y) - x sin(y) ] (%i2) depends (F, [a, b]); (%o2) [F(a, b)] (%i3) hessian (F, [a, b]); [ 2 2 ] [ d F d F ] [ --- ----- ] [ 2 da db ] [ da ] (%o3) [ ] [ 2 2 ] [ d F d F ] [ ----- --- ] [ da db 2 ] [ db ] ```

n掛け nの Hilbert行列を返します。 nが正の整数でない時、エラーをシグナルします。

Categories:  Package linearalgebra

identfor (M)
identfor (M, fld)

`zerofor`も参照してください。

Categories:  Package linearalgebra

LU分解を使って行列 Mの逆行列を返します。 LU分解は環 rngを使って実行されます。

Categories:  Package linearalgebra

 ```(%i1) jacobian ([sin (u - v), sin (u * v)], [u, v]); [ cos(v - u) - cos(v - u) ] (%o1) [ ] [ v cos(u v) u cos(u v) ] (%i2) depends ([F, G], [y, z]); (%o2) [F(y, z), G(y, z)] (%i3) jacobian ([F, G], [y, z]); [ dF dF ] [ -- -- ] [ dy dz ] (%o3) [ ] [ dG dG ] [ -- -- ] [ dy dz ] ```

Categories:  Package linearalgebra

listp (e, p)
listp (e)

オプションの引数 pが与えられたとして、もし eが Maximaリストで、 pがすべてのリストの要素で `true`に評価されるなら、 `true`を返します。 `listp`がオプションの引数を与えられない時、もし eが Maximaリストなら、 `true`を返します。 他のすべての場合 `false`を返します。

ある性質を満たす部分行列 Mの中の成分を見つけます。 3つのケース:

(1) `rel = 'bool`fが述語論理:

(2) `rel = 'max`fが実関数:

fを最大にする成分を探して部分行列をスキャンします。 最大化の成分のインデックスを返します。

(3) `rel = 'min`fが実関数:

fを最小にする成分を探して部分行列をスキャンします。 最小化の成分のインデックスを返します。

Categories:  Package linearalgebra

`M = lu_factor (A, field)`の時、 `lu_backsub (M, b)`は線形系 `A x = b`を解きます。

Categories:  Package linearalgebra

(1) 行列 LUMの分解をパックされた形式で含みます。 パックされた形式は3つのことを意味します; 第一に LUの行はリスト permに従って置換されます。 もし、例えば、 permがリスト `[3,2,1]`なら、 LU分解の実際の一番目の行は行列 LUの三番目の行です。 第二に、 mの下三角因子はすべて 1で置き換えられた対角成分を持つ LUの下三角部です。 第三に、 Mの上三角因子は LUの上三角部です。

(2) 体が `floatfield``complexfield`の時、数 lower-cndupper-cndMの無限ノルム条件数の下限と上限です。 すべての体に対して条件数を見積ることができるわけではありません; そんな体に対しては `lu_factor`は 2項目リストを返します。 下限と上限どちらも真の値から任意に大きな因子だけ異なる可能性があります。 (`mat_cond`も参照してください。)

オプション引数 fldは環か体かを決めるシンボルでなければいけません。 予め定義された体と環は以下のものがあります:

(a) `generalring` - Maxima式の環, (b) `floatfield` - 倍精度浮動小数点数体, (c) `complexfield` - 倍精度浮動小数点複素数体, (d) `crering` - Maxima CRE式の環, (e) `rationalfield` - 有理数体, (f) `runningerror` - 浮動小数点の丸め誤差をトラック, (g) `noncommutingring` - 乗算が非可換ドット演算子のMaxima式の環

`runningerror`の要素は形式 `[x,n]`の 2つの要素の Maximaリストです。 ここで、 xは浮動小数点数で、 `n`は整数です。 `x`の'真'の値と `x`の相対差は計算機イプシロンに `n`をかけたもので近似的に抑えられます。 ランニングエラー境界はオーダーが計算機イプシロンの平方の項をいくつか落とします。 The running error bound drops some terms that of the order the square of the machine epsilon.

`get_lu_factors`も参照してください。

 ```(%i1) w[i,j] := random (1.0) + %i * random (1.0); (%o1) w := random(1.) + %i random(1.) i, j (%i2) showtime : true\$ Evaluation took 0.00 seconds (0.00 elapsed) (%i3) M : genmatrix (w, 100, 100)\$ Evaluation took 7.40 seconds (8.23 elapsed) (%i4) lu_factor (M, complexfield)\$ Evaluation took 28.71 seconds (35.00 elapsed) (%i5) lu_factor (M, generalring)\$ Evaluation took 109.24 seconds (152.10 elapsed) (%i6) showtime : false\$ (%i7) M : matrix ([1 - z, 3], [3, 8 - z]); [ 1 - z 3 ] (%o7) [ ] [ 3 8 - z ] (%i8) lu_factor (M, generalring); [ 1 - z 3 ] [ ] (%o8) [[ 3 9 ], [1, 2], generalring] [ ----- - z - ----- + 8 ] [ 1 - z 1 - z ] (%i9) get_lu_factors (%); [ 1 0 ] [ 1 - z 3 ] [ 1 0 ] [ ] [ ] (%o9) [[ ], [ 3 ], [ 9 ]] [ 0 1 ] [ ----- 1 ] [ 0 - z - ----- + 8 ] [ 1 - z ] [ 1 - z ] (%i10) %[1] . %[2] . %[3]; [ 1 - z 3 ] (%o10) [ ] [ 3 8 - z ] ```

mat_cond (M, 1)
mat_cond (M, inf)

Categories:  Package linearalgebra

mat_norm (M, 1)
mat_norm (M, inf)
mat_norm (M, frobenius)

Categories:  Package linearalgebra

matrixp (e, p)
matrixp (e)

オプション引数 pが与えられたとして、 もし eが行列で、 pが行列成分すべてに対して `true`に評価されるなら、 `true`を返します。 `matrixp`がオプション引数を与えられない時は、もし `e`が行列なら、 `true`を返します。 他のすべての場合には `false`を返します。

`blockmatrixp`も参照してください。

Categories:  Package linearalgebra

もし Mが区分行列なら、 行列をすべてのレベルで区分解除します。 もし Mが行列なら、 Mを返します; それ以外ではエラーをシグナルします。

Categories:  Package linearalgebra

Categories:  Package linearalgebra

もし Mが区分行列なら、 Mを 1レベル区分解除します。 もし Mが行列なら、 `mat_unblocker (M)`Mを返します; それ以外ではエラーをシグナルします。

このように、もし Mの成分それぞれが行列なら、 `mat_unblocker (M)`は区分されていない行列を返しますが、 もし Mの成分それぞれが区分行列なら、 `mat_unblocker (M)`は区分が 1レベル少ない区分行列を返します。

もし区分行列を使うなら、おそらく、 `matrix_element_mult``"."`に、 `matrix_element_transpose``'transpose`に設定したくなるでしょう。 `mat_fullunblocker`も参照してください。

 ```(%i1) A : matrix ([1, 2], [3, 4]); [ 1 2 ] (%o1) [ ] [ 3 4 ] (%i2) B : matrix ([7, 8], [9, 10]); [ 7 8 ] (%o2) [ ] [ 9 10 ] (%i3) matrix ([A, B]); [ [ 1 2 ] [ 7 8 ] ] (%o3) [ [ ] [ ] ] [ [ 3 4 ] [ 9 10 ] ] (%i4) mat_unblocker (%); [ 1 2 7 8 ] (%o4) [ ] [ 3 4 9 10 ] ```

Categories:  Package linearalgebra

もし Mが行列なら、 `span (v_1, ..., v_n)`を返します。 ここで集合 `{v_1, ..., v_n}`Mの零空間の基底です。 空集合のスパンは `{0}`です。 なので、零空間が要素を 1つだけ持つときは `span ()`を返します。

Categories:  Package linearalgebra

もし Mが行列なら、 Mの零空間の次元を返します。

Categories:  Package linearalgebra

`span (u_1, ..., u_m)`を返します。 ここで集合 `{u_1, ..., u_m}`は集合 `(v_1, ..., v_n)`の直交補空間の基底です。

ベクトル v_1から v_nそれぞれは列ベクトルでなければいけません。

Categories:  Package linearalgebra

polynomialp (p, L, coeffp, exponp)
polynomialp (p, L, coeffp)
polynomialp (p, L)

もし pがリスト Lの中の変数に関して多項式なら、 `true`を返します。 述語論理 coeffpは係数それぞれに対して `true`に評価されなければいけなく、述語論理 exponpLの中の変数の指数すべてに対して `true`に評価されなければいけません。 もし exponpに対してデフォルトでない値を使いたいなら、 たとえ coeffpに関してデフォルトを使いたくても coeffpを値とともに供給しなければいけません。

`polynomialp (p, L, coeffp)``polynomialp (p, L, coeffp, 'nonnegintegerp)`と同値です。

`polynomialp (p, L)``polynomialp (p, L, 'constantp, 'nonnegintegerp)`と同値です。

 ```(%i1) polynomialp ((x + 1)*(x + 2), [x]); (%o1) true (%i2) polynomialp ((x + 1)*(x + 2)^a, [x]); (%o2) false ```

coeffpと exponpにデフォルトでない値を使う例:

 ```(%i1) polynomialp ((x + 1)*(x + 2)^(3/2), [x], numberp, numberp); (%o1) true (%i2) polynomialp ((x^(1/2) + 1)*(x + 2)^(3/2), [x], numberp, numberp); (%o2) true ```

2変数多項式:

 ```(%i1) polynomialp (x^2 + 5*x*y + y^2, [x]); (%o1) false (%i2) polynomialp (x^2 + 5*x*y + y^2, [x, y]); (%o2) true ```

もし pxの多項式なら、 pのコンパニオン行列を返します。 次数 nのモニック多項式(最高次数の係数が1の多項式)に対しては、 `p = (-1)^n charpoly (polytocompanion (p, x))` があります。

pxの多項式でないなら、エラーをシグナルします。

Categories:  Package linearalgebra

もし Mがそれぞれの成分がvの多項式の行列なら、以下のような行列 M2を返します。

(1) M2は上三角で、

(2) `M2 = E_n ... E_1 M`, ここで E_1から E_nは成分が vの多項式の基本行列です。

(3) `|det (M)| = |det (M2)|`,

Categories:  Package linearalgebra

もし Mが行列なら、行演算 `R_i <- R_i - theta * R_j`をすることで生じる行列を返します。 もし Mに行ijがないなら、エラーをシグナルします。

Categories:  Package linearalgebra

 ```(%i1) rank(matrix([1,2],[2,4])); (%o1) 1 (%i2) rank(matrix([1,b],[c,d])); Proviso: {d - b c # 0} (%o2) 2 ```

Categories:  Package linearalgebra

もし Mが行列なら行 ijを入れ替えます。 もし Mに行ijがないならエラーをシグナルします。

Categories:  Package linearalgebra

toeplitz (col)
toeplitz (col, row)

Toeplitz行列 Tを返します。 Tの一番目の列は colです; 一番目の成分を除いて、 Tの最初の行は rowです。 rowのデフォルトは colの複素共役です。

 ```(%i1) toeplitz([1,2,3],[x,y,z]); [ 1 y z ] [ ] (%o1) [ 2 1 y ] [ ] [ 3 2 1 ] (%i2) toeplitz([1,1+%i]); [ 1 1 - %I ] (%o2) [ ] [ %I + 1 1 ] ```

Categories:  Package linearalgebra

i番目の行が `[1, x_i, x_i^2, ... x_i^(n-1)]`n掛け n行列を返します。

Categories:  Package linearalgebra

zerofor (M)
zerofor (M, fld)

`identfor`も参照してください。

Categories:  Package linearalgebra

Mが区分行列でない時、 もし行列 Mのそれぞれの要素 eに対して `is (equal (e, 0))`が真なら、 `true`を返します。 Mが区分行列の時、 もしeの要素それぞれに対して `zeromatrixp``true`に評価されるなら、 `true`を返します。

 [ << ] [ >> ] [Top] [Contents] [Index] [ ? ]

This document was generated by 市川雄二 on June, 21 2016 using texi2html 1.76.