10장LU 분해법 - daegu.ac.krneslab.daegu.ac.kr/lec/numanalysis-doc/ppt/chap10.pdf ·...

11
2017-10-19 1 10장 LU 분해법 10.1 LU 분해법의 개요 10.2 LU 분해법으로서의 Gauss 소거법 10.3 CHOLESKY 분해법 10.4 MATLAB 왼쪽 나눗셈 Applied Numerical Methods Applied Numerical Methods 10장 LU 분해법 10장 LU 분해법 Gauss 소거법은 선형대수 방정식을 푸는데 사용되는 좋은 방법이다. ®비효율성 동일한 계수 행렬 [A]를 갖고 우변 상수 {b}만 다를 경우 Recall : 소거법의 전진소거 단계 ® 많은 계산 노력을 요구 } { } ]{ [ b x A = LU 분해법은 시간이 소요되는 행렬 [A] 의 소거와 우변 {b}의 조작을 분리시킨다. 일단 [A]가 "분해" 되면 우변 벡터의 여러 가지 경우에 대해서 효율적으로 해를 구할 수 있다.

Transcript of 10장LU 분해법 - daegu.ac.krneslab.daegu.ac.kr/lec/numanalysis-doc/ppt/chap10.pdf ·...

2017-10-19

1

10장 LU 분해법

10.1 LU 분해법의 개요

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

10.3 CHOLESKY 분해법

10.4 MATLAB 왼쪽 나눗셈

Applied Numerical MethodsApplied Numerical Methods 10장 LU 분해법

10장 LU 분해법

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

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

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

}{}]{[ bxA =

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

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

2017-10-19

2

Applied Numerical MethodsApplied Numerical Methods 10장 LU 분해법

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

®

방정식을 상삼각

시스템으로 바꾼다면

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

}{}]{[ bxA =

0}{}]{[ =- bxA

ïþ

ïý

ü

ïî

ïí

ì=

ïþ

ïý

ü

ïî

ïí

ì

úúú

û

ù

êêê

ë

é

3

2

1

3

2

1

33

2322

131211

ddd

xxx

uuuuuu

0}{}]{[ =- dxU

Applied Numerical MethodsApplied Numerical Methods 10장 LU 분해법

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

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

다음의 관계를 만족한다면

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

úúú

û

ù

êêê

ë

é=

11

1][

3231

21

lllL

}{}]{[}}{}]{]{[[ bxAdxUL -=-

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

2017-10-19

3

Applied Numerical MethodsApplied 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

jjijii blbd

}{}]{[ dxU =

nnnn adx /=

ij

n

ijjiji

i u

xudx

å+=

-= 1

Applied Numerical MethodsApplied 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

bbb

xxx

aaaaaaaaa

11

2121 a

af =

11

3131 a

af =

'22

'32

32 aaf =

2017-10-19

4

Applied Numerical MethodsApplied Numerical Methods 10장 LU 분해법

ULA

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

어디에 f를 저장할까??

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

Þúúú

û

ù

êêê

ë

é

"333231

'23

'2221

131211

affaafaaa

úúú

û

ù

êêê

ë

é

úúú

û

ù

êêê

ë

é=

úúú

û

ù

êêê

ë

é®

úúú

û

ù

êêê

ë

é

"33

'23

'22

131211

3231

21"333231

'23

'2221

131211

333231

232221

131211

11

1

aaaaaa

fff

affaafaaa

aaaaaaaaa

[MATLAB 함수]

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

Applied Numerical MethodsApplied Numerical Methods 10장 LU 분해법

예제 10.1+10.2 (1/4)

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

풀이)

전진소거:

참고:

4.71 10 .203.03.193.07 1.085.7 0.21.03

321

321

321

=+--=-+

=--

xxxxxxxxx

ïþ

ïý

ü

ïî

ïí

ì-=

ïþ

ïý

ü

ïî

ïí

ì

úúú

û

ù

êêê

ë

é

----

4.713.19

85.7

102.03.03.071.02.01.03

3

2

1

xxx

úúú

û

ù

êêê

ë

é-

--=

0120.1000293333.000333.70

2.01.03][U

ïþ

ïý

ü

ïî

ïí

ì-=

ïþ

ïý

ü

ïî

ïí

ì

úúú

û

ù

êêê

ë

é-

--

0843.705617.1985.7

0120.1000293333.000333.70

2.01.03

3

2

1

xxx

2017-10-19

5

Applied Numerical MethodsApplied Numerical Methods 10장 LU 분해법

예제 10.1+10.2 (2/4)

확인:

0333333.031.0

21 ==f 1000000.033.0

31 ==f

0271300.000333.7

19.032 -=

-=f

úúú

û

ù

êêê

ë

é-

--

úúú

û

ù

êêê

ë

é

-==

0120.1000293333.000333.70

2.01.03

10271300.0100000.010333333.0

1]][[][ ULA

][99996.92.03.0

3.070999999.02.01.03

]][[ AUL =úúú

û

ù

êêê

ë

é

----

=

Applied Numerical MethodsApplied Numerical Methods 10장 LU 분해법

예제 10.1+10.2 (3/4)

전진대입 단계:

또는

ïþ

ïý

ü

ïî

ïí

ì-=

ïþ

ïý

ü

ïî

ïí

ì

úúú

û

ù

êêê

ë

é

- 4.713.19

85.7

10271300.0100000.0010333333.0001

3

2

1

ddd

4.71 .0273000 100000.0 3.19 0333333.085.7

321

21

1

=+--=+

=

ddddd

d

5617.19)85.7(0333333.03.192 -=--=d

0843.70)5617.19(02713.0)85.7(1.04.713 =-+-=d

2017-10-19

6

Applied Numerical MethodsApplied Numerical Methods 10장 LU 분해법

예제 10.1+10.2 (4/4)

따라서

® 대입하면

그러므로 후진대입하여

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

{ }ïþ

ïý

ü

ïî

ïí

ì-=

0843.705617.1985.7

d

ïþ

ïý

ü

ïî

ïí

ì-=

ïþ

ïý

ü

ïî

ïí

ì

úúú

û

ù

êêê

ë

é-

--

0843.705617.1985.7

0120.1000293333.000333.70

2.01.03

3

2

1

xxx

{ }ïþ

ïý

ü

ïî

ïí

ì-=00003.7

5.23

x

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

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

Applied Numerical MethodsApplied Numerical Methods 10장 LU 분해법

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

Q. MATLAB을 사용하여 LU 분해법으로계수 행렬을 분해하고, 방정식의 해를 구하라. ï

þ

ïý

ü

ïî

ïí

ì-=

ïþ

ïý

ü

ïî

ïí

ì

úúú

û

ù

êêê

ë

é

----

4.713.19

85.7

102.03.03.071.02.01.03

3

2

1

xxx

>> 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

2017-10-19

7

Applied Numerical MethodsApplied 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

Applied Numerical MethodsApplied Numerical Methods 10장 LU 분해법

10.3 Cholesky 분해법 (1/2)

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

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

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

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

¬ 절반의 계산시간 요구

2017-10-19

8

Applied Numerical MethodsApplied Numerical Methods 10장 LU 분해법

10.3 Cholesky 분해법 (2/2)

핵심 알고리즘

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

( j = i+1, ¼, n)

‚ 전진대입 단계: {d} ¬

ƒ 후진대입 단계: {x} ¬

][][][ UUA T=

å-

=

-=1

1

2i

kkiiiii uau

ii

i

kkjkiij

ij u

uuau

å-

=

-=

1

1

}{}{][ bdU T =

}{}]{[ dxU =

[MATLAB 함수]

>> U = chol(X)

Applied Numerical MethodsApplied Numerical Methods 10장 LU 분해법

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

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

풀이)

첫 번째 행에 대해서

úúú

û

ù

êêê

ë

é=

97922555225551555156

][A

44949.261111 === au

123724.644949.215

11

1212 ===

uau

45366.2244949.255

11

1313 ===

uau

2017-10-19

9

Applied Numerical MethodsApplied Numerical Methods 10장 LU 분해법

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

두 번째 행에 대해서

세 번째 행에 대해서

따라서

1833.4)123724.6(55 22122222 =-=-= uau

9165.201833.4

)45366.22(123724.6225

22

13122323 =

-=

-=

uuuau

110101.6)9165.20()45366.22(979 22223

2133333 =--=--= uuau

úúú

û

ù

êêê

ë

é=

110101.69165.201833.4

45366.22123724.644949.2][U

Applied Numerical MethodsApplied Numerical Methods 10장 LU 분해법

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

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

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

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

úúú

û

ù

êêê

ë

é=

97922555225551555156

][A

2017-10-19

10

Applied Numerical MethodsApplied 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

Applied Numerical MethodsApplied 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

2017-10-19

11

Applied Numerical MethodsApplied 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 분해법

Applied Numerical MethodsApplied 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