22
10장 LU 분해법 10.1 LU 분해법의 개요 10.2 LU 분해법으로서의 Gauss 소거법 10.3 CHOLESKY 분해법 10.4 MATLAB 왼쪽 나눗셈

10장 LU - Pusan National Universitybml.pusan.ac.kr/resources/2015_Numerical_Analysis/10_LU... · 2015-03-23 · Applied Numerical Methods 10장LU 분해법 10.2 LU 분해법으로서의Gauss

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 10장 LU - Pusan National Universitybml.pusan.ac.kr/resources/2015_Numerical_Analysis/10_LU... · 2015-03-23 · Applied Numerical Methods 10장LU 분해법 10.2 LU 분해법으로서의Gauss

10장 LU 분해법

10.1 LU 분해법의 개요

10.2 LU 분해법으로서의Gauss 소거법

10.3 CHOLESKY 분해법

10.4 MATLAB 왼쪽 나눗셈

Page 2: 10장 LU - Pusan National Universitybml.pusan.ac.kr/resources/2015_Numerical_Analysis/10_LU... · 2015-03-23 · Applied Numerical Methods 10장LU 분해법 10.2 LU 분해법으로서의Gauss

Applied Numerical Methods 10장 LU 분해법

10장 LU 분해법

Gauss 소거법은 선형대수 방정식을 푸는데사용되는 좋은 방법이다.

비효율성동일한 계수 행렬 [A]를 갖고 우변 상수 {b}만 다를 경우

