JavaFX アプリケーション

JavaFX 11以上、Scene Builder、Eclipse を利用して


行列の演算の利用方法

行列の演算
行列の演算

最新は1.2版です。

列ベクトルを直交化し、行列の積、行列の階数、逆行列、行列式、固有多項式、固有値を求め、連立1次方程式を解くプログラムです。線形代数の基本的なこと、及び、ここで利用されている計算方法に関しては、「線形代数微積分入門」を参考にして下さい。

行列の演算

線形代数で登場する、行列に関する次の演算を行う。列ベクトルの集合とみなし、これらの列ベクトルを直交化する。2つの行列の積を求める。与えられた行列の行列式、逆行列、階数、固有多項式を求める。連立1次方程式の解を求める。

利用方法

行列の新規作成

「行列の新規作成」ボタンを押すと、4行4列の正方行列が新しいウィンドウに作成される。名前はタイトルバーに自動的に付けられる。行数と列数を変更し、「サイズの変更」ボタンを押せば、サイズを変更できる。行列の各要素には有理数を入力できる。「-10」、「2/3」、「2+3/4」、「14.52」等の整数、分数(帯分数や仮分数)、小数が入力できる。しかし、「5+2」のように式を入力して計算結果の「7」を入力することは出来ない。既定では入力に従って結果が表示されるが、「表示」メニューから、それ以外に、「分数」表示、「小数」表示、「帯分数」表示を選ぶことができる。

例1 行列の新規作成
行列の新規作成

列ベクトルの直交化

例として、3つの列ベクトル $\left( \begin{array}{c} 1 \\ 1 \\ 1 \end{array} \right), \left( \begin{array}{c} 0 \\ 1 \\ 1 \end{array} \right), \left( \begin{array}{c} 0 \\ 0 \\ 1 \end{array} \right)$ をグラム・シュミットの直交化法により直交化する。必要ならば「行列の新規作成」ボタンを押し、この3個の列ベクトルからなる行列(この例の場合は3行3列の行列)を作成する(ここでは、M1という名前が自動的に付けられている)。

行列 M1
列ベクトルの直交化 M1

「行列の演算」メインウィンドウに戻り、

行列の演算
行列の演算 メインウィンドウ

「行列A」のりストボックスでM1を選択し、「列ベクトルの直交化」ボタンを押すと、結果が新しいウィンドウM1-1に表示され

行列 M1-1
列ベクトルの直交化 M1-1

直交化されたベクトルは $\left( \begin{array}{c} 1 \\ 1 \\ 1 \end{array} \right), \left( \begin{array}{c} – \frac{2}{3} \\ \frac{1}{3} \\ \frac{1}{3} \end{array} \right), \left( \begin{array}{c} 0 \\ -\frac{1}{2} \\ \frac{1}{2} \end{array} \right)$ となる。

行列の積

例として、積 $\left( \begin{array}{ccccc} 4 & 0 & 2 & 0 & 4 \\ 2 & 3 & 0 & 1 & 0 \\ 0 & 8 & 4 & 1 & 0 \\ 1 & 1 & 2 & -1 & 1 \end{array} \right) \left( \begin{array}{ccc} 1 & 0 & 1 \\ 6 & 0 & 1 \\ 1 & 3 & 0 \\ -2 & 2 & -4 \\ 1 & -5 & 2 \end{array} \right)$ の例を計算する。必要ならば「行列の新規作成」ボタンを2回押し、この2つの行列を作成する(ここでは、M1とM2という名前が自動的に付けられている)。

行列 M1 と M2
積 M1 積 M2

「行列の演算」メインウィンドウに戻り、

行列の演算
行列の演算 メインウィンドウ

「行列A」のリストボックスでM1を選択し、「行列B」のリストボックスでM2を選択し、「A*B」ボタンを押す。結果が新しいウィンドウ(M1)*(M2)に表示される。

行列 (M1)*(M2)
M1*M2

他の行列の積の例として、 $\left( \begin{array}{ccc} 130 & 150 & 120 \end{array} \right) \left( \begin{array}{c} 3 \\ 5 \\ 4 \end{array} \right)$ を求める。左の行ベクトルを列ベクトルと見なすと、ベクトルの内積でもある。

