Julia早引きノート［25］線形代数演算(ベクトル・行列計算)

###線形代数演算(ベクトル・行列計算)(書き方例)

```ruby:note25
◆LinearAlgebraモジュールの読み込み
　using LinearAlgebra


◆ベクトルの演算
　# 内積(2つのベクトルをa,bとする)
　dot(a, b)
　
　# 外積(ベクトル積)
　cross(a, b)

　# L1ノルム(vを求める対象のベクトルとする)
　norm(v, 1)

　# L2ノルム
　norm(v, 2)

　# L∞ノルム(無限大ノルム)
　norm(v, Inf)

　# L1ノルムでの正規化
　normalize(v, 1)

　# L2ノルムでの正規化
　normalize(v, 2)


◆行列の演算
　# トレース(求める対象の行列をAとする)
　tr(A)

　# 行列式
　det(A)

　# 逆行列
　inv(A)

　# 対称行列
　Symmetric(A)

　# エルミート行列
　Hermitian(A)

　# 上三角行列
　UpperTriangular(A)

　# 下三角行列
　LowerTriangular(A)

　# 対角行列
　Diagonal(A)

　# 転置行列
　transpose(A)

```

##解説

Juliaでは、標準ライブラリに含まれているLinearAlgebraモジュールを使用することで、線形代数の計算や、定型的な行列を求めるなど、便利な機能を使用することができます。

・実際の計算を行う前に、以下のコマンドでLinearAlgebraモジュールを読み込んでおく必要があります。
　` using LinearAlgebra `
・ベクトルに関しては、内積、外積(ベクトル積)、ノルム等を求めることができます。
・行列に関しては、トレースや行列式の計算、また、逆行列、対称行列、エルミート行列、対角行列、上下三角行列などを求めることができます。

####(1)ベクトルの演算

**①内積の計算**

内積はdot()で計算します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/020b6153-b95a-938d-3d47-e59443bd5bd7.png)

**②外積(ベクトル積)の計算**

2つのベクトルをa,bとすると、
　a = (a1, a2, a3)
　b = (b1, b2, b3)
外積は以下で計算されます。
　(a2 * b3 - a3 * b2, a3 * b1 - a1 * b3, a1 * b2 - a2 * b1)

外積はcross()で計算します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/1c1517ab-1997-cf14-c101-38744d1b3bf8.png)

**③L1ノルムの計算**

求めるベクトルをvとします。
　v = (v1, v2, v3)
L1ノルムは、各成分の絶対値の和で求められます。
　|v1| + |v2| + |v3|

L1ノルムはnorm(v, 1)で計算します。
(vは求める対象のベクトル)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/0b38025e-696e-8310-044d-a52a6f3f48b4.png)

**④L2ノルムの計算**

L2ノルムは、各成分の2乗和で求められます。
**ユークリッドノルム**とも呼びます。

$$
\sqrt{v1^2 + v2^2 + v3^2}
$$

L2ノルムはnorm(v, 2)で計算します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/48ca1f92-5df5-089c-69f9-6bab90ac86c7.png)

**⑤L∞ノルム(無限大ノルム)の計算**

無限大ノルムは、各成分の絶対値の中で最も大きい成分の絶対値をノルムとする方式で、以下のように定義されます。

$$
max_{(i=1,2,...,N)}|v_i|
$$

無限大ノルムはnorm(v, Inf)で計算します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/ed402ff1-23d6-1d01-7881-fb6ec695556c.png)

**⑥L1ノルムでの正規化**

L1ノルムで正規化したベクトルを得るには、normalize(v, 1)を使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/9f72033e-4afe-eac1-b345-576f19380aa3.png)

**⑦L2ノルムでの正規化**

L2ノルムで正規化したベクトルを得るには、normalize(v, 2)を使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/16ba0258-1348-2a9a-3984-04209ae20ab5.png)


####(2)行列の演算

**①トレースの計算**

求める対象の行列をAとします。

$$
A = \begin{pmatrix} 1 & 2 & 3 \\\\ 4 & 0 & 1 \\\\ 2 & 5 & 6 \end{pmatrix}
$$

トレースはtr()で計算します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/e0ac37d5-302a-872e-3101-1aa8e4b46169.png)

**②行列式の計算**

行列式の値はdet()で計算します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/535dc003-f509-e5b8-c163-8dd68c1c4d68.png)

**③逆列式の計算**

逆行列はinv()で求めることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/17b9b77d-29a8-6f5f-0268-ce05558ae7f2.png)

**④対称行列の計算**

対称行列はSymmetric()で求めることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/8ce9233d-675c-1749-17bc-04c4122ba4c3.png)

**⑤エルミート行列の計算**

エルミート行列はHermitian()で求めることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/6ddac807-8f27-3fe0-e243-3e061bfa08f1.png)

**⑥上三角行列の計算**

