ベイジアン研究所

プログラミング言語(アルゴリズム的な話が中心)やガジェットの紹介をしています。時々心理学の話も。

生きやすさについて

お題「#この1年の変化」

この1年の変化は世間的にも、自分自身にとっても凄まじい変化の年だった。某ウイルスに対する変化に関してはもううんざりとするほど多くの人が感じています。なので、ここでは私自身の「生きやすさ」という価値観の変化に関して述べたいと思う。

早速だが一昨年1年間私は心の体調を崩し、ずっと臨床心理士の元、カウンセリングを受け続けていた(コロナが流行る前の年です)。まあ遅かれ早かれ、いずれはこうなっていたんだと思う。私は昔から、人を大事にして人に合わせて人に好かれることで生きやすくなるんだと思っていた。

苦手な陽気な大学生のノリに無理やり合わせたり、キャラがあまりなかったために、無理やり自分にキャラ付けをしてそれを自分に強いていた。そうしなければ、この先社会で生きていくのは無理なんだと思っていた。

カウンセリングの甲斐もあって、なんとか就職することはできた。カウンセリングや、就職活動、自分で心理学を勉強するうちに、人に合わせる必要なんてないんじゃないかと思うようになってきた。自分が思ったままに行動してもいいんじゃないかと。

就職をし、地元を離れ、このご時世もあって、昔に関わっていた人とは、もはや会うことは無くなった。このタイミングで電話帳の登録を家族以外全て削除した。そして人間関係は過剰に作らないようにしている。

社会人生活はというと、以前思っていた、人に合わせるのが重要だというのは全くなく、お互いが過剰にコミュニケーションを取るのではなく、良い距離感の職場だった(そのような雰囲気に適合していると見抜かれて採用されたのだろう)。ともかく、とても居心地の良いものだった。

この1年で「生きやすさ」の価値観は、人に合わせる、というものから、自分に素直になるというものに変化した。今は家族以外の人間関係を持たず、こんなふうに文章を書いたり、学生の時にはできなかったことを一人でやったり、一人考え事をする生活が大変幸せである(もちろん職場では仕事と割り切って、人間関係を築いているが…)。

「結婚が幸せ」という価値観があると思うが、私は全く思わない。誰かとずっと一緒にいるということを想像するだけで頭が割れるほど痛くなる(一緒にいて全く苦痛にならない人がもしも、いれば良いが…)。そんな調子だから、私は一生結婚しないだろう。

このご時世が明けて、多少は人と人の距離が近づくかもしれない。そうしたら今のあまり人と関わらなくても良い、という無くなるのかもしれない(飲み会にも行かなくてはならないかもしれない、昔の関わっていた人から連絡が来るかもしれない)。

しかし、そんな時でも自分に素直になり、関わりたければ、関わり、嫌だと思ったら、嫌だと言えるようになりたい。そのために今から心の準備をしている。

今、内気で悩んでいる人も、社会に出れば、その人に合った環境なんて無数に合って、明るいことなんてなんの取り柄にもならないことを伝えたい。むしろ社会に出てその心の内側にある、素晴らしいものが外に出ていくものです。内向的な人間が、優秀なことは心理学でも、たくさんの研究があります(それを聞いて自分も自信を持った)。

ゴチャゴチャと取り止めもないことを書いたけれど、私はこれからも自分の気持ちを大事にして、素直に生きてゆこうと思った。

【Python入門】環境構築

1. 記事の目的
本記事ではMac OSを用いて、Pythonでプログラミングを行うための環境構築に関して解説を行う。Mac OSではターミナルでlinuxコマンドを用いて開発ができる。またVisual Studio Codeをダウンロードしてエディタとしても扱える。本記事ではviエディターを使ってPythonのプログラムを書く方法を解説する。

本記事で使用した環境は以下の通りである。
macOS Catalina version 10.15.7
Python 3.8.5

2. ターミナル
まず、Pythonでプログラミングを行うために、ターミナルについて説明する。
次の手順でターミナルを開くことができる。

  1. 左下あたりにある「Finder」を開く。

    f:id:camelsan:20210219220831p:plain
    図1 Finder

  2. 「ユーティリティ」というフォルダがあるので、開く。

    f:id:camelsan:20210219221012p:plain
    図2 ユーティリティ

  3. 「ターミナルが」あるので開く。

    f:id:camelsan:20210219221122p:plain
    図3 ターミナル