行列 M3 と M4
行列 M3 行列 M4

「行列の演算」メインウィンドウに戻り、

行列の演算
行列の演算 メインウィンドウ

「行列A」のリストボックスでM3を選択し、「行列B」のリストボックスでM4を選択し、「A*B」ボタンを押す。結果が新しいウィンドウ(M3)*(M4)に表示される。

行列 (M3)*(M4)
M3*M4

行列式

例として行列式 $\left| \begin{array}{cccc} 5 & -2 & 4 & 0 \\ -1 & 1 & 3 & 9 \\ 0 & -5 & 2 & 1 \\ 0 & 6 & 1 & 3 \end{array} \right|$ を求める。「行列の新規作成」ボタンを押し、この行列を作成する。(ここではM1という名前がついている。)

行列 M1
行列式 行列 M1

「行列の演算」ウィンドウに戻り、

行列の演算
行列の演算 メインウィンドウ

「行列A」リストボックスで、M1を選択し、「|A|」ボタンを押す。結果が、新しいウィンドウに表示される。ステータスバーを見れば行列式が-351であることがかる。

行列式 |M1|
M1 の行列式

逆行列

例として $\left( \begin{array}{cccc} 5 & -2 & 4 & 0 \\ -1 & 1 & 3 & 9 \\ 0 & -5 & 2 & 1 \\ 0 & 6 & 1 & 3 \end{array} \right)$ の逆行列を求める。必要ならば、「行列の新規作成」ボタンを押し、この行列を作成する。(ここではM1という名前がついている。)

行列 M1
逆行列 行列 M1

「行列の演算」ウィンドウに戻り、「行列A」リストボックスにおいて、M1を選択し、「1/A」ボタンを押す。新しいウィンドウに逆行列M1-Inverseが表示される。

逆行列 M1-Inverse
行列 M1-Inverse

次に、「ピボット操作」を利用して逆行列を求める。上記のM1の列数を「8」に変更し、5列目から8列目までに単位行列を入力する。(解く経過を残さない場合は、「結果を新ウィンドウに表示」のチェックを外す。)1行1列の要素「5」を選択し、

逆行列を求める 1行1列がピボット
逆行列 ピボット 1-1

「ピボット操作」ボタンを押す。2行2列の要素「3/5」を選択し、

逆行列を求める 2行2列がピボット
逆行列 ピボット 2-2

「ピボット操作」ボタンを押す。3行3列の要素「33+2/3」を選択し、

逆行列を求める 3行3列がピボット
逆行列 ピボット 3-3

「ピボット操作」ボタンを押す。4行4列の要素「-3-48/101」を選択し、

逆行列を求める 4行4列がピボット
逆行列 ピボット 4-4

「ピボット操作」ボタンを押す。

逆行列が求まった
逆行列 ピボット演算完了

5列目から8列目までに逆行列が求まっている。

階数

例として $\left( \begin{array}{cccccc} 0 & 2 & 1 & 0 & 2 & -2 \\ 2 & 0 & 1 & 4 & -1 & 0 \\ 1 & -1 & 5 & 0 & 3 & 2 \\ -1 & -1 & 4 & -4 & 4 & 2 \\ 4 & -2 & 11 & 4 & 5 & 4 \end{array} \right)$ の階数を求める。必要ならば、「行列の新規作成」ボタンを押し、サイズを5行6列に変更し、この行列を作成する。(ここではM1という名前がついている。)

行列 M1
階数 行列 M1

「行列の演算」ウィンドウに戻り、「行列A」リストボックスでM1を選択し、「Aの階数」ボタンを押す。「M1の階数」ウィンドウのステータスバーに答えが表示される。

行列 M1の階数
牛列 M1 の階数

行列の階数を「Aの階数」ボタンを1回押すだけで求めたが、今度は、行列の基本変形を利用して求める。「行列の演算」ウィンドウの「行列A」リストボックスでM1を選択する。(解く経過を残さない場合は、「結果を新ウィンドウに表示」チェックを外す。)1行と2行を交換するために、「1」と「2」を選び、「交換」ボタンを押す。

