CSE_Logo_LGS.png


안녕하세요? 오늘 부터 여려분들과 함께 Computational Science and Engineering 강좌를 진행할 잘생긴 교주 LGS입니다. ^^

잘 부탁드립니다. 바로 강의를 시작하도록 하죠~


CSE(Computational Science and Engineering) with MATLAB 강좌는 MIT Open Course Ware의 

스트랑느님의 Computational Science and Engineering 강좌를 기반으로 진행합니다.

영어가 쏼라쏼라 되시는 분은 MIT OCW를 직접 방문하셔서 저자 직강의 video lecture를 보시면 큰 도움이 될 것입니다.


Lec0101.png

( http://ocw.mit.edu/courses/mathematics/18-085-computational-science-and-engineering-i-fall-2008/ )


CSE with MATLAB 강좌는 크게 3가지의 주제를 가지고 진행됩니다.

  • Part 1 : Applied Linear Algebra
  • Part 2 : ODEs and PDEs
  • Part 3 : Fourier
위의 3가지 주제는 과학과 공학에서 반복적으로 나오고 반복적으로 나오고 반복적으로 나오고 또 나오는 녀석들입니다. ^^;;
다른 말로 위의 3가지를 잘 뚫어 놓으면 (만약 여러분이 과학자나 공학자라면) "인생"이 편한해진다는 이 말입니다요!!
자~ 기합 한 번 으쌰~ 넣고 본격적으로 강의 시작하겠습니다요 둥! 허잇!

Lec0102.png
가벼운 마음으로 matrix(행렬) 하나를 가지고 시작을 하겠습니다.
지금부터 3분동안 위의 matrix를  모니터가 뚫어지게 째려봅시다. (농담이 아니고 진짜 째려보셔야 합니다.)
3분 동안 째려보셨나요? ^^ 위의 K matrix에서 어떤 패턴을 찾아 내셨나요??

보자 보자 보자... 어디 보자... 아!! K matrix는 Symmetric 하네요~ ^^
Symmetric 하다라는 말은 matrix가 가운데 줄(diagonal 파랑색 2)을 중심으로 대칭이라는 말입니다.

Lec0103.png

좀더 보기 좋게 색을 입혀서 설명드리자면 위의  알록달록한 matrix를 대각선(파란색)을 중심으로 반을 접으면 
( 접힌 모양은 직삼각형 모양이 되겠네요) 서로 닿는 숫자(색깔)들이 완전 일치하겠죠?
수학적으로 Symmetric은 K = KT로 나타낼 수 있습니다.
KT 는 K의 transpose이구요~ 파랑색 대각선으로 앞뒤로 한번 뱅글 뒤집었다고 생각하시면 됩니다.
Matrix가 symmetric 하다면 Linear algebra에서는 아주 행복해집니다요. ^^ (이유는 차차 설명드리겠습니다.)

또 다른 패턴을 찾아내셨나요? 음... 보아하니 대각선 방향으로 숫자들이 일정하네요 

Lec0104.png
대각선 방향으로 일정한 숫자를 가지는 matrix를 toeplitz라고 합니다. (constant diagonal)
MATLAB에서 toeplitz matrix를 만드시려면?? 넵 toeplitz 함수를 사용하시면 되요 ^^
toeplitz 함수에 matrix의 [첫 행의 element]를 입력변수 넣어주면 자동으로 toeplitz matrix를 생성해줍니다.

Lec0105.png

만약 100 x 100 짜리 toeplitz K matrix를 만든다고 하면 K = toeplitz([2 -1 ones(1,98)]) 이라고 하시면 되겠죵? ^^
자~ 문제 나갑니다요!! K가 100 x 100 (100행 100열) 짜리 toeplitz 행렬이라면 0이 아닌 element의 개수는 모두 몇 개일까요?
3... 2... 1... 계산 다 하셨나요? =(=^ㅅ^=)=
대각선 2가 100개가 있을 것이고 -1이 좌우로 100에서 1개 모자란 99개가 있을 겁니다. 
그러므로 100+99+99 = 298개가 0이 아니겠네요. 
(참고로 MATLAB에서 0이 아닌 element의 개수를 구하시려면 nnz 함수를 사용하시면 됩니다. (Number of Non Zero))

Lec0112.png
(Sparse matrix가 어떻게 생겼는지 보시려면 spy 함수를 사용하시면 됩니다. 네모칸은 값이 있는 곳이고 여백은 모두 0입니다.)

행렬의 [대부분의 element]가 0인 행렬을 sparse matrix 라고 합니다.(sparse: 드문드문, 듬성듬성 한)
생각을 해보세요 K matrix의 크기가 100 x 100 이면 element가 1만개인데 그중 딸랑 298개만 값이 있다니 -_-;; 
Sparse matrix를 통째로 저장 한다면 메모리 낭비가 무지무지무지 심합니다.
또 예를 들어 K + K 를 계산한다고 하면 각 element마다 더하기를 수행해야 하므로 최소한 10000번은 계산을 해야죠?
10000번 계산하는 것이 효율적인가요? 값이 있는 곳만 계산하면 될 것을 쓸데없이 0+0을 9702번이나 계산하고 있네요 ㅜㅜ 
이럴 때 MATLAB에서 sparse라는 함수를 사용하시면 모든 값을 다 저장하는 것이 아니라 (sparse matrix의 반대말은 full matrix입니다.)
0 이아닌 element만 값(and matrix에서의 위치)을 저장하는 sparse matrix를 만들어 줍니다. 예~ =(=^ㅅ^=)=
메모리도 절약 !! 계산 속도도 향상 !! 케케 (inner product 라면 계산 속도가 드라마틱하게 빨라집니다.)
반대로 sparse matrix에서 full matrix를 만드시려면 MATLAB의 full 함수를 사용하시면 됩니다.

Lec0106.png
(괄호안에 있는 숫자는 element의 위치입니다. 
예를 들어 (3,4) -1 이라고 한다면 '3행 4열에는 -1이 들어 있다' 라고 말 할 수 있습니다.) 

K matrix의 또 다른 특징은?? 음... 음... diagonal의 폭이 3이라구요? 넵 그것도 좋구요(tri-diagonal)
음.. K matrix의 역행렬(inverse matrix)가 존재하나요?? 
inverse matrix가 존재한다는 말은 K의 determinant가 0이 아니란 말이죠?
(역행렬을 계산할 때 determinant가 분모에 들어가므로 determinant가 0이면 역행렬을 계산할 수 없습니다.)

그런데 determinant를 계산하는 것이 매우 비싼(expensive), 계산이 많이 필요한 작업이라는 거죠~ -_-;;
determinant를 계산하지 않고도 역행렬이 존재하는지 존재하지 안는지 확인하는 방법이 있습니다. 
결론부터 말씀 드리면 LU decomposition을 수행하시면 됩니다. 
LU decomposition으로 inverse matrix의 존재 유무(invertible)를 판단하는 것이 
일반적으로 determinant를 계산하여 invertible을 판단하는 것 보다 속도가 무지무지무지 빠릅니다.
LU decomposition에 대해서는 아래 Link 내용을 참조하시구요~ ^^ (LU decomposition을 알고 계시면 skip 하셔도 됩니다.)
http://www.matlabinuse.com/5075

LU decomposition을 한 후 U(Upper triangular matrix)가 positive definite이면 invertible(역행렬이 존재) 합니다.
아~ positive definite이 또 뭐냐 -_-;; 하면요~
U matrix의 pivot(대각선 성분)이 모두 양수이면 positive definite입니다.

Lec0107.png  

Upper triangular matrix의 pivot 중 0이 포함되어 있고 나머지는 다 양수이면  positive semi-definite,
pivot이 모두 음수이면 negative definite, 양수와 음수가 섞여있으면 indefinite 이라고 합습죠~ 헤헤
(위의 설명은 LU decomposition한 U matrix 기준으로 설명한 것이고 일반적인 matrix는 다르게 계산해 주어야 합니다.)

K matrix를 LU decomposition 해보면 K는 positive definite이고 그러므로 K는 invertible(역행렬이 존재)합니다.
Lec0108.png
(위의 U matrix를 보고 K의 determinant가 5라는 것을 찾아내셨다면 당신은 진정한 고수 -_-乃 )



Lec0109.png

K matrix와 무지무지무지하게 비슷하게 생겼지만 살짝 다른(귀퉁이에 -1이 들어가 있는) C matrix를 살펴봅시다요. (3분간 째려 봅니다)
저에게 C matrix의 특징에 대해서 말씀해주실 수 있겠어요?
넵 C matrix는 Symmetric하고, C matrix는 toeplitz 이고, C matrix는 sparse matrix이고... 
C matrix는 씁~ invertible?? 인가요?? 음... invertible은 MATLAB을 돌려보기전까지는 모르겠네요.

Lec0110.png

다시 C matrix에 어떤 vector u를 곱했더니 0 vector가 나왔습니다. vector u가 무엇인지 유추해봅시다.
vector u가 u = [1 1 1 1]T면 Cu는 [0 0 0 0]T가 되네요~ ^^
자~ C의 역행렬이 존재한다고 가정하고 Cu = 0의 양변의 C의 역행렬을 곱하면

Lec0111.png
엥? u가 u =  [0 0 0 0]T가 나오내요 -_-;; 
방금 전 위에서 오른쪽 결과값이 0 vector가 나오게 하는 u는 [1 1 1 1]’ 이라고 했는데... 냠 
모순이군요!! 그러므로 C의 inverse matrix(역행렬)는 존재하지 않습니다.

사실 위의 K와 C matrix는 사실 어떤 물리적인 상황을 묘사하고 있습니다.
K matrix의 경우 질량과 스프링으로 연결된 시스템이 양쪽 끝이 모두 고정된 (Fixed-Fixed) mass-spring 상황을 표현하고 있고 
C는 아래 그림에 나타나있듯이 고리(C는 고리라는 의미의 Circulant에서 가지고 왔습니다)를 이루고 있는 상태를 표현합니다. 
K matrix가 invertible 하다는 것은 파란색 상자에 힘을 주었을 때 모든 파란색 상자의 위치를 결정할 수 있다는 말이예요.
그에 반에 C (Circulant)는 상자간의 상대적인 위치는 알 수 있어도 절대적인 위치는 알 수 없습니다.

computation02.png 

K와 C matrix 이외에 2가지 종류의 matrix가 더 있습니다. =(=^ㅅ^=)=
T matrix는 Free-Fixed를 표현하구요.(T 는 Top에서 가지고 왔습니다. Matrix의 맨 윗행(Top)만 값이 살짝 다르죠? ^^) 
B는 Free-Free 이구요 (Both에서 B를 따 움)

자~ 그럼 T matrix는 inverse matrix가 존재할까요? 넵 존재하겠죠? 
왜냐면 파란색 상자의 위치를 알 수 있으니까요~ (한쪽이 고정되어 있잖아요) 
B는 파란색 상자의 절대적 위치를 알 수 없으므로 invertible 하지 않습니다.(inverse matrix가 존재하지 않습니다.)
아 물론 T,B matrix는 symmetric하고, sparse하고, toeplitz가 아닙니다.(대각선의 값이 고정된 것이 아니라 바뀌잖아요~)

수학은 과학, 공학의 언어 입니다.
영어를 잘 못하는데 영문소설을 재밌게 읽을 수는 없잖아요~
수학적 기반이 튼튼하지 않으면 과학,공학에 대한 깊이 있는 이해가 불가능합니다.
그래서 당분간 약간 수학적인 이야기로 강좌를 이어 나가겠습니다. 
(영어로 치자면 1형식, 2형식 문장 같은 기초 문법을 배우시는 거예요 ^^)

자~ 이번 시간은 여기까지 이구요~
다음 시간에 K, C, T, B matrix가 어떻게 나왔는지 살펴보겠습니다.
수고하셨습니다. 다음 시간에 뵈요~ 뿅!! =(=^ㅅ^=)=

profile