ターミナルを開くと、次のような画面が開かれる(青い四角で隠しているのは個人情報など)。

f:id:camelsan:20210219221715p:plain
図4 ターミナルの画面

2. Home brew
ターミナルから、Pythonをインストールするために、「Home brew」というソフトウェアを用いる。まず以下のサイトにアクセスする。

macOS(またはLinux)用パッケージマネージャー — Homebrew

f:id:camelsan:20210219222543p:plain
図5 アクセス先の画面

画面の真ん中にあるコマンドをターミナルに貼り付けて、Enterを押す。

f:id:camelsan:20210219222930p:plain
図6 貼り付けた後の画面

3. Pythonのインストール
ターミナルに次のコマンドを入力する。

$ brew install python

これでPython3系がインストールされる。

4. Pythonインタプリンタ
ターミナル上で次のコマンドを入力することで、Pythonのインタプリンタを開くことができる。

$ python3

f:id:camelsan:20210219224124p:plain
図7 インタプリンタを開いた後の画面

インタプリンタとは、対話型のプログラミング方式である。つまり実行可能なコードを1行1行実行することができる。

インタプリンタを開いた後に、次を入力する。

>>>1+3

Enterを押すと、画面に

4

と表示される。つまり1+3が計算された。

f:id:camelsan:20210219224619p:plain
図8 インタプリンタで計算

このように、インタプリンタを使用して、Pythonのプログラミングを行うことができる。インタプリンタを抜けるには次のコマンドを入力すれば良い。

>>>exit()

5. viエディター
原理的には、以上のようにでPythonのプログラミングを行うことができるが、1行1行入力して実行するのは面倒くさい(実際こんなやり方はしない)。動作確認の時に使用するくらいである。

一般的にはファイルにプログラムコードを書き、それ実行するというのが普通である。

プログラムは、エディターに書き込んで、Pythonファイルとして保存して、それ実行するという方式が取られる。そのためのエディターとして、viエディターというものを紹介する。

まず、ターミナルに次のコマンドを入力する。

$ vi hello.py

f:id:camelsan:20210219225833p:plain
図9 入力後の画面

これで、「hello.py」というPythonファイルが作成され、その中身が編集できるようになった。

「I」(キーボードのi)を入力することでviエディター内に文字を入力することができる(viエディターを開くたびにiを入力する必要がある)。

ファイルの中に次のコードを入力する。

print("Hello World")

f:id:camelsan:20210219230446p:plain
図10 入力後の画面

入力後、「Esc」(エスケープキー)を入力する。そして、「:wq」(コロン+w+q)と入力して、エンターキーをおす(必ず半角にしてから入力)。

そうすると、元のターミナルの画面に戻ってくる。これでさきほど入力したコード(print("Hello World."))が記載されたPythonファイルが保存される。

f:id:camelsan:20210219231215p:plain
図11 戻ってきた後の画面

6. Pythonコードの実行方法
viエディターで編集、保存したPythonファイルを用いてPythonコードを実行する方法を解説する。基本的には「python3 Pythonファイル名」と入力すれば実行することができる。実際に次のコマンドを打って先程のPythonファイル(hello.py)を実行してみる。

$ python3 hello.py

そうすると画面に

$ Hello World

と表示される。

f:id:camelsan:20210219231858p:plain
図12 コマンド入力後の画面

Pythonのコードで、print("〜")は、かっこ内の文字列を画面に表示せよ、という命令なので、コードが正しく動いたということになる。

7. 参考文献
[1] Home brew
macOS(またはLinux)用パッケージマネージャー — Homebrew
[2] Quiita, "Home brewのインストール"
Homebrewのインストール - Qiita
Home brewのインストールに関しては、こちらを見た方がわかりやすいと思われる。
[3] Quiita, "Python3インストール(Mac編)"
Python3インストール(Mac編) - Qiita
Pythonのインストールで詰まったらこちらを参照すると良い。
[4] 詳細!Python3入門ノート

Pythonに関して、わかりやすく解説されている書籍。

【線型代数学入門】逆行列の計算方法

1. 記事の目的
以下の記事で逆行列に関して述べた。

camelsan.hatenablog.com

しかし、逆行列の具体的な計算方法を述べずにいた。ここで、以下の記事で行列の階数を導入した。行列の階数を使って逆行列を求める方法に関する定理を証明することができる。

