Next: , Previous:   [Contents][Index]

64 linearalgebra


64.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 ]

64.2 Functions and Variables for linearalgebra

関数: addmatrices (f, M_1, …, M_n)

関数fを加算関数として使い、 行列M_1, …, M_nの和を返します。 関数fは任意の数の引数を受け付けなければいけません(Maxima n項関数)。

例:

(%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])
関数: blockmatrixp (M)

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

関数: columnop (M, i, j, theta)

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

関数: columnswap (M, i, j)

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

関数: columnspace (M)

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

関数: copy (e)

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]]

同じ実験を試みましょう。 しかし、今回 mmmのコピーとします。

(%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]]

今回、 mmへの割り当てはmの値を変えません。

関数: cholesky (M)
関数: cholesky (M, field)

自己共役(すなわちHermite)行列のCholesky分解を返します。

二番目の引数はデフォルトでは’generalring’です。 fieldの取り得る値の説明については lu_factorを参照してください。

関数: ctranspose (M)

行列 Mの複素共役転置を返します。 関数 ctransposeは それぞれの行列要素を転置するのに matrix_element_transposeを使います。

関数: diag_matrix (d_1, d_2,...,d_n)

対角成分 d_1, d_2,...,d_nを持つ対角行列を返します。 対角成分が行列の時、 戻り値行列の零成分は 適切なサイズの零行列です; 例えば:

(%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 ]
関数: dotproduct (u, v)

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

関数: eigens_by_jacobi (A)
関数: eigens_by_jacobi (A, field_type)

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

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

例:

(%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 ]
関数: get_lu_factors (x)

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

関数: hankel (col)
関数: hankel (col, row)

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

関数: hessian (f, x)

変数 xのリストに関する fのHessian行列を返します。 Hessian行列の (i, j)成分は diff(f, x[i], 1, x[j], 1)です。

例:

(%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   ]
関数: hilbert_matrix (n)

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

関数: identfor (M)
関数: identfor (M, fld)

行列 Mと同じ形を持つ単位行列を返します。 単位行列の対角成分は体 fldの乗算単位元です; fldのデフォルトは generalringです。

一番目の引数 Mは平方行列か非行列でなければいけません。 Mが行列の時、 Mのそれぞれの成分は平方行列であり得ます。 – 従って、 Mは区分されたMaxima行列であり得ます。 行列は、任意の(有限の)深さに区分できます。

zeroforも参照してください。

関数: invert_by_lu (M, (rng generalring))

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

関数: jacobian (f, x)

変数のリスト xに関する 関数のリスト fのJacobi行列を返します。 Jacobi行列の (i, j)成分は diff(f[i], x[j])です。

例:

(%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 ]
関数: kronecker_product (A, B)

行列 ABのKronecker積を返します。

関数: listp (e, p)
関数: listp (e)

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

関数: locate_matrix_entry (M, r_1, c_1, r_2, c_2, f, rel)

一番目の引数は行列でなければいけません; 引数 r_1から c_2は 行 r_1から r_2と列 c_1から c_2から成る Mの部分行列を決定します。

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

(1) rel = 'boolfが述語論理:

左から右へ、そして上から下へ部分行列をスキャンし、 述語論理 fを満たす最初の成分のインデックスを返します。 もし fを満たす行列成分がないなら、 falseを返します。

(2) rel = 'maxfが実関数:

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

(3) rel = 'minfが実関数:

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

関数: lu_backsub (M, b)

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

関数: lu_factor (M, field)

形式 [LU, perm, fld][LU, perm, fld, lower-cnd upper-cnd] のリストを返します。 ここで、

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

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

引数 Mは平方行列でなければいけません。

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

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

体が floatfieldcomplexfieldrunningerrorのいずれかの時、 アルゴリズムは部分ピボットを使います; 他のすべての体に対しては、 零ピボットを避ける必要があるときだけ、行がスイッチされます。

浮動小数点加算算術は結合的でなく、 ’体’の意味は数学的定義と異なります。

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.

新しい体を定義するユーザーインターフェースはありません。 Common Lispに精通しているユーザーは新しい体を定義することができるはずです。 これをするには、ユーザーは算術演算のための関数と 体表現とMaximaの相互変換のための関数を定義しなければいけません。 さらに、(部分ピボットが使われる)順序体に関しては、 ユーザーは大きさの関数と体の元の比較関数を定義しなければいけません。 あとは、Common Lisp 構造体 mringを定義することだけです。 ファイル mringに多くの例があります。

分解を計算するために、 最初の仕事は 行列成分それぞれを指定された体の元に変換することです。 変換が不可能な時は、分解はエラーメッセージとともに停止します。 体の元はMaxima式である必要はありません。 例えば、complexfieldの元はCommon Lisp複素数です。 そして、分解を計算した後には、行列成分はMaxima式に変換されなければいけません。

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)

行列 mp-ノルムの行列条件数を返します。 pに許される値は1と infです。 この関数は、行列 mの逆元を計算するのにLU分解を使います。 このため、mat_condの実行時間は行列サイズの三乗に比例します; lu_factorは、 行列サイズの二乗に比例する時間内に 無限大ノルム条件数の下限と上限を決定します。

関数: mat_norm (M, 1)
関数: mat_norm (M, inf)
関数: mat_norm (M, frobenius)

行列 Mの行列 p-ノルムを返します。 . The allowed values for pに許される値は1か inffrobenius (Frobenius行列ノルム)です。 行列 Mは区分されない行列でなければいけません。

関数: matrixp (e, p)
関数: matrixp (e)

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

blockmatrixpも参照してください。

関数: matrix_size (M)

行列 Mの行数と列数をそれぞれ与える2要素リストを返します。

関数: mat_fullunblocker (M)

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

関数: mat_trace (M)

行列 Mの跡を返します。 もし Mが行列でないなら、名詞形を返します。 Mが区分行列の時、 mat_trace(M)mat_trace(mat_unblocker(m))するのと同じ値を返します。

関数: mat_unblocker (M)

もし 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 ]
関数: nullspace (M)

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

関数: nullity (M)

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

関数: orthogonal_complement (v_1, ..., v_n)

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

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

関数: 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
関数: polytocompanion (p, x)

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

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

関数: ptriangularize (M, v)

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

(1) M2は上三角で、

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

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

注意: この関数はすべての成分がvの多項式かチェックしません。

関数: rowop (M, i, j, theta)

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

関数: rank (M)

行列 Mの階数を返します。 階数は列空間の次元です。

例:

(%i1) rank(matrix([1,2],[2,4]));
(%o1)                                  1
(%i2) rank(matrix([1,b],[c,d]));
Proviso:  {d - b c # 0}
(%o2)                                  2
関数: rowswap (M, i, j)

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

関数: 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    ]
関数: vandermonde_matrix ([x_1, ..., x_n])

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

関数: zerofor (M)
関数: zerofor (M, fld)

行列 Mと同じ形の零行列を返します。 零行列の成分すべては体 fldの加算の単位元です; fldのデフォルトは generalringです。

一番目の引数 Mは 平方行列か行列以外でなければいけません。 Mが行列の時、 Mの成分それぞれは平方行列であり得ます。 – 従って Mは区分Maxima行列であり得ます。 行列は任意の(有限の)深さに区分できます。

identforも参照してください。

関数: zeromatrixp (M)

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


Next: , Previous:   [Contents][Index]