【数式処理 MuPAD 入門】
平田 浩一 / 2000年01月26日 
hirata@edserv.ed.ehime-u.ac.jp 
愛媛大学教育学部数学教室 


行列とベクトル (1)



行列とベクトルの定義

MuPAD で行列やベクトルを扱う場合は、 線形代数の計算のための linalg パッケージを使うことを MuPAD に 宣言する必要があります。

● loadlib("linalg"): export(linalg);

行列を定義してみましょう。

● P := Dom::Matrix() ([[1,3],[5,7]]);

                                +-      -+
                                |  1, 3  |
                                |        |
                                |  5, 7  |
                                +-      -+

● Q := Dom::Matrix() ([[2,-3,1],[1,2,0],[-1,3,2]]);

                              +-           -+
                              |   2, -3, 1  |
                              |             |
                              |   1,  2, 0  |
                              |             |
                              |  -1,  3, 2  |
                              +-           -+

行列を定義するたびに毎回 Dom::Matrix() を入力するのは結構手間がかかります。 少々手間を省くために、記号 MAT を次のように定義すると便利です。

● MAT := Dom::Matrix();

               Dom::Matrix(Dom::ExpressionField(id, iszero))

これを一度定義しておくとあとは楽です。

● P := MAT([[1,3],[5,7]]);

                                +-      -+
                                |  1, 3  |
                                |        |
                                |  5, 7  |
                                +-      -+

● Q := MAT([[2,-3,1],[1,2,0],[-1,3,2]]);

                              +-           -+
                              |   2, -3, 1  |
                              |             |
                              |   1,  2, 0  |
                              |             |
                              |  -1,  3, 2  |
                              +-           -+

このように行列を定義するための記号を用意することをお奨めします。 (MAT 以外の記号でもかまいません。例えば、M など)

ベクトルの定義も同様です。

● v1 := MAT([[1,2,3]]);

                                +-       -+
                                | 1, 2, 3 |
                                +-       -+

● v2 := MAT([1,2,3]);

                                  +-   -+
                                  |  1  |
                                  |     |
                                  |  2  |
                                  |     |
                                  |  3  |
                                  +-   -+

上の例で、行ベクトルと列ベクトルの入力の違いに注意ください。

数式を含む行列も同様に定義できます。

●A := MAT([[a,1],[0,1/b]]);

                                +-      -+
                                |  a, 1  |
                                |        |
                                |     1  |
                                |  0, -  |
                                |     b  |
                                +-      -+

>● B := MAT([[cos(x),-sin(x)],[sin(x),cos(x)]]);

                           +-                 -+
                           |  cos(x), -sin(x)  |
                           |                   |
                           |  sin(x),  cos(x)  |
                           +-                 -+


行列の四則演算

行列の加減乗算とベキは +, -, *, ^ で計算します。

● A := MAT([[1,2],[5,6]]);

                                +-      -+
                                |  1, 2  |
                                |        |
                                |  5, 6  |
                                +-      -+

● B := MAT([[3,4],[7,8]]);

                                +-      -+
                                |  3, 4  |
                                |        |
                                |  7, 8  |
                                +-      -+

● A + B;

                               +-        -+
                               |   4,  6  |
                               |          |
                               |  12, 14  |
                               +-        -+

●A - B;

                               +-        -+
                               |  -2, -2  |
                               |          |
                               |  -2, -2  |
                               +-        -+

● A * B;

                               +-        -+
                               |  17, 20  |
                               |          |
                               |  57, 68  |
                               +-        -+

● B * A;

                               +-        -+
                               |  23, 30  |
                               |          |
                               |  47, 62  |
                               +-        -+

●A^3;

                              +-          -+
                              |   81, 106  |
                              |            |
                              |  265, 346  |
                              +-          -+

行列の乗算は可換ではない (AB ≠ BA) ことに注意ください。

行列のスカラー倍も * で計算します。

● A;

                                +-      -+
                                |  1, 2  |
                                |        |
                                |  5, 6  |
                                +-      -+

●(3/2) * A;

                               +-         -+
                               |   3/2, 3  |
                               |           |
                               |  15/2, 9  |
                               +-         -+

● (1/a) * A;

                                +-      -+
                                |  1  2  |
                                |  -, -  |
                                |  a  a  |
                                |        |
                                |  5  6  |
                                |  -, -  |
                                |  a  a  |
                                +-      -+

【注意】
行列の行数・列数の関係で四則演算が定義できないような場合はエラーとなります。

● A := MAT([[1,2],[3,4]]);

                                +-      -+
                                |  1, 2  |
                                |        |
                                |  3, 4  |
                                +-      -+

● B := MAT([[5,6,7],[8,9,0]]);

                               +-         -+
                               |  5, 6, 7  |
                               |           |
                               |  8, 9, 0  |
                               +-         -+

● A + B;
Error: dimensions don't match [(Dom::Matrix(Dom::ExpressionField(id, iszero)))::_plus]

● B * A;
Error: dimensions don't match [(Dom::Matrix(Dom::ExpressionField(id, iszero)))::_mult]

● B^2;

                                   FAIL

例題として、行列 A := MAT([[a,b],[c,d]]) に対して A2 - (a + d) A を計算してみましょう。

● A := MAT([[a,b],[c,d]]);

                                +-      -+
                                |  a, b  |
                                |        |
                                |  c, d  |
                                +-      -+

● B := A^2 - (a+d)*A;

            +-                                              -+
            |                      2                         |
            |   b c - a (a + d) + a , a b + b d - b (a + d)  |
            |                                                |
            |                                             2  |
            |  a c + c d - c (a + d),  b c - d (a + d) + d   |
            +-                                              -+