camelsan.hatenablog.com

2. 結論
最初に、どのように逆行列が計算できるか結論を先に述べる。(n,n)正則行列A逆行列A^{-1}を求めるには、(n,2n)型行列

\begin{pmatrix}A&E\end{pmatrix}\tag{1}

を左基本変形のみで

\begin{pmatrix}E&B\end{pmatrix}\tag{2}

の形にしたとき、BA逆行列である。即ち、B=A^{-1}である。左基本変形のみで、(1)式が(2)の形に必ず変形されることは、明らかではないが、次に証明する定理で保証される。

3. 定理
まず初めに次の定理を証明する。
定理[1]
n次正方行列Aが正則であるためには、その階数がnに等しいことが必要かつ十分な条件である。
証明A基本変形して、ある正則行列PQに対して、

PAQ=\begin{pmatrix}E_r&0\\0&0\end{pmatrix}\tag{3}

となったとする。Aが正則であると仮定すると、PAQも正則でなければならない。従って、(3)式より、r=nである。逆に、r=nと仮定する。

PAQ=E_n

より、A=P^{-1}Q^{-1}。よって、Aは正則である。

上記の定理を使って、次の定理を証明することができる。
定理[2]
行列Aが正則ならば、左(あるいは右)基本変形だけでA単位行列に変形することができる。逆に、左(あるいは右)基本変形だけでA単位行列に変形できれば、Aは正則である。
証明Aが正則ならば、定理[1]より、ある正則行列PQがあって、

PAQ=E\tag{4}

(PQは基本行列の積)(4)式の左からQ、右からQ^{-1}を掛けると、

QPA=E\tag{5}

QPも基本行列の積なので、(5)式は、左基本変形のみでA単位行列に変形できることを示している。また、逆にAが左基本行列のみで単位行列に変形できると仮定すると、基本行列の積であるQが存在して、

QA=E

となる。これは、Aの階数が、nであることを意味するので、定理[1]よりAは正則である。

4. 逆行列の計算方法
Aが正装行列のとき定理[2]から、左基本変形のみで、単位行列に変形できるので、ある正則行列Qがあって、

QA=E

両辺に右からA^{-1}を掛けると、

Q=A^{-1}

ここで、(n,2n)型行列

\begin{pmatrix}A&E\end{pmatrix}

を考える。このときQを左から掛けると、

\begin{split}Q\begin{pmatrix}A&E\end{pmatrix}&=\begin{pmatrix}QA&QE\end{pmatrix}\ \ \ \ (\textbf{区分けされた行列の演算})\\&=\begin{pmatrix}E&A^{-1}\end{pmatrix}\end{split}

即ち、本記事の冒頭で述べた事が言える。

5. 逆行列の計算例

A=\begin{pmatrix}1&2&3\\-2&-3&-4\\2&2&4\end{pmatrix}

逆行列を求める。

\begin{split}\begin{pmatrix}A&E\end{pmatrix}&=\begin{pmatrix}1&2&3&1&0&0\\-2&-3&-4&0&1&0\\2&2&4&0&0&1\end{pmatrix}\\&\rightarrow\begin{pmatrix}1&2&3&1&0&0\\0&1&2&2&1&0\\2&2&4&0&0&1\end{pmatrix}\ \ \ \ (\textbf{1行目の2倍を2行目に加える})\\&\rightarrow\begin{pmatrix}1&2&3&1&0&0\\0&1&2&2&1&0\\0&-2&-2&-2&0&1\end{pmatrix}\ \ \ \ (\textbf{1行目のー2倍を3行目に加える})\\&\rightarrow\begin{pmatrix}1&0&-1&-3&-2&0\\0&1&2&2&1&0\\0&-2&-2&-2&0&1\end{pmatrix}\ \ \ \ (\textbf{2行目のー2倍を1行目に加える})\\&\rightarrow\begin{pmatrix}1&0&-1&-3&-2&0\\0&1&2&2&1&0\\0&0&2&2&2&1\end{pmatrix}\ \ \ \ (\textbf{2行目の2倍を3行目に加える})\\&\rightarrow\begin{pmatrix}1&0&-1&-3&-2&0\\0&1&2&2&1&0\\0&0&1&1&1&\frac{1}{2}\end{pmatrix}\ \ \ \ (\textbf{3行目を1/2倍})\\&\rightarrow\begin{pmatrix}1&0&0&-2&-1&\frac{1}{2}\\0&1&2&2&1&0\\0&0&1&1&1&\frac{1}{2}\end{pmatrix}\ \ \ \ (\textbf{3行目を1行目に加える})\\&\rightarrow\begin{pmatrix}1&0&0&-2&-1&\frac{1}{2}\\0&1&0&0&-1&-1\\0&0&1&1&1&\frac{1}{2}\end{pmatrix}\ \ \ \ (\textbf{3行目の−2倍を2行目に加える})\end{split}