行列 M1(再掲)
階数 行列 M1
1行と2行の交換
行列の演算 メインウィンドウ M1の操作1

1行の-1/2倍を3行にたす

1行の-1/2倍を3行にたす
行列の演算 メインウィンドウ M1の操作2

1行の1/2倍を4行にたす

1行の1/2倍を4行にたす
行列の演算 メインウィンドウ M1の操作3

1行の-2倍を5行にたす

1行の-2倍を5行にたす
行列の演算 メインウィンドウ M1の操作4

2行の1/2倍を3行にたす

2行の1/2倍を3行にたす
行列の演算 メインウィンドウ M1の操作5

2行の1/2倍を4行にたす

2行の1/2倍を4行にたす
行列の演算 メインウィンドウ M1の操作6

2行の1倍を5行にたす

2行の1倍を5行にたす
行列の演算 メインウィンドウ M1の操作7

3行の-1倍を4行にたす

3行の-1倍を4行にたす
行列の演算 メインウィンドウ M1の操作8

3行の-2倍を5行にたす

3行の-2倍を5行にたす
行列の演算 メインウィンドウ M1の操作9

となり、階数が3であることが分かる。

同時連立1次方程式

例として、同次方程式 $\left\{ \begin{array}{c} x_1& – x_2& + 2x_3& + x_4& + 2x_5& = 0 \\ & x_2& + x_3& – 3x_4& + x_5& = 0 \\ 3x_1& – 4x_2& + 7x_3& + 4x_4& + 9x_5& = 0 \\ x_1& + 2x_2& + x_3& – 4x_4& – 3x_5& = 0 \\ \end{array} \right.$ を解く。必要ならば、「行列の新規作成」ボタンを押し、行列を作成する。右辺の定数列も含めるので、解きたい連立1次方程式の大きさは4行6列である。(ここでは、M1という名前がついている。)

行列 M1
同時方程式 M1

「行列の演算」ウィンドウに戻り、「行列A」リストボックスでM1を選択し、 「連立1次方程式(A)の解法」ボタンを押すと、「連立1次方程式(M1)の解法」ウィンドウに解が分かるように表示される。

連立1次方程式(M1)の解法
M1の解法

「表示」メニューから「解の表示」を選ぶと、

連立1次方程式(M1)の解法 解の表示
M1の解の表示

のように、解が表示される。

ピボット操作1

上記の同次連立1次方程式(M1)をピボット操作を利用して解く。

行列 M1(再掲)
同時方程式 M1

「行列の演算」ウィンドウに戻り、「行列A」リストボックスでM1を選択する。(解く経過を残さない場合は、「結果を新ウィンドウに表示」のチェックを外す。)

行列の演算
行列の演算 メインウィンドウ

1行1列の要素「1」をクリックし、選択し、「行列の演算」ウィンドウの「ピボット操作」ボタンを押す。

1行1列がピボット
ピボット 1-1

2行2列の要素「1」を選び、「ピボット操作」ボタンを押す。

2行2列がピボット
ピボット 2-2

3行3列の要素「2」を選び、「ピボット操作」ボタンを押す。

3行3列がピボット
ピボット 3-3

となり、答えが得られた。

非同時連立1次方程式

例として、非同次方程式 $\left\{ \begin{array}{c} & & x_3& + 12x_4& – x_5& = 33 \\ -6x_1& + 3x_2& & – 3x_4& + 2x_5& = -63 \\ 5x_1& – 2x_2& & + 2x_4& – x_5& = 52 \\ 3x_1& & – 3x_3& – 12x_4& + 2x_5& = -3 \\ \end{array} \right.$ を解く。必要ならば、「行列の新規作成」ボタンを押し、行列を作成する。右辺の定数列も含めるので、解きたい連立1次方程式の大きさは4行6列である。(ここでは、M2という名前がついている。)

行列 M2
非同次 行列 M2

「行列の演算」ウィンドウに戻り、「行列A」リストボックスでM2を選択し、 「連立1次方程式(A)の解法」ボタンを押すと、「連立1次方程式(M2)の解法」ウィンドウに解が分かるように表示される。

連立1次方程式(M2)の解法
M2の解法

「表示」メニューから「解の表示」を選ぶと、

連立1次方程式(M2)の解法 解の表示
M2の解の表示

のように、解が表示される。

ピボット操作2

上記の非同次連立1次方程式(M2)をピボット操作を利用して解く。

行列 M2(再掲)
非同次 行列 M2

「行列の演算」ウィンドウに戻り、「行列A」リストボックスでM2が選択されていることを確認する。(解く経過を残さない場合は、「結果を新ウィンドウに表示」のチェックを外す。)1行と2行を交換するために、「1」と「2」を選び、「交換」ボタンを押す。

1行と2行の交換
行列の演算 メインウィンドウ M2_1_2

1行1列の要素「-6」をクリックし、選択し、「行列の演算」ウィンドウの「ピボット操作」ボタンを押す。

1行1列がピボット
M2 ピボット 1-1

2行と3行を交換するために、「2」と「3」を選び、「交換」ボタンを押す。

2行と3行の交換
行列の演算 メインウィンドウ M2_2_3

2行2列の要素「1/2」を選び、「ピボット操作」ボタンを押す。

2行2列がピボット
M2 ピボット 2-2

3行3列の要素「1」を選び、「ピボット操作」ボタンを押す。

3行3列がピボット
M2 ピボット 3-3

4行4列の要素「24」を選び、「ピボット操作」ボタンを押す。

4行4列がピボット
M2 ピボット 4-4

となり、答えが得られた。

固有多項式

例として $\left( \begin{array}{cccc} 1 & -1 & -2 & 9 \\ 0 & 2 & 3 & 1 \\ 0 & 3 & -5 & 7 \\ 1 & 0 & -2 & 1 \end{array} \right)$ の固有多項式を求める。必要ならば、「行列の新規作成」ボタンを押し、この行列を作成する。(ここではM1という名前がついている。)

行列 M1
固有多項式 行列 M1

「行列の演算」ウィンドウに戻り、「行列A」リストボックスにおいて、M1を選択し、「固有多項式」ボタンを押す。新しいウィンドウに固有多項式を容易に求めることができる行列M1-CharPolyが表示される。

行列 M1-CharPoly
M1-CharPoly

この行列から、固有多項式が $\lambda^4 + \lambda^3 – 19\lambda^2 – 7\lambda + 178$ であることが分かる。

次に、行列の基本変形を利用して行列M1の固有多項式求める。(利用する計算方法については「線形代数微積分入門」の66ページにある「固有多項式を行列の基本変形を利用して求める」例を参照して下さい。)

行列 M1(再掲)
固有多項式 行列 M1

「行列の演算」ウィンドウに戻り、「行列A」リストボックスでM1を選択する。「列にも逆操作を行う」をチェックする。(解く経過を残さない場合は、「結果を新ウィンドウに表示」のチェックを外す。)2行と4行を交換するために、「2」と「4」を選び、「交換」ボタンを押す。

2行と4行を交換
行列の演算 メインウィンドウ M1_2_4

2行の-1倍を1行に加える

2行の-1倍を1行に加える
行列の演算 メインウィンドウ M1の操作1

3行を1/7倍する

3行を1/7倍する
行列の演算 メインウィンドウ M1の操作2

3行の-8倍を1行に加える

3行の-8倍を1行に加える
行列の演算 メインウィンドウ M1の操作3

3行の-2倍を2行に加える

3行の-2倍を2行に加える
行列の演算 メインウィンドウ M1の操作4

3行の-1倍を4行に加える

3行の-1倍を4行に加える
行列の演算 メインウィンドウ M1の操作5

(「表示」メニューから「分数」を選ぶと、4行3列の要素の逆数が7/193であることが分かるので)4行を7/193倍する。(どちらでもよいが、今後、逆数を知る必要がないので、「表示」メニューから「分数」をアンチェックし、既定の表示に戻す。)

4行を7/193倍する
行列の演算 メインウィンドウ M1の操作6

4行の-35-4/7倍を1行に加える

4行の-35-4/7倍を1行に加える
行列の演算 メインウィンドウ M1の操作7

4行の-3-1/7倍を2行に加える

4行の-3-1/7倍を2行に加える
行列の演算 メインウィンドウ M1の操作8

4行の2+4/7倍を3行に加える

4行の2+4/7倍を3行に加える
行列の演算 メインウィンドウ M1の操作9

となり、同じ答えが得られた。

固有値と固有ベクトル

例として $A = \left( \begin{array}{ccc} 0 & 0 & -2 \\ -1 & 2 & -1 \\ 1 & 0 & 3 \end{array} \right)$ の固有値と固有ベクトルを求める。必要ならば、「行列の新規作成」ボタンを押し、サイズを3行3列に変更し、この行列を作成する。(ここではM1という名前がついている。)

行列 M1
固有値 行列 M1

「行列の演算」ウィンドウに戻り、「行列A」リストボックスにおいて、M1を選択し、「固有多項式」ボタンを押す。新しいウィンドウに固有多項式を容易に求めることができる行列M1-CharPolyが表示される。

行列 M1-CharPoly
行列 M1-CharPoly $\left( \begin{array}{cc|c} 0 & -2 & -2 \\ 1 & 3 & 1 \\ \hline 0 & 0 & 2 \end{array} \right)$

左上の2次の行列より$\lambda^2 – 3\lambda + 2$が右下の1次の行列より$\lambda – 2$が得られ、結局、$A$の固有多項式は

\[ f_A(\lambda) = \left| \begin{array}{ccc} \lambda & 0 & 2 \\ 1 & \lambda – 2 & 1 \\ -1 & 0 & \lambda – 3 \end{array} \right| = \left( \lambda^2 – 3\lambda + 2 \right) \left( \lambda – 1 \right) = \left( \lambda – 1 \right) \left( \lambda – 2 \right)^2 \]

となる。これより固有値は$1$と$2$(2重解)となる。

固有値$1$に属する固有ベクトルは、係数行列が上記の固有多項式 $f_A(\lambda)$の行列式の部分($\lambda = 1$とおく)である、次の同次連立方程式の解である。

\[ \left\{ \begin{array}{c} x_1& & +2x_3& = 0 \\ x_1& – x_2& + x_3& = 0 \\ -x_1& & -2x_3& = 0 \end{array} \right. \]

先程利用した行列M1のサイズを3行4列に変更し、この行列に再利用する。

行列 M1
Another M1

「行列の演算」ウィンドウに戻り、「行列A」リストボックスでM1を選択し、「連立1次方程式(A)の解法」ボタンを押すと、「連立1次方程式(M1)の解法」ウィンドウに解が分かるように表示される。

連立1次方程式(M1)の解法
M1の解法

さらに、「表示」メニューから「解の表示」を選ぶと、

連立1次方程式(M1)の解法(解の表示)
M1解の表示

となり、固有値$1$に属する固有ベクトルは $\alpha \left( \begin{array}{c} -2 \\ -1 \\ 1 \end{array} \right)$ となる。

同様に、固有値$2$に属する固有ベクトルは、係数行列が上記の固有多項式 $f_A(\lambda)$の行列式の部分($\lambda = 2$とおく)である、次の同次連立方程式の解である。

\[ \left\{ \begin{array}{c} 2x_1& & +2x_3& = 0 \\ x_1& & + x_3& = 0 \\ -x_1& & -x_3& = 0 \end{array} \right. \]

必要ならば、「行列の新規作成」ボタンを押し、サイズを3行4列に変更し、この行列を作成する。(ここではM3という名前がついている。)

行列 M3
行列 M3

「行列の演算」ウィンドウに戻り、「行列A」リストボックスでM3を選択し、「連立1次方程式(A)の解法」ボタンを押すと、「連立1次方程式(M3)の解法」ウィンドウに解が分かるように表示される。

連立1次方程式(M3)の解法
M3の解法

さらに、「表示」メニューから「解の表示」を選ぶと、

連立1次方程式(M2)の解法(解の表示)
M3 解の表示

となり、固有値$2$に属する固有ベクトルは $\beta \left( \begin{array}{c} 0 \\ 1 \\ 0 \end{array} \right) +\gamma \left( \begin{array}{c} -1 \\ 0 \\ 1 \end{array} \right)$ となる。