行列の成分は自動的には展開されません。 関数 expand を用いて展開する必要があります。

● expand(B);

                     +-                            -+
                     |  - a d + b c ,       0       |
                     |                              |
                     |        0,      - a d + b c   |
                     +-                            -+

■ 逆行列

行列 A の逆行列の計算は 1/A または A^(-1) で行います。

● A := MAT([[1,a],[0,2]]);

                                +-      -+
                                |  1, a  |
                                |        |
                                |  0, 2  |
                                +-      -+

● 1/A;

                               +-        -+
                               |       a  |
                               |  1, - -  |
                               |       2  |
                               |          |
                               |  0, 1/2  |
                               +-        -+

● A^(-1);

                               +-        -+
                               |       a  |
                               |  1, - -  |
                               |       2  |
                               |          |
                               |  0, 1/2  |
                               +-        -+

逆行列が計算できない場合は FAIL となります。

● B := MAT([[1,a],[2,2*a]]);

                               +-        -+
                               |  1,  a   |
                               |          |
                               |  2, 2 a  |
                               +-        -+

● 1/B;

                                   FAIL

単位行列と対角行列

行列の計算には単位行列 E や対角行列がよく用いられます。

■ 単位行列

単位行列は線形代数の教科書では、記号 E や I で表されることが通常です。

MuPAD では、これらの記号は、自然対数の底 (e) を表す記号 E、 虚数単位 (i) を表す記号 I と重複しますので注意ください。

単位行列も他の行列同様、以下のように入力できます。

● E2 := MAT([[1,0],[0,1]]);

                                +-      -+
                                |  1, 0  |
                                |        |
                                |  0, 1  |
                                +-      -+

● E3 := MAT([[1,0,0],[0,1,0],[0,0,1]]);

                               +-         -+
                               |  1, 0, 0  |
                               |           |
                               |  0, 1, 0  |
                               |           |
                               |  0, 0, 1  |
                               +-         -+

これでは入力に手間がかかりますので、より簡単に入力する方法があります。

● E2 := MAT(2,2,1,Diagonal);

                                +-      -+
                                |  1, 0  |
                                |        |
                                |  0, 1  |
                                +-      -+

● E3 := MAT(3,3,1,Diagonal);

                               +-         -+
                               |  1, 0, 0  |
                               |           |
                               |  0, 1, 0  |
                               |           |
                               |  0, 0, 1  |
                               +-         -+

MAT の後の 2, 2 や 3, 3 は、2x2行列、3x3行列であることを MuPAD に指示しています。

■ 対角行列

対角行列についても同様で、以下のようにすることで簡単に入力できます。

● D3 := MAT(3,3,[a,b,c],Diagonal);

                               +-         -+
                               |  a, 0, 0  |
                               |           |
                               |  0, b, 0  |
                               |           |
                               |  0, 0, c  |
                               +-         -+

● D4 := MAT(4,4,[x,y,z,w],Diagonal);

                             +-            -+
                             |  x, 0, 0, 0  |
                             |              |
                             |  0, y, 0, 0  |
                             |              |
                             |  0, 0, z, 0  |
                             |              |
                             |  0, 0, 0, w  |
                             +-            -+

行列式と階数

行列 A の行列式や階数を計算する関数が用意されています。

det(A)     行列 A の行列式 |A|
rank(A)     行列 A の階数 rank A

● A := MAT([[2,3],[5,-1]]);

                                +-       -+
                                |  2,  3  |
                                |         |
                                |  5, -1  |
                                +-       -+

● det(A);

                                    -17

● rank(A);

                                     2

● B := MAT([[2,3],[-4,-6]]);

                               +-        -+
                               |   2,  3  |
                               |          |
                               |  -4, -6  |
                               +-        -+

● det(B);

                                     0

● rank(B);

                                     1

【演習問題】

(1) 行列 A, B を

           +-        -+        +-         -+
           | 2  3  -1 |        |  2   1  0 |
       A = |          |    B = |           |
           | 0  4   5 |        | -3  -4  5 |
           +-        -+        +-         -+
  とするとき次を計算せよ。
  1.  - A
  2.  2 A - 3 B
  3.  -3 (2 B - A)

(2) 行列 A を

           +-    -+
           | 1  4 |
       A = |      |
           | 2  3 |
           +-    -+
  とするとき次の式を求めよ。  ただし、E は単位行列とする。
  1.  A5 - 3 A4 + 2 A + 3 E
  2.  (A + E) (A - 5 E)

(3) 行列 A を

           +-    -+
           | a  b |
       A = |      |
           | c  d |
           +-    -+
  とするとき、 A2 - (a + d) A + (ad - bc) E  を求めよ。  ただし、E は単位行列とする。

(4) 次の行列の行列式を求め、因数分解せよ。

           +-       -+           +-        -+
           | a  b  c |           | 1  a  bc |
           |         |           |          |
       A = | c  a  b |      B =  | 1  b  ca |
           |         |           |          |
           | b  c  a |           | 1  c  ab |
           +-       -+           +-        -+

(5) 次の行列の階数を求めよ。

           +-        -+           +-            -+
           | 1  -2  1 |           |  1   2  0  4 |
           |          |           |              |
       A = | 0  -4  2 |      B =  |  3   6  1  2 |
           |          |           |              |
           | 2  -6  3 |           | -1  -2  2  1 |
           +-        -+           +-            -+

(6) 行列 A を

           +-    -+
           | 3  2 |
       A = |      |
           | 1  4 |
           +-    -+
  とするとき、方程式  det(A - t E) = 0  を満たす t の値を求めよ。  ただし、E は単位行列とする。

【数式処理 MuPAD 入門】