よって、

A^{-1}=\begin{pmatrix}-2&-1&\frac{1}{2}\\0&-1&-1\\1&1&\frac{1}{2}\end{pmatrix}\

となる。

次の記事

camelsan.hatenablog.com

6. 参考文献
[1] 線型代数入門

【線形代数学入門】行列の階数

1. 記事の目的
以下の記事で、行列の基本変形に関して述べた。本記事では基本変形を利用して、行列の階数という概念を導入する。行列の回数を導入すると、連立方程式が解けるための条件を記述することができる。

camelsan.hatenablog.com

2. 定理
行列の階数を導入するために、まず次の定理を証明する。

任意の(m,n)型行列Aは、基本変形を何回か行うことで、次の標準形に変形される。

F_{m,n}(r)=\begin{pmatrix}E_r&0_{r,m-r}\\0_{m-r,r}&0_{m-r,n-r}\end{pmatrix}

F_{m,n}(r)は図1のような行列である。

f:id:camelsan:20210207164641p:plain
図1 行列の標準形
対角線に並ぶ1の数はrは、Aのみにより決まり、基本変形の仕方にはよらない。
証明A=0ならば、F_{m,n}(0)=0より、Aはすでに標準形である。A\neq 0ならば、Aの少なくとも一つの成分で0でないものがあるので、基本変形を行うことで、(1,1)成分に0でない成分を移動させることができる。(1,1)をかなめとして、第1列、第一行を吐き出せば、

\begin{pmatrix}1&0&\dots&0\\0&&&\\\vdots&&*&\\0&&&\end{pmatrix}

の形になる。行列の掃き出しに関しては以下の記事を参照。

camelsan.hatenablog.com

ここで、第1行及び第1列以外の全てが0であれば、F_{m,n}(1)の標準形となり、定理が成立する。もし、第1行及び第1列以外に、0でない成分があれば、その成分を基本変形により、(2,2)成分に移し、(2,2)成分をかなめとして、第2列と第2行を掃き出すと、

\begin{pmatrix}1&0&\dots&0\\0&1&\dots&0\\0&0&&\\ \vdots&\vdots&*&\\0&0&&\end{pmatrix}

の形に変形される。この操作を可能な限り続ければ、行列の大きさは有限なので、あるrに関して、F_{m,n}(r)の形になる。
次に、rが(基本変形によらず)一意に決まることを示す。Aが2通りの形、F(r)=F_{m,n}(r)F(s)=F_{m,n}(s)と変形されたと仮定する(r\neq s)。ここで、rsのいずれかが小さいので、小さい方をrとすれば、一般性を失わずr\le sと仮定できる。AF(r)F(s)に変形されるので、ある正則行列P_1Q_1P_2Q_2があって、

P_1AQ_1=F(r)
P_2AQ_2=F(s)

よって、

A=P_1^{-1}F(r)Q_1^{-1}
A=P_2^{-1}F(s)Q_2^{-1}

と変形されるので、

P_1^{-1}F(s)Q_1^{-1}=P_2^{-1}F(r)Q_2^{-1}

となり、

F(s)=P_1P_2^{-1}F(r)Q_2^{-1}Q_1

となる。即ち、P=P_2^{-1}P_1Q=Q_2^{-1}Q_1とおくと、正則行列PQを使って

F(s)=PF(r)Q

と表せる。PQの行と列をr番目で四つに対称に区分けをして、

P=\begin{pmatrix}P_{11}&P_{12}\\P_{12}&P_{22}\end{pmatrix}, Q=\begin{pmatrix}Q_{11}&Q_{12}\\Q_{21}&Q_{22}\end{pmatrix}

とすれば(P_{11}Q_{11}(r,r)型行列)、