上三角行列はUpperTriangular()で求めることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/a51f6e22-96d8-02a3-c5b5-f31327267c9d.png)

**⑦下三角行列の計算**

下三角行列はLowerTriangular()で求めることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/07903ab0-b369-f870-d0d1-16a933fa29a7.png)

**⑧対角行列の計算**

対角行列はDiagonal()で求めることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/5f2602a4-d0f0-cf5d-376d-af46192e153f.png)

**⑨転置行列の取得**

transpose()を使用して、行列の転置行列を取得することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/fefe8383-8e9f-7a30-8712-d1d94a90936b.png)


この他にも様々な行列計算の関数が用意されています。
詳細は、Juliaの公式ドキュメントを参照して下さい。


##もくじ
[Julia早引きノート［01］変数・定数の使い方](https://qiita.com/ttabata/items/a1ada2c0cba03672e105)
[Julia早引きノート［02］算術式、演算子](https://qiita.com/ttabata/items/90900d0914fa317f652d)
[Julia早引きノート［03］複素数]
(https://qiita.com/ttabata/items/225c77a4d71fafc3e482)
[Julia早引きノート［04］正規表現](https://qiita.com/ttabata/items/8b6e4a2b7c2ca299de03)
....
<details><summary>もくじを開く</summary><div>
[Julia早引きノート［05］if文]
(https://qiita.com/ttabata/items/4f0bcff1e32f60402dfb)
[Julia早引きノート［06］ループ処理]
(https://qiita.com/ttabata/items/2a53825101b0b75fb589)
[Julia早引きノート［07］try, catch, finally]
(https://qiita.com/ttabata/items/1d6fe990526c99b65b5f)
[Julia早引きノート［08］変数の型(Int, Float, Bool, Char, String)]
(https://qiita.com/ttabata/items/2b84a826e39bfe432b62)
[Julia早引きノート［09］関数 (1)基本編]
(https://qiita.com/ttabata/items/d9b4f2728ec0dbcc6394)
[Julia早引きノート［10］関数 (2)応用編]
(https://qiita.com/ttabata/items/462e216c43d519f1969d)
[Julia早引きノート［11］Nothing型]
(https://qiita.com/ttabata/items/0e5a6b21968d8752cf0b)
[Julia早引きノート［12］複合型(Composite Type)型]
(https://qiita.com/ttabata/items/27469216a3c33101c825)
[Julia早引きノート［13］タプル]
(https://qiita.com/ttabata/items/ebe35dbfec4efbc1c29a)
[Julia早引きノート［14］リスト(Array型一次元配列)]
(https://qiita.com/ttabata/items/7528863ccbb282e8260d)
[Julia早引きノート［15］辞書(dictionary)]
(https://qiita.com/ttabata/items/77a4f1d02b51d067bfb7)
[Julia早引きノート［16］集合]
(https://qiita.com/ttabata/items/ca8137922a785122037e)
[Julia早引きノート［17］多次元配列 (1)初期化]
(https://qiita.com/ttabata/items/01fecbd14363460a27a6)
[Julia早引きノート［18］多次元配列 (2)様々な演算や関数]
(https://qiita.com/ttabata/items/f35896a5fa005fba7fbc)
[Julia早引きノート［19］多次元配列 (3)サブ配列]
(https://qiita.com/ttabata/items/045c00406fe45270b42e)
[Julia早引きノート［20］ファイル入出力]
(https://qiita.com/ttabata/items/5a99c3998060d161ace8)
[Julia早引きノート［21］JSON、XMLファイルの入出力]
(https://qiita.com/ttabata/items/65ebec11830271f9be71)
[Julia早引きノート［22］Python関数やPythonモジュールの呼び出し]
(https://qiita.com/ttabata/items/3afc8cef40d1e98a7b17)
[Julia早引きノート［23］JuliaでのMatplotlibによるグラフ描画]
(https://qiita.com/ttabata/items/96a0e172addfac690cca)
[Julia早引きノート［24］CSVFiles(DataFrameとの連携)]
(https://qiita.com/ttabata/items/51446731a703b5aca524)
[Julia早引きノート［25］線形代数演算(ベクトル・行列計算)]
(https://qiita.com/ttabata/items/5abe14d5c510e8ca0f54)
(※引き続きコンテンツを増やしていきます)
</div></details>


##関連情報

:paperclip: Julia - 公式ページ
https://julialang.org/

:paperclip: Julia - 日本語公式ドキュメント
https://julia-doc-ja.readthedocs.io/ja/latest/index.html

:paperclip: 初めてのJuliaとインストール (Windows & Linux)
https://qiita.com/ttlabo/items/b05bb43d06239f968035

:paperclip: Julia - Mathematics
https://docs.julialang.org/en/v1/base/math/


##ご意見など

ご意見、間違い訂正などございましたらお寄せ下さい。