12장연립방정식을...
TRANSCRIPT
12장 연립 방정식을풀기 위한 반복법
12.1 선형 시스템: Gauss-Seidel
12.2 비선형 시스템
Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법
12.1 선형 시스템: Gauss-Seidel (1/10)
반복법은 초기 근을 가정한 후에 더 좋은 근의 값을추정하는 체계적인 절차를 이용한다.
G-S 방법은 선형 대수방정식을 푸는 반복법 중에서
가장 보편적으로 사용되는 방법이다.
n 개의 방정식에서 n = 3인 (대각원소들이 모두 0이 아닌)
경우를 다루자.
11
1313
12121
1 axaxabx
jjj
−− −−=
22
13231212
2 axaxabx
jjj
−−−=
33
23213133 a
xaxabxjj
j −−=
여기서 j = 현재 반복 단계
j-1 = 이전 반복 단계
12
Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법
12.1 선형 시스템: Gauss-Seidel (2/10)
x의 초기 값들을 가정한다.
(예) 모두 0
수렴 상태를 점검한다.
새로 계산된 x 값이 바로 다음 방정식의 x 값에대입된다: Gauss-Seidel
참고로 Jacobi 반복법에서는 새로 계산된 x 값이
그 다음 단계의 계산에서 대입된다.
sji
ji
ji
ia xxx
ε≤×−
=ε−
%1001
,
12
Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법
12.1 선형 시스템: Gauss-Seidel (3/10)
반복법의 원리 (a) Gauss-Seidel법과 (b) Jacobi법
12
Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법
예제 12.1 (Gauss-Seidel 법) (1/3)
Q. Gauss-Seidel법을 사용하여 다음 연립방정식의
해를 구하라.
참고로 정해는
4.71 10 .203.03.193.07 1.085.7 0.21.03
321
321
321
=+−−=−+
=−−
xxxxxxxxx
75.23}{ −=Tx
12
Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법
예제 12.1 (Gauss-Seidel 법) (2/3)
풀이)
첫 번째 반복
; ;
x2 = x3 = 0라고 놓고 x1을 구하고, 구한 값을 대입하여x2와 x3를 구한다.
32.01.085.7 32
1xxx ++
=7
3.01.03.19 312
xxx +−−=
102.03.04.71 21
3xxx +−
=
616667.23
)0(2.0)0(1.085.71 =
++=x
794524.27
)0(3.0)616667.2(1.03.192 −=
+−−=x
005610.710
)794524.2(2.0)616667.2(3.04.713 =
−+−=x
12
Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법
예제 12.1 (Gauss-Seidel 법) (3/3)
두 번째 반복
오차를 추정하면
εa,2 = 11.8%; εa,3 = 0.076%;
990557.23
)005610.7(2.0)794524.2(1.085.71 =
+−+=x
499625.27
)005610.7(3.0)990557.2(1.03.192 −=
+−−=x
000291.710
)499625.2(2.0)990557.2(3.04.713 =
−+−=x
%5.12%100990557.2
616667.2990557.21, =×
−=εa
12
Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법
12.1 선형 시스템: Gauss-Seidel (4/10)
수렴과 대각지배
Gauss-Seidel법은 단일방정식의 근을 구하는
고정점 반복법과 일맥상통한다.
수렴조건
대각지배 시스템∑≠=
>n
ijj
ijii aa1
12
Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법
12.1 선형 시스템: Gauss-Seidel (5/10)
MATLAB M-파일: GaussSeidel
행렬 형태로 표시하면
new2
33
32new1
33
31
33
3new3
old3
22
23new1
22
21
22
2new2
old3
11
13old2
11
12
11
1new1
xaax
aa
abx
xaax
aa
abx
xaax
aa
abx
−−=
−−=
−−=
=
333
222
111
///
}{ababab
d
=
0///0///0
][
33323331
22232221
11131112
aaaaaaaaaaaa
C
}]{[}{}{ xCdx −=
12
Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법
12.1 선형 시스템: Gauss-Seidel (6/10)
[Gauss-Seidel 법으로 해를 구하는 MATLAB M-파일 ]
function x = GaussSeidel(A,b,es,maxit)
% GaussSeidel (A,b,es,maxit):
% Gauss-Seidel method
% input:
% A = coefficient matrix
% b = right hand side vector
% es= (optional) stop criterion (%) (default = 0.00001)
% maxit = (optional) max iterations (default = 50)
% output:
% x = solution vector
12
Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법
12.1 선형 시스템: Gauss-Seidel (6/10)
[Gauss-Seidel 법으로 해를 구하는 MATLAB M-파일 ]
% default values
if nargin<4, maxit=50; end
if nargin<3, es=0.00001; end
[m,n] = size(A);
if m ~= n, error('Matrix A must be square'); end
C = A;
for i = 1:n
C(i,i) = 0;
x(i) = 0;
end
12
Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법
12.1 선형 시스템: Gauss-Seidel (6/10)
[Gauss-Seidel 법으로 해를 구하는 MATLAB M-파일 ]
x = x';
for i = 1:n
C(i,1:n) = C(i,1:n)/A(i,i);
end
for i = 1:n
d(i) = b(i)/ A(i,i);
end
iter = 0;
while (1)
xold = x; disp(x')
12
Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법
12.1 선형 시스템: Gauss-Seidel (6/10)
[Gauss-Seidel 법으로 해를 구하는 MATLAB M-파일 ]
for i = 1:n
x(i) = d(i) - C(i,:)*x;
if x(i) ~= 0
ea(i) = abs((x(i) - xold(i))/x(i)) * 100;
end
end
iter = iter +1;
if max(ea)<=es | iter >= maxit, break, end
end
12
Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법
12.1 선형 시스템: Gauss-Seidel (7/10)
>> A= [3 -.1 -.2; .1 7 -.3; .3 -.2 10]
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];
>> x = GaussSeidel(A,b)
12
Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법
12.1 선형 시스템: Gauss-Seidel (8/10)
0 0 0
2.6167 -2.7945 7.0056
2.9906 -2.4996 7.0003
3.0000 -2.5000 7.0000
3.0000 -2.5000 7.0000
3.0000 -2.5000 7.0000
x =
3.0000
-2.5000
7.0000
12
Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법
12.1 선형 시스템: Gauss-Seidel (9/10)
이완법
수렴 속도를 개선하기 위함
새로운 값을 계산한 후, 그 값을 현재와 직전에
계산된 결과의 가중평균으로 놓음
oldnewnew )1( iii xxx λ−+λ=
12
Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법
12.1 선형 시스템: Gauss-Seidel (10/10)
가중인자 λ: 0 ≤ λ ≤ 2
- λ = 1 수정되지 않음 = Gauss-Seidel법
- 0 ≤ λ ≤ 1 하이완법
수렴하지 않는 시스템을 수렴하도록 만들거나, 진동을 감쇠시켜 수렴
을 빠르게 함
- 1 ≤ λ ≤ 2 상이완법
현재 계산된 값에 큰 비중을 둠
새로운 값을 정해로 더 가까이 가도록 함
수렴하는 시스템의 수렴속도를 증가시키기 위함
연속상이완법(successive overrelaxation, SOR)이라고도 함
12
Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법
12.2 비선형 시스템 (1/6)
다음의 비선형 방정식을 고려해 보자.
573
102212
2121
=+
=+
xxx
xxx
0),,,(
0),,,(0),,,(
21
212
211
=
==
nn
n
n
xxxf
xxxfxxxf
12
Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법
12.2 비선형 시스템 (2/6)
연속대입법
고정점 반복법과 Gauss-Seidel법과 같은 전략을 사용함
수렴의 여부는 방정식을 어떻게 수식화하는가에 달려있음
초기 가정값이 정해에 충분히 가깝지 않으면 발산할 수 있음
비선형 방정식의 해를 구하는데 한계가 있음
12
Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법
예제 12.2 (비선형 방정식에 대한 연속대입법) (1/3)
Q. 연속대입법을 이용하여 다음 방정식의 근을 결정하라.
참고로 정해는 x1 = 2와 x2 = 3이다.
처음 계산을 위해 해를 x1 = 1.5와 x2 = 3.5로 가정한다.
573
102212
2121
=+
=+
xxx
xxx
12
Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법
예제 12.2 (비선형 방정식에 대한 연속대입법) (2/3)
풀이)
첫 번째 반복
두 번째 반복
이상의 결과에서 이 접근법은 발산할 것으로 보임
2
21
110
xxx −
= 2212 357 xxx −=
21429.25.3
)5.1(10 2
1 =−
=x 37516.24)5.3)(21429.2(357 22 −=−=x
20910.037516.24
)21429.2(10 2
1 −=−−
=x
709.429)37516.24)(20910.0(357 22 =−−−=x
12
Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법
예제 12.2 (비선형 방정식에 대한 연속대입법) (3/3)
원래의 방정식을 다른 형태로 바꾸어 계산해 보자.
첫 번째 반복
두 번째 반복
따라서 이 방법은 정해 x1 = 2와 x2 = 3에 수렴하는 결과를 산출한다.
211 10 xxx −=1
22 3
57x
xx −=
17945.2)5.3(5.1101 =−=x 86051.2)17945.2(3
5.3572 =
−=x
94053.1)86051.2(17945.2101 =−=x
04955.3)94053.1(3
86051.2572 =
−=x
12
Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법
12.2 비선형 시스템 (3/6)
Newton-Raphson법접선이 x축과 만나는 교점으로 근을 추정하기 위해 도함수
(기울기)를 계산하였음
1차 Taylor 급수 전개로도 유도가 가능
→
두 변수에 대한 Taylor 급수 전개는 다음과 같다.
여기서 xi = 근의 초기 가정 값
xi+1 = 접선이 x축과 만나는 교점
)()()()( 11 iiiii xfxxxfxf ′−+= ++
)()(
1i
iii xf
xfxx′
−=+
2
,1,21,2
1
,1,11,1,11,1 )()(
xf
xxxf
xxff iii
iiiii ∂
∂−+
∂
∂−+= +++
2
,2,21,2
1
,2,11,1,21,2 )()(
xf
xxxf
xxff iii
iiiii ∂
∂−+
∂∂
−+= +++
12
Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법
12.2 비선형 시스템 (4/6)
근의 추정 값에 대해 f1,i+1 = f2,i+1 = 0라고 놓으면
Cramer 공식을 사용하면
두 식에서 나타나는 분모를 시스템의 Jacobian행렬식이라고 한다.
2
,1,2
1
,1,1,11,2
2
,11,1
1
,1
xf
xxf
xfxxf
xxf i
ii
iiii
ii
∂
∂+
∂
∂+−=
∂
∂+
∂
∂++
2
,2,2
1
,2,1,21,2
2
,21,1
1
,2
xf
xxf
xfxxf
xxf i
ii
iiii
ii
∂
∂+
∂
∂+−=
∂
∂+
∂
∂++
1
,2
2
,1
2
,2
1
,1
2
,1,2
2
,2,1
,11,1
xf
xf
xf
xf
xf
fxf
fxx
iiii
ii
ii
ii
∂∂
∂∂
−∂∂
∂∂
∂∂
+−∂∂
−=+
1
,2
2
,1
2
,2
1
,1
1
,2,1
1
,1,2
,21,2
xf
xf
xf
xf
xf
fxf
fxx
iiii
ii
ii
ii
∂∂
∂∂
−∂∂
∂∂
∂∂
+−∂∂
−=+
하첨자 i가 붙은 모든 값(가정이나 추정)들은 알려져
있기 때문에 미지수는 x1,i+1과 x2,i+1이다. ⇒ 선형방정식
12
Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법
예제 12.3 (비선형 방정식에 대한 Newton-Raphson법) (1/3)
Q. 여러 방정식에 대한 Newton-Raphson법을 이용하여
다음 식의 근을 구하라.
처음 계산은 해를 x1 = 1.5와 x2 = 3.5라고 가정하고 시작한다.
573
102212
2121
=+
=+
xxx
xxx
12
Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법
예제 12.3 (비선형 방정식에 대한 Newton-Raphson법) (2/3)
풀이)
초기 값 x1 = 1.5와 x2 = 3.5에서의 편도함수를 계산한다.
첫 번째 반복을 위해 Jacobian 행렬식을 구한다.
5.32)5.3)(5.1(6161 75.36)5.3(33
5.1 5.65.3)5.1(22
212
0,2222
1
0,2
12
0,121
1
0,1
=+=+=∂
∂===
∂
∂
==∂
∂=+=+=
∂
∂
xxxf
xx
f
xxf
xxxf
125.156)75.36(5.1)5.32(5.6 =−
12
Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법
예제 12.3 (비선형 방정식에 대한 Newton-Raphson법) (3/3)
초기 가정 값에서의 함수 값을 계산하면 다음과 같다.
첫 번째 반복을 통해 계산한 수치 해는 다음과 같다.
이러한 과정을 만족할 만한 수치 해를 얻을 때까지 반복한다.
5.210)5.3(5.1)5.1( 20,1 −=−+=f
625.157)5.3)(5.1(35.3 20,2 =−+=f
03603.2125.156
)5.1(625.1)5.32(5.25.11 =−−
−=x
84388.2125.156
)75.36)(5.2()5.6(625.15.32 =−−
−=x
12
Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법
12.2 비선형 시스템 (5/6)
두 방정식에 대한 Newton-Raphson법은 n개의
연립방정식에 대해서도 일반화가 가능하다.
k번째 방정식에 대한 Taylor 급수 전개는 다음과 같다.
행렬 표기법을 사용하여 간단히 나타내면
n
ikin
iki
ikiikin
n
iki
iki
ik
xf
xxf
xxf
xfxxf
xxf
xxf
∂
∂++
∂
∂+
∂
∂+−=
∂
∂++
∂
∂+
∂
∂+++
,,
2
,,2
1
,,1,1,
,1,2
2
,1,1
1
,
}]{[}{}]{[ 1 ii xZfxZ +−=+
12
Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법
12.2 비선형 시스템 (6/6)
여기서 [Z] = 위치 i에서 계산된 편도함수로 구성된Jacobian 행렬
초기 값
최종 값
위치 i에서 계산된 함수 값
∂
∂
∂
∂
∂
∂
∂
∂
∂
∂
∂
∂∂
∂
∂
∂
∂
∂
=
n
ininin
n
iii
n
iii
xf
xf
xf
xf
xf
xf
xf
xf
xf
Z
,
2
,
1
,
,2
2
,2
1
,2
,1
2
,1
1
,1
][
iniiT
i xxxx ,,2,1}{ =
1,1,21,11}{ ++++ = iniiT
i xxxx
iniiT ffff ,,2,1}{ =
12