\begin{split}F(s)&=\begin{pmatrix}P_{11}&P_{12}\\P_{12}&P_{22}\end{pmatrix}\begin{pmatrix}E_r&0\\0&0\end{pmatrix}\begin{pmatrix}Q_{11}&Q_{12}\\Q_{21}&Q_{22}\end{pmatrix}\\&=\begin{pmatrix}P_{11}&0\\P_{12}&0\end{pmatrix}\begin{pmatrix}Q_{11}&Q_{12}\\Q_{21}&Q_{22}\end{pmatrix}\\&=\begin{pmatrix}P_{11}Q_{11}&P_{11}Q_{12}\\P_{21}Q_{21}&P_{21}Q_{22}\end{pmatrix}\end{split}\tag{1}

r\le qの仮定により

P_{11}Q_{11}=E_r\tag{2}
P_{11}Q_{12}=O_{r,m-r}\tag{3}
P_{21}Q_{11}=O_{m-r,r}\tag{4}

が成り立つ(図2参照)。

f:id:camelsan:20210208201916p:plain
図2 (1)の参照図
以下の記事の正則行列に関する定理より、P_{11}Q_{11}は正則である。

camelsan.hatenablog.com

従って、(3)、(4)より、

Q_{12}=P_{11}^{-1}O_{r,m-r}=O_{r,m-r}
P_{21}=O_{m-r,r}Q_{11}^{-1}=O_{m-r,r}

よって、P_{21}Q_{12}=O_{m-r,n-r}となる。従って、(1)は、

F(s)=\begin{pmatrix}E_r&0\\0&0\end{pmatrix}

となり、これはr=sでなければ成立しない。

3. 行列の階数
2.の定理で定まる、行列Aに対する数、rを行列Aの階数という。rは定理に示されているように、行列Aだけで、一意に決定される。
例:次の行列Aの階数を求める。

A=\begin{pmatrix}2&1&3\\4&2&6\end{pmatrix}
\begin{split}A&\rightarrow\begin{pmatrix}2&1&3\\0&0&0\end{pmatrix}\ \ \ \ (\textbf{第1行目のー2倍を第2行目に加える})\\&\rightarrow\begin{pmatrix}2&0&3\\0&0&0\end{pmatrix}\ \ \ \ (\textbf{第1列目の-1/2倍を第2列目に加える})\\&\rightarrow\begin{pmatrix}2&0&0\\0&0&0\end{pmatrix}\ \ \ \ (\textbf{第1列目の-3/2倍を第3列目に加える})\\&\rightarrow\begin{pmatrix}2&0&0\\0&0&0\end{pmatrix}\ \ \ \ (\textbf{第1行目を1/2倍する})\end{split}

従って、Aの階数は1である。

次の記事

camelsan.hatenablog.com

4. 参考文献
[1] 整形代数学入門

【線形代数学入門】行列の掃き出し

1. 記事の目的
以下の記事で、行列の基本変形に関して述べた。本記事では行列を用いて連立方程式を解く際の、行列の操作である掃き出しについて解説する。掃き出しの操作としては、行列の基本変形を繰り返して行われるものである。

2. 行列の掃き出し
(m,n)型行列A(p,q)成分が0でないとき、次の一連の操作を考える。
(1) p行を(p,q)成分で割って、(p,q)成分を1にする((左1)の操作)。
(2) p以外のすべてのiに対して、第i行から第p行の(i,p)成分倍を引く((左3)の操作)。

(1)、(2)の操作によりAは図1のA^{\prime}に変形される。

f:id:camelsan:20210206101029p:plain
図1 第q列の掃き出し
これを(p,q)をかなめとし、左から第q列を掃き出すという。

さらに次の操作を行う。
(3) q以外の全てのjに対し、第j列から第q列の(p,j)成分倍を引く。

(3)の操作により、A^{\prime}は図2のA^{\prime\prime}に変形される。

f:id:camelsan:20210206101736p:plain
図2 第p行の掃き出し

3. 正則行列に関する定理
掃き出しを利用することで、正則行列に関する、次の定理を証明することができる。

