29
12장 연립 방정식을 풀기 위한 반복법 12.1 선형 시스템: Gauss-Seidel 12.2 비선형 시스템

12장연립방정식을 풀기위한반복법bml.pusan.ac.kr/Lecture/Undergraduates/NumAnalysis/... · function x = GaussSeidel(A,b,es,maxit) % GaussSeidel (A,b,es,maxit): % Gauss-Seidel

  • Upload
    vuanh

  • View
    219

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 12장연립방정식을 풀기위한반복법bml.pusan.ac.kr/Lecture/Undergraduates/NumAnalysis/... · function x = GaussSeidel(A,b,es,maxit) % GaussSeidel (A,b,es,maxit): % Gauss-Seidel

12장 연립 방정식을풀기 위한 반복법

12.1 선형 시스템: Gauss-Seidel

12.2 비선형 시스템

Page 2: 12장연립방정식을 풀기위한반복법bml.pusan.ac.kr/Lecture/Undergraduates/NumAnalysis/... · function x = GaussSeidel(A,b,es,maxit) % GaussSeidel (A,b,es,maxit): % Gauss-Seidel

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

Page 3: 12장연립방정식을 풀기위한반복법bml.pusan.ac.kr/Lecture/Undergraduates/NumAnalysis/... · function x = GaussSeidel(A,b,es,maxit) % GaussSeidel (A,b,es,maxit): % Gauss-Seidel

Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법

12.1 선형 시스템: Gauss-Seidel (2/10)

x의 초기 값들을 가정한다.

(예) 모두 0

수렴 상태를 점검한다.

새로 계산된 x 값이 바로 다음 방정식의 x 값에대입된다: Gauss-Seidel

참고로 Jacobi 반복법에서는 새로 계산된 x 값이

그 다음 단계의 계산에서 대입된다.

sji

ji

ji

ia xxx

ε≤×−

=ε−

%1001

,

12

Page 4: 12장연립방정식을 풀기위한반복법bml.pusan.ac.kr/Lecture/Undergraduates/NumAnalysis/... · function x = GaussSeidel(A,b,es,maxit) % GaussSeidel (A,b,es,maxit): % Gauss-Seidel

Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법

12.1 선형 시스템: Gauss-Seidel (3/10)

반복법의 원리 (a) Gauss-Seidel법과 (b) Jacobi법

12

Page 5: 12장연립방정식을 풀기위한반복법bml.pusan.ac.kr/Lecture/Undergraduates/NumAnalysis/... · function x = GaussSeidel(A,b,es,maxit) % GaussSeidel (A,b,es,maxit): % Gauss-Seidel

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

Page 6: 12장연립방정식을 풀기위한반복법bml.pusan.ac.kr/Lecture/Undergraduates/NumAnalysis/... · function x = GaussSeidel(A,b,es,maxit) % GaussSeidel (A,b,es,maxit): % Gauss-Seidel

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

Page 7: 12장연립방정식을 풀기위한반복법bml.pusan.ac.kr/Lecture/Undergraduates/NumAnalysis/... · function x = GaussSeidel(A,b,es,maxit) % GaussSeidel (A,b,es,maxit): % Gauss-Seidel

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

Page 8: 12장연립방정식을 풀기위한반복법bml.pusan.ac.kr/Lecture/Undergraduates/NumAnalysis/... · function x = GaussSeidel(A,b,es,maxit) % GaussSeidel (A,b,es,maxit): % Gauss-Seidel

Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법

12.1 선형 시스템: Gauss-Seidel (4/10)

수렴과 대각지배

Gauss-Seidel법은 단일방정식의 근을 구하는

고정점 반복법과 일맥상통한다.

수렴조건

대각지배 시스템∑≠=

>n

ijj

ijii aa1

12

Page 9: 12장연립방정식을 풀기위한반복법bml.pusan.ac.kr/Lecture/Undergraduates/NumAnalysis/... · function x = GaussSeidel(A,b,es,maxit) % GaussSeidel (A,b,es,maxit): % Gauss-Seidel

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