Recall : 소거법의 전진소거 단계 많은 계산 노력을 요구

}{}]{[ bxA

LU 분해법은 시간이 소요되는 행렬 [A] 의 소거와우변 {b}의 조작을 분리시킨다.

일단 [A]가 "분해" 되면 우변 벡터의 여러 가지경우에 대해서 효율적으로 해를 구할 수 있다.

Page 3: 10장 LU - Pusan National Universitybml.pusan.ac.kr/resources/2015_Numerical_Analysis/10_LU... · 2015-03-23 · Applied Numerical Methods 10장LU 분해법 10.2 LU 분해법으로서의Gauss

Applied Numerical Methods 10장 LU 분해법

10.1 LU 분해법의 개요 (1/3)

방정식을 상삼각

시스템으로 바꾼다면

위 식을 정리하여 행렬 형태로 표시하면

}{}]{[ bxA

0}{}]{[ bxA

3

2

1

3

2

1

33

2322

131211

d

d

d

x

x

x

u

uu

uuu

0}{}]{[ dxU

Page 4: 10장 LU - Pusan National Universitybml.pusan.ac.kr/resources/2015_Numerical_Analysis/10_LU... · 2015-03-23 · Applied Numerical Methods 10장LU 분해법 10.2 LU 분해법으로서의Gauss

Applied Numerical Methods 10장 LU 분해법

10.1 LU 분해법의 개요 (2/3)

대각선상의 원소가 모두1인 하삼각 행렬을 가정

다음의 관계를 만족한다면

결과적으로 성립해야 할 관계식은 다음과 같다.

1

1

1

][

3231

21

ll

lL

}{}]{[}}{}]{]{[[ bxAdxUL

][]][[ AUL }{}]{[ bdL

Page 5: 10장 LU - Pusan National Universitybml.pusan.ac.kr/resources/2015_Numerical_Analysis/10_LU... · 2015-03-23 · Applied Numerical Methods 10장LU 분해법 10.2 LU 분해법으로서의Gauss

Applied Numerical Methods 10장 LU 분해법

10.1 LU 분해법의 개요 (3/3)

요약

(1) LU 분해 단계: [A] [L][U]

(2) 대입 단계: 전진대입 [L]{d}={b} {d}

( i = 1, 2, , n)

후진대입 {x}

( i = n-1, n-2, , 1)

1

1

i

j

jijii blbd

}{}]{[ dxU

nnnn adx /

ij

n

ij

jiji

iu

xud

x

1

Page 6: 10장 LU - Pusan National Universitybml.pusan.ac.kr/resources/2015_Numerical_Analysis/10_LU... · 2015-03-23 · Applied Numerical Methods 10장LU 분해법 10.2 LU 분해법으로서의Gauss

Applied Numerical Methods 10장 LU 분해법

10.2 LU 분해법으로서의 Gauss 소거법 (1/2)

Gauss 소거법은 [L]과 [U]로 분해하는데 유용하게 사용된다.

세 개의 방정식으로 구성된 시스템을 고려하자.

첫 번째 행에 을 곱한 결과를 두 번째 행에서 뺀다.

첫 번째 행에 을 곱한 결과를 세 번째 행에서 뺀다.

수정된 두 번째 행에 를 곱한 결과를 세 번째 행에서 뺀다.

이러한 조작이 행렬 [A]에 행해졌다면동시에 벡터 {b}에도 행해져야 한다.

인자 f 를 저장하고, 추후에 {b}를 조작한다.

3

2

1

3

2

1

333231

232221

131211

b

b

b

x

x

x

aaa

aaa

aaa

11

2121

a

af

11

3131

a

af

'

22

'

3232

a

af

Page 7: 10장 LU - Pusan National Universitybml.pusan.ac.kr/resources/2015_Numerical_Analysis/10_LU... · 2015-03-23 · Applied Numerical Methods 10장LU 분해법 10.2 LU 분해법으로서의Gauss

Applied Numerical Methods 10장 LU 분해법

ULA

10.2 LU 분해법으로서의 Gauss 소거법 (2/2)

어디에 f를 저장할까??

f21 a21에, f31 a31에, 그리고 f32 a32에 저장

"

333231

'

23

'

2221

131211

aff

aaf

aaa

"

33

'

23

'

22

131211

3231

21

"

333231

'

23

'

2221

131211

333231

232221

131211

1

1

1

a

aa

aaa

ff

f

aff

aaf

aaa

aaa

aaa

aaa

[MATLAB 함수]

>> [L,U] = lu(X)

Page 8: 10장 LU - Pusan National Universitybml.pusan.ac.kr/resources/2015_Numerical_Analysis/10_LU... · 2015-03-23 · Applied Numerical Methods 10장LU 분해법 10.2 LU 분해법으로서의Gauss

Applied Numerical Methods 10장 LU 분해법

예제 10.1+10.2 (1/4)

Q. 다음의 방정식을LU 분해법으로 풀어라.

풀이)

전진소거:

참고:

4.71 10 .203.0

3.193.07 1.0

85.7 0.21.03

321

321

321

xxx

xxx

xxx

4.71

3.19

85.7

102.03.0

3.071.0

2.01.03

3

2

1

x

x

x

0120.1000

293333.000333.70

2.01.03

][U

0843.70

5617.19

85.7

0120.1000

293333.000333.70

2.01.03

3

2

1

x

x

x

Page 9: 10장 LU - Pusan National Universitybml.pusan.ac.kr/resources/2015_Numerical_Analysis/10_LU... · 2015-03-23 · Applied Numerical Methods 10장LU 분해법 10.2 LU 분해법으로서의Gauss

Applied Numerical Methods 10장 LU 분해법

예제 10.1+10.2 (2/4)

확인:

0333333.03

1.021 f 1000000.0

3

3.031 f

0271300.000333.7

19.032

f

0120.1000

293333.000333.70

2.01.03

10271300.0100000.0

10333333.0

1

]][[][ ULA

][

99996.92.03.0

3.070999999.0

2.01.03

]][[ AUL

Page 10: 10장 LU - Pusan National Universitybml.pusan.ac.kr/resources/2015_Numerical_Analysis/10_LU... · 2015-03-23 · Applied Numerical Methods 10장LU 분해법 10.2 LU 분해법으로서의Gauss

Applied Numerical Methods 10장 LU 분해법

예제 10.1+10.2 (3/4)

전진대입 단계:

또는

4.71

3.19

85.7

10271300.0100000.0

010333333.0

001

3

2

1

d

d

d

4.71 .0273000 100000.0

3.19 0333333.0

85.7

321

21

1

ddd

dd

d

5617.19)85.7(0333333.03.192 d

0843.70)5617.19(02713.0)85.7(1.04.713 d

Page 11: 10장 LU - Pusan National Universitybml.pusan.ac.kr/resources/2015_Numerical_Analysis/10_LU... · 2015-03-23 · Applied Numerical Methods 10장LU 분해법 10.2 LU 분해법으로서의Gauss

Applied Numerical Methods 10장 LU 분해법

예제 10.1+10.2 (4/4)

따라서

대입하면

그러므로 후진대입하여

최종 해를 얻으면 다음과 같다.

0843.70

5617.19

85.7

d

0843.70

5617.19

85.7

0120.1000

293333.000333.70

2.01.03

3

2

1

x

x

x

00003.7

5.2

3

x

• Gauss 소거법과 같은 총 연산횟수를 갖는다.

• 분해단계에서 연산이 우변에 적용되지 않기 때문에조금이나마 계산량이 줄어든다.

Page 12: 10장 LU - Pusan National Universitybml.pusan.ac.kr/resources/2015_Numerical_Analysis/10_LU... · 2015-03-23 · Applied Numerical Methods 10장LU 분해법 10.2 LU 분해법으로서의Gauss

Applied Numerical Methods 10장 LU 분해법

예제 10.3 (MATLAB을 사용한 LU 분해법) (1/2)

Q. MATLAB을 사용하여 LU 분해법으로

계수 행렬을 분해하고, 방정식의 해를 구하라.

4.71

3.19

85.7

102.03.0

3.071.0

2.01.03

3

2

1

x

x

x

>> A=[3 -.1 -.2; .1 7 -.3; .3 -.2 10]; % 행렬 A

>> b=[7.85; -19.3; 71.4]; % 우변 벡터

>> [L, U] = lu(A) % LU 분해

L =

1.0000 0 0

0.0333 1.0000 0

0.1000 -0.0271 1.0000

U =

3.0000 -0.1000 -0.2000

0 7.0033 -0.2933

0 0 10.0120

Page 13: 10장 LU - Pusan National Universitybml.pusan.ac.kr/resources/2015_Numerical_Analysis/10_LU... · 2015-03-23 · Applied Numerical Methods 10장LU 분해법 10.2 LU 분해법으로서의Gauss

Applied Numerical Methods 10장 LU 분해법

예제 10.3 (MATLAB을 사용한 LU 분해법) (2/2)

>> L*U % 분해결과 확인

ans =

3.0000 -0.1000 -0.2000

0.1000 7.0000 -0.3000

0.3000 -0.2000 10.0000

>> d=L\b % 전진대입

d =

7.8500

-19.5617

70.0843

>> x=U\d % 후진대입

x =

3.0000

-2.5000

7.0000

Page 14: 10장 LU - Pusan National Universitybml.pusan.ac.kr/resources/2015_Numerical_Analysis/10_LU... · 2015-03-23 · Applied Numerical Methods 10장LU 분해법 10.2 LU 분해법으로서의Gauss

Applied Numerical Methods 10장 LU 분해법

10.3 Cholesky 분해법 (1/2)

대칭행렬 ( aij = aji 또는 [A] = [A]T의 관계가 성립)

수학이나 공학 문제에 종종 발생

Cholesky 분해법과 같은 특별한 해법들이 사용 가능

계산상 이점을 제공 절반의 저장공간만 필요

절반의 계산시간 요구

Page 15: 10장 LU - Pusan National Universitybml.pusan.ac.kr/resources/2015_Numerical_Analysis/10_LU... · 2015-03-23 · Applied Numerical Methods 10장LU 분해법 10.2 LU 분해법으로서의Gauss

Applied Numerical Methods 10장 LU 분해법

10.3 Cholesky 분해법 (2/2)

핵심 알고리즘

분해단계: i 번째 행에 대해

( j = i+1, , n)

전진대입 단계: {d}

후진대입 단계: {x}

][][][ UUA T

1

1

2i

k

kiiiii uau

ii

i

k

kjkiij

iju

uua

u

1

1

}{}{][ bdU T

}{}]{[ dxU

[MATLAB 함수]

>> U = chol(X)

Page 16: 10장 LU - Pusan National Universitybml.pusan.ac.kr/resources/2015_Numerical_Analysis/10_LU... · 2015-03-23 · Applied Numerical Methods 10장LU 분해법 10.2 LU 분해법으로서의Gauss

Applied Numerical Methods 10장 LU 분해법

예제 10.4 (Cholesky 분해법) (1/2)

Q. 다음의 대칭행렬에 대해 Cholesky 분해를 실시하라.

풀이)

첫 번째 행에 대해서

97922555

2255515

55156

][A

44949.261111 au

123724.644949.2

15

11

1212

u

au

45366.2244949.2

55

11

1313

u

au

Page 17: 10장 LU - Pusan National Universitybml.pusan.ac.kr/resources/2015_Numerical_Analysis/10_LU... · 2015-03-23 · Applied Numerical Methods 10장LU 분해법 10.2 LU 분해법으로서의Gauss

Applied Numerical Methods 10장 LU 분해법

예제 10.4 (Cholesky 분해법) (2/2)

두 번째 행에 대해서

세 번째 행에 대해서

따라서

1833.4)123724.6(55 22

122222 uau

9165.201833.4

)45366.22(123724.6225

22

13122323

u

uuau

110101.6)9165.20()45366.22(979 222

23

2

133333 uuau

110101.6

9165.201833.4

45366.22123724.644949.2

][U

Page 18: 10장 LU - Pusan National Universitybml.pusan.ac.kr/resources/2015_Numerical_Analysis/10_LU... · 2015-03-23 · Applied Numerical Methods 10장LU 분해법 10.2 LU 분해법으로서의Gauss

Applied Numerical Methods 10장 LU 분해법

예제 10.5 (MATLAB을 사용한 Cholesky 분해법) (1/3)

Q. MATLAB을 사용하여 다음의 대칭행렬에 대해

Cholesky 분해를 실시하고, 각 행의 합이 우변 벡터인

경우의 해를 구하라. (해는 요소가 1인 벡터이다.)

97922555

2255515

55156

][A

Page 19: 10장 LU - Pusan National Universitybml.pusan.ac.kr/resources/2015_Numerical_Analysis/10_LU... · 2015-03-23 · Applied Numerical Methods 10장LU 분해법 10.2 LU 분해법으로서의Gauss

Applied Numerical Methods 10장 LU 분해법

예제 10.5 (MATLAB을 사용한 Cholesky 분해법) (2/3)

>> A=[6 15 55; 15 55 225; 55 225 979]; % 대칭행렬 A

>> b=[sum(A(1,:)); sum(A(2,:)); sum(A(3,:))] %우변 벡터의 생성

b =

76

295

1259

>> U=chol(A) % Cholesky 분해

U =

2.4495 6.1237 22.4537

0 4.1833 20.9165

0 0 6.1101

Page 20: 10장 LU - Pusan National Universitybml.pusan.ac.kr/resources/2015_Numerical_Analysis/10_LU... · 2015-03-23 · Applied Numerical Methods 10장LU 분해법 10.2 LU 분해법으로서의Gauss

Applied Numerical Methods 10장 LU 분해법

예제 10.5 (MATLAB을 사용한 Cholesky 분해법) (3/3)

>> U'*U % 분해결과 확인

ans =

6.0000 15.0000 55.0000

15.0000 55.0000 225.0000

55.0000 225.0000 979.0000

>> d=U'\b % 전진대입

d =

31.0269

25.0998

6.1101

>> x=U\d % 후진대입

x =

1.0000

1.0000

1.0000

Page 21: 10장 LU - Pusan National Universitybml.pusan.ac.kr/resources/2015_Numerical_Analysis/10_LU... · 2015-03-23 · Applied Numerical Methods 10장LU 분해법 10.2 LU 분해법으로서의Gauss

Applied Numerical Methods 10장 LU 분해법

10.4 MATLAB 왼쪽 나눗셈 (1/2)

계수행렬 [A]의 구조를 먼저 조사한 후에

그에 맞는 가장 적절한 방법으로 해를 구한다.

(a) 원소 중에 0이 많이 있는 띠행렬

(b) 삼각행렬이나 삼각 형태로 쉽게 변형이 가능한 행렬

(c) 대칭행렬

해법:

1) banded solver, back and forward substitution,

Cholesky 분해법

2) 부분피봇팅을 포함하는 Gauss 소거법, QR 분해법

Page 22: 10장 LU - Pusan National Universitybml.pusan.ac.kr/resources/2015_Numerical_Analysis/10_LU... · 2015-03-23 · Applied Numerical Methods 10장LU 분해법 10.2 LU 분해법으로서의Gauss

Applied Numerical Methods 10장 LU 분해법

10.4 MATLAB 왼쪽 나눗셈 (2/2)

>> A=[3 -.1 -.2; .1 7 -.3; .3 -.2 10] % 행렬 A

A =

3.0000 -0.1000 -0.2000

0.1000 7.0000 -0.3000

0.3000 -0.2000 10.0000

>> b=[7.85; -19.3; 71.4]; % 우변 벡터

>> y=A\b % 왼쪽 나눗셈

y =

3.0000

-2.5000

7.0000