n次正方行列Aに対し、XA=Eとなるn次行列Xが存在すれば、Aは正則である。
(Aが正則であるかを判定するには、AX=XA=Eとなる行列Xが存在するか否かを調べる必要があったが、XA=EとなるXを見つけるだけで良いことになる、というのがこの定理の意味することである。)
証明nに関する数学的帰納法により証明する。n1のとき、AXは共に通常の数となり、交換できるので、成立する。
n>1とし、n-1次行列に対しては主張が正しいと仮定する。行列に(1,1)成分を考える。その成分が0でないときは良い。0のとき、Aは零行列ではないので(零行列とすると、AX=Eより、E=0となり矛盾)、どこかの成分は0ではない成分がある。よって、行や列を入れ替えることで(基本変形を繰り返す)、(1,1)成分に0でない成分を移動させる。(1,1)をかなめとし、第1列と第1行を掃き出すとAは次の行列Bに変形される。

\begin{pmatrix}1&^{t}\textbf{0}\\ \textbf{0}&A_1\end{pmatrix}

ここで、^{t}\textbf{0}=(0,\dots,0)を表す。
行列の基本変形とは、基本行列を掛けることなので、ある正則行列PQを適当に取ると(P, Qは基本行列をいくつか欠けたもの)

PAQ=B=\begin{pmatrix}1&^{t}\textbf{0}\\ \textbf{0}&A_1\end{pmatrix}

が成り立つ。

ここで、X_1A_1=EとなるX_1が存在することを証明する。XA=Eより、この式にPAQという項が現れるようにしたい。左からQ^{-1}、右からQを掛けると、

Q^{-1}XAQ=QQ^{-1}=E

P^{-1}P=Eより、

E=Q^{-1}XEAQ=Q^{-1}XP^{-1}PAQ

ここで出現する、未知の行列である、[texQ^{-1}XP^{-1}]について考える。Q^{-1}XP^{-1}PAQと同じ形に区分けする。即ち、

Q^{-1}XP^{-1}=\begin{pmatrix}u&^{t}\textbf{z}\\ \textbf{y}&X_1\end{pmatrix}

とする。(Q^{-1}XP^{-1})(PAQ)=Eより、

\begin{pmatrix}u&^{t}\textbf{z}\\ \textbf{y}&X_1\end{pmatrix}\begin{pmatrix}1&^{t}\textbf{0}\\ \textbf{0}&A_1\end{pmatrix}=\begin{pmatrix}1&^{t}\textbf{0}\\ \textbf{0}&E_{n-1}\end{pmatrix}

左辺を計算すると、

\begin{pmatrix}u&^{t}\textbf{z}\\ \textbf{y}&X_1\end{pmatrix}\begin{pmatrix}1&^{t}\textbf{0}\\ \textbf{0}&A_1\end{pmatrix}=\begin{pmatrix}u&^{t}\textbf{z}A_1\\ \textbf{y}&X_1A_1\end{pmatrix}

より、

\begin{pmatrix}u&^{t}\textbf{z}A_1\\ \textbf{y}&X_1A_1\end{pmatrix}=\begin{pmatrix}1&^{t}\textbf{0}\\ \textbf{0}&E_{n-1}\end{pmatrix}

従って、

X_1A_1=E_{n-1}

よって、帰納法の仮定より、A_1は正則である。従って以下の記事の区分けされた行列に関する逆行列の定理(左上と右下の行列が正則であれば、元の行列も正則)より

B=\begin{pmatrix}1&^{t}\textbf{0}\\ \textbf{0}&A_1\end{pmatrix}

も正則である。PAQ=Bより、A=P^{-1}AQ^{-1}であるから、Aも正則である(正則行列同士をかけても正則)。

camelsan.hatenablog.com

4. 参考文献
[1] 線形代数学入門

【線型代数学入門】基本変形

1. 記事の目的
以下の記事で行列の演算に関して述べた。本記事では行列を利用した連立一次方程式の解法で必要となる基本変形に関して解説する。

camelsan.hatenablog.com

camelsan.hatenablog.com

2. 基本変形
行列を扱う際、できるだけ簡単な形の行列に変形して考えることが有用な場合が多い。例えば連立一次方程式の開放に行列を利用するときも、そのひとつである。具体的には、

\begin{pmatrix}0&2&4&2\\1&2&3&1\\-2&-1&0&1\end{pmatrix}

のような行列を、

\begin{pmatrix}1&0&0&0\\0&1&0&0\\0&0&0&0\end{pmatrix}

のような行列に変形する。

3. 基本行列
以下で基本行列と呼ばれる3種類の特別な正方行列を述べる。
(1)図1の行列をP_n(i,j)とする。

f:id:camelsan:20210126203931p:plain
図1 基本行列一つ目
n単位行列の、第i列と第j列を交換したものである。(m,n)型行列Aに対し、P_m(i,j)を左から掛けると、Aの第i行と第j行が交換される。
例:

