티스토리 뷰

11_Basic_linear_algebra(한글)

Basic linear algebra in Julia

원저자: Andreas Noack Jensen (MIT) (http://www.econ.ku.dk/phdstudent/noack/) (with edits from Jane Herriman)

출처

https://github.com/JuliaComputing/JuliaBoxTutorials/tree/master/introductory-tutorials/intro-to-julia (github : JuliaComputing/JuliaBoxTutorials/introductory-tutorials/intro-to-julia/)

Topics:

  1. 기본 연산
  2. 라이브러리 LinearAlgebra
  3. 연습문제

함께보기

먼저, 랜덤 행렬을 정의해보자.

In [1]:
A = rand(1:4,4,4)
Out[1]:
4×4 Array{Int64,2}:
 4  4  1  1
 1  4  3  3
 4  4  4  4
 3  4  4  2

1로 이루어진 벡터도 정의하자.

In [2]:
x = fill(1.0, (4,)) # = fill(1.0, 4)
Out[2]:
4-element Array{Float64,1}:
 1.0
 1.0
 1.0
 1.0

A는 type이 Array{Int64,2}이고, x는 type이 Array{Float64,1} 라는 것을 볼 수 있다. Julia는 Vector{Type}=Array{Type,1}, Matrix{Type}=Array{Type,2} 로 별명(alias)을 정의하고있다.

많은 기본 연산은 다른 언어와 같다.

행렬곱(Multiplication)

In [3]:
b = A*x
Out[3]:
4-element Array{Float64,1}:
 10.0
 11.0
 16.0
 13.0

전치(Transpose)

다른 언어들처럼, A' 는 켤레전치(conjugate transpose)행렬이다.

In [4]:
A'
Out[4]:
4×4 LinearAlgebra.Adjoint{Int64,Array{Int64,2}}:
 4  1  4  3
 4  4  4  4
 1  3  4  4
 1  3  4  2

또는 아래처럼 전치(transpose)행렬을 구할 수 있다.

In [5]:
transpose(A)
Out[5]:
4×4 LinearAlgebra.Transpose{Int64,Array{Int64,2}}:
 4  1  4  3
 4  4  4  4
 1  3  4  4
 1  3  4  2

전치 후 곱셈

Julia는 *를 쓰지 않아도 된다.

In [6]:
A'A
Out[6]:
4×4 Array{Int64,2}:
 42  48  35  29
 48  64  48  40
 35  48  42  34
 29  40  34  30

선형계(linear systems) 풀기

A 가 정방(square)행렬 일 때, Ax=b는 함수 \ 로 풀 수 있다.

In [7]:
A\b
Out[7]:
4-element Array{Float64,1}:
 1.0
 1.0
 1.0
 1.0
In [8]:
A^-1 * b
Out[8]:
4-element Array{Float64,1}:
 0.9999999999999996
 1.0000000000000004
 1.0               
 0.9999999999999991

만약 과결정선형계(overdetermined linear system) (A 가 아래로 긴 행렬)일 때, A\b최소 제곱 해(least squares solution)를 도출한다.

In [9]:
Atall = rand(4, 2)
Out[9]:
4×2 Array{Float64,2}:
 0.620125  0.964271
 0.435129  0.392623
 0.352525  0.846371
 0.888477  0.154265
In [10]:
Atall\b
Out[10]:
2-element Array{Float64,1}:
 12.558191782805045
  7.886509151359657
In [11]:
(Atall'Atall)^-1 * Atall'b
Out[11]:
2-element Array{Float64,1}:
 12.55819178280504 
  7.886509151359654

만일 계수 부족 최소제곱 문제(rank-deficient least squares problem)인 경우는, 최소 노름 최소 제곱 해(minimum norm least squares solution)를 도출한다.

In [12]:
v1 = rand(4)
v2 = rand(4)
rankdef = hcat(v1, v1, v2)
Out[12]:
4×3 Array{Float64,2}:
 0.791797  0.791797  0.631865
 0.132592  0.132592  0.468963
 0.421476  0.421476  0.177085
 0.967094  0.967094  0.202275
In [13]:
rankdef\b
Out[13]:
3-element Array{Float64,1}:
  5.49389774957956 
  5.493897749579558
 11.26631347260693 

또한, 결정미달계(underdetermined system)(A가 아래로 짧은 행렬) 인 경우, Julia는 최소 노름 해(minimum norm solution)를 도출한다.

In [14]:
bshort = rand(2)
Ashort = rand(2, 3)
Out[14]:
2×3 Array{Float64,2}:
 0.913861   0.382365  0.542242
 0.0607539  0.420378  0.750087
In [15]:
Ashort\bshort
Out[15]:
3-element Array{Float64,1}:
 0.279885521561581  
 0.37741831223794353
 0.6366857785894317 

라이브러리 LinearAlgebra

선형 대수학의 대부분은 기본적으로 Julia에서 사용할 수 있지만 (위에서 본 것 처럼), LinearAlgebra라는 표준 라이브러리가 있으며, 더 많은 관련된 이름과 함수를 제공한다. 특히, 인수 분해(factorization) 및 일부 구조화된 행렬(structured matrix) type을 제공한다. 다른 패키지와 마찬가지로, using LinearAlgebra로 session에 이러한 추가 기능을 가져올 수 있다.

연습문제

10.1

v와 자신의 내적(inner product or "dot" product)를 구하자. 그리고 그 값을 dot_v에 저장하자.

In [16]:
v = [1,2,3]
Out[16]:
3-element Array{Int64,1}:
 1
 2
 3
In [17]:
dot_v = v'v
Out[17]:
14
In [18]:
using LinearAlgebra
In [19]:
dot_v = dot(v,v)
Out[19]:
14
In [20]:
dot_v = v⋅v # \cdot<tab>
Out[20]:
14
In [21]:
dot_v = (v,v) # \cdot<tab>
Out[21]:
14
In [22]:
@assert dot_v == 14

10.2

v와 자신의 외적(outer product)를 구하자. 그리고 그 값을 cross_v에 저장하자.

In [23]:
using LinearAlgebra
In [24]:
cross_v = cross(v,v)
Out[24]:
3-element Array{Int64,1}:
 0
 0
 0
In [25]:
cross_v = v×v # \times<tab>
Out[25]:
3-element Array{Int64,1}:
 0
 0
 0
In [26]:
cross_v = ×(v,v) # \times<tab>
Out[26]:
3-element Array{Int64,1}:
 0
 0
 0
In [27]:
@assert cross_v == [0, 0, 0]


'Flux in Julia > Learning Julia (Intro_to_Julia)' 카테고리의 다른 글

12. Factorizations and other fun (한글)  (0) 2018.10.05
12. Factorizations and other fun  (0) 2018.10.05
11. Basic linear algebra  (0) 2018.10.04
10. Multiple dispatch (한글)  (0) 2018.10.02
10. Multiple dispatch  (0) 2018.10.02
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함