Page 10: 12장연립방정식을 풀기위한반복법bml.pusan.ac.kr/Lecture/Undergraduates/NumAnalysis/... · function x = GaussSeidel(A,b,es,maxit) % GaussSeidel (A,b,es,maxit): % Gauss-Seidel

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

Page 11: 12장연립방정식을 풀기위한반복법bml.pusan.ac.kr/Lecture/Undergraduates/NumAnalysis/... · function x = GaussSeidel(A,b,es,maxit) % GaussSeidel (A,b,es,maxit): % Gauss-Seidel

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

Page 12: 12장연립방정식을 풀기위한반복법bml.pusan.ac.kr/Lecture/Undergraduates/NumAnalysis/... · function x = GaussSeidel(A,b,es,maxit) % GaussSeidel (A,b,es,maxit): % Gauss-Seidel

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

Page 13: 12장연립방정식을 풀기위한반복법bml.pusan.ac.kr/Lecture/Undergraduates/NumAnalysis/... · function x = GaussSeidel(A,b,es,maxit) % GaussSeidel (A,b,es,maxit): % Gauss-Seidel

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

Page 14: 12장연립방정식을 풀기위한반복법bml.pusan.ac.kr/Lecture/Undergraduates/NumAnalysis/... · function x = GaussSeidel(A,b,es,maxit) % GaussSeidel (A,b,es,maxit): % Gauss-Seidel

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

Page 15: 12장연립방정식을 풀기위한반복법bml.pusan.ac.kr/Lecture/Undergraduates/NumAnalysis/... · function x = GaussSeidel(A,b,es,maxit) % GaussSeidel (A,b,es,maxit): % Gauss-Seidel

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

Page 16: 12장연립방정식을 풀기위한반복법bml.pusan.ac.kr/Lecture/Undergraduates/NumAnalysis/... · function x = GaussSeidel(A,b,es,maxit) % GaussSeidel (A,b,es,maxit): % Gauss-Seidel

Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법

12.1 선형 시스템: Gauss-Seidel (9/10)

이완법

수렴 속도를 개선하기 위함

새로운 값을 계산한 후, 그 값을 현재와 직전에

계산된 결과의 가중평균으로 놓음