A=\begin{pmatrix}1&2&3\\4&5&6\end{pmatrix}, P_2(1,2)=\begin{pmatrix}0&1\\1&0\end{pmatrix}

とする。このとき

\begin{split}P_2(1,2)A&=\begin{pmatrix}0&1\\1&0\end{pmatrix}\begin{pmatrix}1&2&3\\4&5&6\end{pmatrix}\\&=\begin{pmatrix}4&5&6\\1&2&3\end{pmatrix}\end{split}

となる。従って、P_2(1,2)を左から掛けると、ちょうどAの第i行と第j行が交換されている。

(m,n)型行列Aに対し、P_n(i,j)を右から掛けると、Aの第i行と第j列が交換される。
例:

A=\begin{pmatrix}1&2&3\\4&5&6\end{pmatrix}, P_3(1,2)=\begin{pmatrix}0&1&0\\1&0&0\\0&0&1\end{pmatrix}

とする。このとき

\begin{split}AP_3(1,2)&=\begin{pmatrix}1&2&3\\4&5&6\end{pmatrix}\begin{pmatrix}0&1&0\\1&0&0\\0&0&1\end{pmatrix}\\&=\begin{pmatrix}2&1&3\\5&4&6\end{pmatrix}\end{split}

となる。従って、P_3(1,2)を右から掛けると、ちょうど、Aの第1列と第2列が交換されている。

P_n(i,j)は正則で、逆行列P_n(i,j)自身である。
証明逆行列の定義については次の記事を参考にしてほしい。

camelsan.hatenablog.com

P_n(i,j)P_n(i,j)を考える。P_n(i,j)に右からP_n(i,j)がかけられていると考えると、P_n(i,j)の第i列と第j列が交換されるので、これは単位行列Eとなる。従って、

P_n(i,j)P_n(i,j)=E

よってP_n(i,j)は正則で、逆行列P_n(i,j)自身である。

(2) 図2の行列をQ_n(i;c)とする。

f:id:camelsan:20210127192413p:plain
図2 基本行列二つ目
単位行列(i,i)成分を、0でない数cに置き換えた行列である。

(m,n)型行列Aに対し、左からQ_m(i;c)を掛けると、Aの第i行がc倍される。
例:

A=\begin{pmatrix}1&2&3\\4&5&6\end{pmatrix}, Q_2(1;2)=\begin{pmatrix}2&0\\0&1\end{pmatrix}

とすると、

Q_2(1;2)A=\begin{pmatrix}2&0\\0&1\end{pmatrix}\begin{pmatrix}1&2&3\\4&5&6\end{pmatrix}=\begin{pmatrix}2&4&6\\4&5&6\end{pmatrix}

従って、Q_2(1;2)を左から掛けると、ちょうどA1行目が2倍されている。

(m,n)型行列Aに対して右からQ_n(i;c)を掛けると、Aの第i列がc倍される。
例:

A=\begin{pmatrix}1&2&3\\4&5&6\end{pmatrix}, Q_3(1;2)=\begin{pmatrix}2&0&0\\0&1&0\\0&0&1\end{pmatrix}

とすると

AQ_3(1;2)=\begin{pmatrix}2&2&3\\8&5&6\end{pmatrix}

従って、Q_3(1;2)を右から掛けると、ちょうどA1列目が2倍されている。

Q_n(i;c)は正則で、その逆行列Q_n(i;c^{-1})である。
証明Q_n(i;c)Q_n(i;c^{-1})を考える。Q_n(i;c)に右からQ_n(i;c^{-1})がかけられていると考えると、Q_n(i;c)の第i列がc^{-1}されるので、単位行列となる。即ち

Q_n(i;c)Q_n(i;c^{-1})=E

Q_n(i;c^{-1})Q_n(i;c)を考える。Q_n(i;c)に左からQ_n(i;c^{-1})がかけられていると考えると、Q_n(i;c)の第i行がc^{-1}されるので、単位行列となる。即ち

Q_n(i;c^{-1})Q_n(i;c)=E

従って、

Q_n(i;c)Q_n(i;c^{-1})=Q_n(i;c^{-1})Q_n(i;c)=E

より、Q_n(i:c)は正則で、その逆行列Q_n(i;c^{-1})である。

