Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
10장 LU 분해법
10.1 LU 분해법의 개요
10.2 LU 분해법으로서의Gauss 소거법
10.3 CHOLESKY 분해법
10.4 MATLAB 왼쪽 나눗셈
Applied Numerical Methods 장 분해법
10장 LU 분해법
Gauss 소거법은 선형대수 방정식을 푸는데사용되는 좋은 방법이다.
→비효율성동일한 계수 행렬 [A]를 갖고 우변 상수 {b}만 다를 경우
Recall : 소거법의 전진소거 단계 → 많은 계산 노력을 요구
}{}]{[ bxA =
LU 분해법은 시간이 소요되는 행렬 [A] 의 소거와우변 {b}의 조작을 분리시킨다.
일단 [A]가 "분해" 되면 우변 벡터의 여러 가지경우에 대해서 효율적으로 해를 구할 수 있다.
10 LU
Applied Numerical Methods 장 분해법
10.1 LU 분해법의 개요 (1/3)
→
방정식을 상삼각
시스템으로 바꾼다면
위 식을 정리하여 행렬 형태로 표시하면
}{}]{[ bxA =
0}{}]{[ =− bxA
=
3
2
1
3
2
1
33
2322
131211
ddd
xxx
uuuuuu
0}{}]{[ =− dxU
10 LU
Applied Numerical Methods 장 분해법
10.1 LU 분해법의 개요 (2/3)
대각선상의 원소가 모두1인 하삼각 행렬을 가정
다음의 관계를 만족한다면
결과적으로 성립해야 할 관계식은 다음과 같다.
과
=
11
1][
3231
21
lllL
}{}]{[}}{}]{]{[[ bxAdxUL −=−
][]][[ AUL = }{}]{[ bdL =
10 LU
Applied Numerical Methods 장 분해법
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
10 LU
Applied Numerical Methods 장 분해법
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 =
10 LU
Applied Numerical Methods 장 분해법
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)
10 LU
Applied Numerical Methods 장 분해법
예제 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
10 LU
Applied Numerical Methods 장 분해법
예제 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 =
−−−−
=
10 LU
Applied Numerical Methods 장 분해법
예제 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
10 LU
Applied Numerical Methods 장 분해법
예제 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 소거법과 같은 총 연산횟수를 갖는다.
• 분해단계에서 연산이 우변에 적용되지 않기 때문에조금이나마 계산량이 줄어든다.
10 LU
Applied Numerical Methods 장 분해법
예제 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
10 LU
Applied Numerical Methods 장 분해법
예제 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
10 LU
Applied Numerical Methods 장 분해법
10.3 Cholesky 분해법 (1/2)
대칭행렬 ( aij = aji 또는 [A] = [A]T의 관계가 성립)
→ 수학이나 공학 문제에 종종 발생
→ Cholesky 분해법과 같은 특별한 해법들이 사용 가능
→ 계산상 이점을 제공 ← 절반의 저장공간만 필요
← 절반의 계산시간 요구
10 LU
Applied Numerical Methods 장 분해법
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)
10 LU
Applied Numerical Methods 장 분해법
예제 10.4 (Cholesky 분해법) (1/2)
Q. 다음의 대칭행렬에 대해 Cholesky 분해를 실시하라.
풀이)
첫 번째 행에 대해서
=
97922555225551555156
][A
44949.261111 === au
123724.644949.215
11
1212 ===
uau
45366.2244949.255
11
1313 ===
uau
10 LU
Applied Numerical Methods 장 분해법
예제 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
10 LU
Applied Numerical Methods 장 분해법
예제 10.5 (MATLAB을 사용한 Cholesky 분해법) (1/3)
Q. MATLAB을 사용하여 다음의 대칭행렬에 대해
Cholesky 분해를 실시하고, 각 행의 합이 우변 벡터인
경우의 해를 구하라. (해는 요소가 1인 벡터이다.)
=
97922555225551555156
][A
10 LU
Applied Numerical Methods 장 분해법
예제 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
10 LU
Applied Numerical Methods 장 분해법
예제 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
10 LU
Applied Numerical Methods 장 분해법
10.4 MATLAB 왼쪽 나눗셈 (1/2)
계수행렬 [A]의구조를 먼저 조사한 후에
그에 맞는 가장 적절한 방법으로해를 구한다.
(a) 원소 중에 0이 많이 있는 띠행렬
(b) 삼각행렬이나 삼각 형태로 쉽게 변형이 가능한 행렬
(c) 대칭행렬
해법:
1) banded solver, back and forward substitution,
Cholesky 분해법
2) 부분피봇팅을 포함하는 Gauss 소거법, QR 분해법
10 LU
Applied Numerical Methods 장 분해법
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
10 LU