4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

単位行列と逆行列 : 線形代数をPythonで<4>

Last updated at Posted at 2020-05-23

#線形代数
理系大学で絶対に習う線形代数をわかりやすく、かつ論理的にまとめる。ちなみにそれをPythonで実装。たまに、Juliaで実装するかも。。。
・Pythonで動かして学ぶ!あたらしい数学の教科書 -機械学習・深層学習に必要な基礎知識-
・世界基準MIT教科書 ストラング線形代数イントロダクション
を基に線形代数を理解し、pythonで実装。

#環境
・JupyterNotebook
・言語:Python3, Julia1.4.0

#単位行列

E = \begin{pmatrix}1 & 0\\0 & 1\end{pmatrix},\begin{pmatrix}1 & 0 & 0\\0 & 1 & 0\\0 & 0 & 1\end{pmatrix}

のような左上から右下にかけて対角線上に1が並び、そのほかの要素は0になるという行列である。

n次正方行列に対して、同じ要素数の単位行列っをかけたとしても出力される値は同値となる。さらに積の順番は問わない。

AE = \begin{pmatrix}a & b\\c & d\end{pmatrix}\begin{pmatrix}1 & 0\\0 & 1\end{pmatrix}=\begin{pmatrix}a & b\\c & d\end{pmatrix}=\begin{pmatrix}1 & 0\\0 & 1\end{pmatrix}\begin{pmatrix}a & b\\c & d\end{pmatrix}=EA

###単位行列のPythonコード

import numpy as np

# print("2×2単位行列は")
print(np.eye(2))
# print("3×3単位行列は")
print(np.eye(3))
# print("4×4単位行列は")
print(np.eye(4))
#実装
2×2単位行列は
[[1. 0.]
 [0. 1.]]
3×3単位行列は
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
4×4単位行列は
[[1. 0. 0. 0.]
 [0. 1. 0. 0.]
 [0. 0. 1. 0.]
 [0. 0. 0. 1.]]

###単位行列のJuliaコード

using LinearAlgebra
Matrix{Int}(I, 2, 2) 
Matrix{Int}(I, 3, 3) 
Matrix{Int}(I, 4, 4) 
2×2 Array{Int64,2}:
 1  0
 0  1

3×3 Array{Int64,2}:
 1  0  0
 0  1  0
 0  0  1

4×4 Array{Int64,2}:
 1  0  0  0
 0  1  0  0
 0  0  1  0
 0  0  0  1

#逆行列
逆行列は、

AA^{-1} = A^{-1}A = E

という関係を持つものである。例を示すと、

A =\begin{pmatrix}1 & 1 \\1 & 2\end{pmatrix},
B =\begin{pmatrix}2 & -1 \\-1 & 1\end{pmatrix}

という二つの行列があるときに対して、ABの積を求める。

AB =\begin{pmatrix}1 & 1 \\1 & 2\end{pmatrix}\begin{pmatrix}2 & -1 \\-1 & 1\end{pmatrix}=\begin{pmatrix}1 & 0\\0 & 1\end{pmatrix}

これより

AB = E = BA \Longrightarrow B = A^{-1}

#行列式

A = \begin{pmatrix}a & b\\c & d\end{pmatrix}
\Longleftrightarrow
\begin{vmatrix}A\end{vmatrix}= det A = ad-bc

さらに2×2行列の時には、

A^{-1} = \frac{1}{ad-bc}\begin
{pmatrix}d & -b\\-c & a\end{pmatrix}

と表すことができ、この時、

ad-bc = 0 \Longleftrightarrow A^{-1}は存在しない
\\
ad-bc \neq 0 \Longleftrightarrow A^{-1}が存在する。

と書くことができる。

###行列式を含めた逆行列のPythonコード

import numpy as np


a = [input().split() for i in range(2)]
#数字入力
#=>1 2
#=>3 4

a = np.array(a)
print(a)
#=>[['1' '2']
#   ['3' '4']]

a = a.astype(np.float64)
print(np.linalg.det(a))
#=>-2.0000000000000004

if np.linalg.det(a) != 0:
    print(np.linalg.inv(a))
else:
    print("No exist")
#=>[[-2.   1. ]
#   [ 1.5 -0.5]]

実際には、if文を用いなくてもnp.linalg.inv()関数でそのまま計算しても、逆行列が存在しない場合にはエラーが起こる。ただ、行列式を今回は使いたいので、np.linalg.det()関数を用いて書いた。

###行列式を含めた逆行列のJuliaコード

using LinearAlgebra
A = [1 2; 3 4]
if det(A) == 0
    print("No exist")
else
    inv(A)
end

#=>2×2 Array{Float64,2}:
# -2.0   1.0
#  1.5  -0.5

inv()関数によって逆行列はすぐに求められる。
#最後に
次は、線形変換やるつもりなので、グラフ強くなりたい人は。ぜひ。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?