oldnewnew )1( iii xxx λ−+λ=

12

Page 17: 12장연립방정식을 풀기위한반복법bml.pusan.ac.kr/Lecture/Undergraduates/NumAnalysis/... · function x = GaussSeidel(A,b,es,maxit) % GaussSeidel (A,b,es,maxit): % Gauss-Seidel

Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법

12.1 선형 시스템: Gauss-Seidel (10/10)

가중인자 λ: 0 ≤ λ ≤ 2

- λ = 1 수정되지 않음 = Gauss-Seidel법

- 0 ≤ λ ≤ 1 하이완법

수렴하지 않는 시스템을 수렴하도록 만들거나, 진동을 감쇠시켜 수렴

을 빠르게 함

- 1 ≤ λ ≤ 2 상이완법

현재 계산된 값에 큰 비중을 둠

새로운 값을 정해로 더 가까이 가도록 함

수렴하는 시스템의 수렴속도를 증가시키기 위함

연속상이완법(successive overrelaxation, SOR)이라고도 함

12

Page 18: 12장연립방정식을 풀기위한반복법bml.pusan.ac.kr/Lecture/Undergraduates/NumAnalysis/... · function x = GaussSeidel(A,b,es,maxit) % GaussSeidel (A,b,es,maxit): % Gauss-Seidel

Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법

12.2 비선형 시스템 (1/6)

다음의 비선형 방정식을 고려해 보자.

573

102212

2121

=+

=+

xxx

xxx

0),,,(

0),,,(0),,,(

21

212

211

=

==

nn

n

n

xxxf

xxxfxxxf

12

Page 19: 12장연립방정식을 풀기위한반복법bml.pusan.ac.kr/Lecture/Undergraduates/NumAnalysis/... · function x = GaussSeidel(A,b,es,maxit) % GaussSeidel (A,b,es,maxit): % Gauss-Seidel

Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법

12.2 비선형 시스템 (2/6)

연속대입법

고정점 반복법과 Gauss-Seidel법과 같은 전략을 사용함

수렴의 여부는 방정식을 어떻게 수식화하는가에 달려있음

초기 가정값이 정해에 충분히 가깝지 않으면 발산할 수 있음

비선형 방정식의 해를 구하는데 한계가 있음

12

Page 20: 12장연립방정식을 풀기위한반복법bml.pusan.ac.kr/Lecture/Undergraduates/NumAnalysis/... · function x = GaussSeidel(A,b,es,maxit) % GaussSeidel (A,b,es,maxit): % Gauss-Seidel

Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법

예제 12.2 (비선형 방정식에 대한 연속대입법) (1/3)

Q. 연속대입법을 이용하여 다음 방정식의 근을 결정하라.

참고로 정해는 x1 = 2와 x2 = 3이다.

처음 계산을 위해 해를 x1 = 1.5와 x2 = 3.5로 가정한다.

573

102212

2121

=+

=+

xxx

xxx

12

Page 21: 12장연립방정식을 풀기위한반복법bml.pusan.ac.kr/Lecture/Undergraduates/NumAnalysis/... · function x = GaussSeidel(A,b,es,maxit) % GaussSeidel (A,b,es,maxit): % Gauss-Seidel

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

Page 22: 12장연립방정식을 풀기위한반복법bml.pusan.ac.kr/Lecture/Undergraduates/NumAnalysis/... · function x = GaussSeidel(A,b,es,maxit) % GaussSeidel (A,b,es,maxit): % Gauss-Seidel

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

Page 23: 12장연립방정식을 풀기위한반복법bml.pusan.ac.kr/Lecture/Undergraduates/NumAnalysis/... · function x = GaussSeidel(A,b,es,maxit) % GaussSeidel (A,b,es,maxit): % Gauss-Seidel

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

Page 24: 12장연립방정식을 풀기위한반복법bml.pusan.ac.kr/Lecture/Undergraduates/NumAnalysis/... · function x = GaussSeidel(A,b,es,maxit) % GaussSeidel (A,b,es,maxit): % Gauss-Seidel

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

Page 25: 12장연립방정식을 풀기위한반복법bml.pusan.ac.kr/Lecture/Undergraduates/NumAnalysis/... · function x = GaussSeidel(A,b,es,maxit) % GaussSeidel (A,b,es,maxit): % Gauss-Seidel

Applied Numerical Methods 장 연립 방정식을 풀기 위한 반복법

예제 12.3 (비선형 방정식에 대한 Newton-Raphson법) (1/3)

Q. 여러 방정식에 대한 Newton-Raphson법을 이용하여

다음 식의 근을 구하라.

처음 계산은 해를 x1 = 1.5와 x2 = 3.5라고 가정하고 시작한다.

573

102212

2121

=+

=+

xxx

xxx

12

Page 26: 12장연립방정식을 풀기위한반복법bml.pusan.ac.kr/Lecture/Undergraduates/NumAnalysis/... · function x = GaussSeidel(A,b,es,maxit) % GaussSeidel (A,b,es,maxit): % Gauss-Seidel

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

Page 27: 12장연립방정식을 풀기위한반복법bml.pusan.ac.kr/Lecture/Undergraduates/NumAnalysis/... · function x = GaussSeidel(A,b,es,maxit) % GaussSeidel (A,b,es,maxit): % Gauss-Seidel

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

Page 28: 12장연립방정식을 풀기위한반복법bml.pusan.ac.kr/Lecture/Undergraduates/NumAnalysis/... · function x = GaussSeidel(A,b,es,maxit) % GaussSeidel (A,b,es,maxit): % Gauss-Seidel

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

Page 29: 12장연립방정식을 풀기위한반복법bml.pusan.ac.kr/Lecture/Undergraduates/NumAnalysis/... · function x = GaussSeidel(A,b,es,maxit) % GaussSeidel (A,b,es,maxit): % Gauss-Seidel

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