(3) 図3の行列をR_n(i,j;c)とする。

f:id:camelsan:20210127195709p:plain
図3 基本行列三つ目
単位行列(i,j)成分(i\neq j)を数cに変えたものが、R_n(i,j;c)である。

(m,n)型行列Aに左からR_m(i,j:c)を掛けると、Aの第i行に第j行のc倍が加わる。
例:

A=\begin{pmatrix}1&2&3\\4&5&6\end{pmatrix}, R_2(1,2;2)=\begin{pmatrix}1&2\\0&1\end{pmatrix}

とすると

\begin{split}R_2(1,2;2)A&=\begin{pmatrix}1&2\\0&1\end{pmatrix}\begin{pmatrix}1&2&3\\4&5&6\end{pmatrix}\\&=\begin{pmatrix}1+2\times 4&2+2\times 5&3+2\times 6\\4&5&6\end{pmatrix}\\&=\begin{pmatrix}9&12&15\\4&5&6\end{pmatrix}\end{split}

従って、R_2(1,2;2)を左から掛けると、ちょうどAの第1行に第j行の2倍が加わっている。

(m,n)型行列Aに対し、右からR_n(i,j;c)を掛けると、Aの第j列に第i列のc倍が加わる。
例:

A=\begin{pmatrix}1&2&3\\4&5&6\end{pmatrix}, R_3(1,2;2)=\begin{pmatrix}1&2&0\\0&1&0\\0&0&1\end{pmatrix}

とすると、

\begin{split}AR_3(1,2;2)&=\begin{pmatrix}1&2&3\\4&5&6\end{pmatrix}\begin{pmatrix}1&2&0\\0&1&0\\0&0&1\end{pmatrix}\\&=\begin{pmatrix}1&1\times 2+2&3\\4&4\times 2+5&6\end{pmatrix}\\&=\begin{pmatrix}1&4&3\\4&13&6\end{pmatrix}\end{split}

従って、R_3(1,2;2)を右から掛けると、ちょうどAの第2列に第1列の2倍が加わっている。

R_n(ij;c)は正則で、逆行列R_n(i,j;-c)である。
証明R_n(i,j;c)R_n(i,j;-c)を考える。R_n(i,j;c)に右からR_n(i,j;-c)がかけられていると考えると、R_n(i,j;c)の第j列に第i列の-c倍が加わるので、第j列の第i成分は0となる。即ち単位行列となる。よって

R_n(i,j;c)R_n(i,j;-c)=E

R_n(i,j;-c)R_n(i,j;c)を考える。R_n(i,j;c)に左からR_n(i,j;-c)がかけられていると考えると、R_n(i,j;c)の第i行に第j行の-c倍が加わるので、第i行の第j成分は0となる。即ち単位行列となる。よって

R_n(i,j;-c)R_n(i,j;c)=E

以上の(1)、(2)、(3)の正則行列を基本行列という。行列Aの左または右から基本行列を掛けることを、左基本変形または右基本変形という。両方合わせて、基本変形という。

4. まとめ
基本変形は次の6種類の変形となる。
(左1) 二つの行を入れ替える。
(左2) ある行に0でない数を掛ける。
(左3) ある行に他のある行の定数倍を加える。
(右1) 二つの列を入れ替える。
(右2) ある列に0でない数を掛ける。
(右3) ある列に他のある列の定数倍を加える。

次の記事

camelsan.hatenablog.com

5. 参考文献
[1] 線型代数入門

ブログのネタを思いつく方法

1. 記事の目的
ブログのネタが全然思いつかない人への対処法を経験から述べたいと思います。PVが少ないくせに記事数だけが増えてしまった人間の戯言です。

2. 結論
何か勉強しましょう。

3. 理由
例えば以下の記事は、私がプログラミングを勉強していたときに書いた記事です。

camelsan.hatenablog.com

エラーを解消するために丸1日かけて調べまくった結果たどり着いた解決法を書いています。このように、何か勉強していると、何かにつまづいて一生懸命調べることがあります。そして、共有の意味を込めて書くと良いと思います。

また、以下の記事は線形代数学について書いた記事です。

camelsan.hatenablog.com

本を参考にして自分なりにまとめたものです。このように体系的な知識はネタに尽きることはありません。この話を書いたら次はあのことを書こうなどと、芋づる式にアイデアが浮かんできます。

4. まとめ
兎に角、何か勉強しましょう。