26
수치해석 수치해석 Numerical Analysis Numerical Analysis 161009 161009 Ch6. Roots: Open Methods Ch6. Roots: Open Methods

345]) - chibum.files.wordpress.com · 6.5 MATLAB 6.5 MATLAB 함수함수: fzero (1/3) fzerofzero는단일 방정식의실근을구할때 구간법과개방법의장점을만족하도록설계되었다

  • Upload
    others

  • View
    33

  • Download
    0

Embed Size (px)

Citation preview

수치해석수치해석Numerical AnalysisNumerical Analysis

161009161009

Ch6. Roots: Open MethodsCh6. Roots: Open MethodsCh6. Roots: Open MethodsCh6. Roots: Open Methods

� 개방법:

• 한 개의 초기값에서 시작하거나 구간내에 근을 포함하지 않을수도

있는 두개의 초기값에서 시작한다.

Numerical AnalysisNumerical Analysis

� 구간법과 개방법의 비교

(a)구간법(이분법)

(b)개방법 –발산하는 경우

(c)개방법-수렴하는 경우

6.1 6.1 6.1 6.1 단순단순단순단순 고정점고정점고정점고정점 반복법반복법반복법반복법 (1/3)(1/3)(1/3)(1/3)

� 을 재배열하여 유도

• 단일점 반복법(fixed point iteration) 또는 연속 대입법

• 대수적 조작을 통하여 를 x를 방정식 좌변에 오게 한다.

• 이전 계산단계의 x 값을 사용하여 새로운 x를 예측

0)( =xf

)(xgx =

0)( =xf

Numerical AnalysisNumerical Analysis

• 근사오차

)(1 ii xgx =+

%1001

1 ×−

=+

+

i

iia

x

xxε

예제 6.1

� Q. 고정점 반복법을 이용하여 의 근을 구하라.

Sol) 함수를 정리하면

초기 가정값 x0 = 0 에서 출발

xexf x −= −)(

ix

i ex−

+ =1

i xi |εa| % |εt| % |εt|i/|εt|i-1

0 0.0000 100.000

Numerical AnalysisNumerical Analysis

원하는 오차 이내에 도달할 때까지 반복

(근의 참값은 0.56714329)

1 1.0000 100.000 76.322 0.763

2 0.3679 171.828 35.135 0.460

3 0.6922 46.854 22.050 0.628

4 0.5005 38.309 11.755 0.533

5 0.6062 17.447 6.894 0.586

6 0.5454 11.157 3.835 0.556

6.1 단순 고정점 반복법 (2/3)(2/3)(2/3)(2/3)

� 수렴 여부

• 추정근에서 미분값 |g(x)’|이

1보다 작을 경우 수렴한다.

Numerical AnalysisNumerical Analysis

a) Convergent, 0≤g’<1b) Convergent, -1<g’≤0c) Divergent, g’>1d) Divergent, g’<-1

• 고정점 반복법에서는 일 때,

즉 g(x) 의 기울기의 절대값이 f(x) = x의 기울기보다 작을 때 수렴

• 고정점 반복법 공식

• 참값을 라 하면

6.1 단순 고정점 반복법 (3/3)(3/3)(3/3)(3/3)

1)( <′ xg

)(1 ii xgx =+

)( rr xgx =

)()(1 xgxgxx irir −=− +

rx

Numerical AnalysisNumerical Analysis

(도함수의 평균값정리를 이용 )

• 반복 i에서 참오차를 라고 정의하면,

)()(

)()(1

ξgxx

xgxgxx

ir

irir

′−=

−=− +

)()()()( ξgxxxgxg irir′−=−

irit xxE −=,

itit EgE ,1, )(ξ′=+

6.2 Newton6.2 Newton6.2 Newton6.2 Newton----RaphsonRaphsonRaphsonRaphson법법법법 (1/3)(1/3)(1/3)(1/3)

� 근의 초기 가정 값 = xi 라면 점 [xi, f(xi)]에서의 접선을 연장

하여 x축과 만나는 점을 개선된 근으로 선택

f '(x i) =f (x i) − 0

x − x

Numerical AnalysisNumerical Analysis

f (x i) =x i − x i+1

x i+1 = x i −f (x i)

f '(x i)

� Q. Newton-Raphson 법을 사용해서 의 근을

추정하라. 초기 가정은 x0 = 0이다.

Sol) 이므로 공식은

예제 6.2

xexfx−=

−)(

1)( −−=′ −xexf1

1−−

−−=

+i

i

x

i

x

iie

xexx

i xi |εt| %

Numerical AnalysisNumerical Analysis

0 0 100

1 0.500000000 11.8

2 0.566311003 0.147

3 0.567143165 0.0000220

4 0.567143290 < 10-8

• 에 대하여 Taylor 급수를 전개하고, 을 대입하면

• 이 참값이므로, &

6.2 Newton6.2 Newton6.2 Newton6.2 Newton----RaphsonRaphsonRaphsonRaphson법법법법 (2/3)(2/3)(2/3)(2/3)

rxx =

0)( =rxf irit xxE −=,

ix

L+−′′

+−′+= 2)(!2

)())(()()( ir

iiriir xx

xfxxxfxfxf

rx

L+′′

+−′+=2

,!2

)())(()(0 it

iirii E

xfxxxfxf

)(xf

Numerical AnalysisNumerical Analysis

• Newton-Raphson 공식 � ,

• 이므로

2

,1,)(2

)(it

r

rit E

xf

xfE

′′−=+

!2

)(

)(1

i

iii

xf

xfxx

′−=+

))(()( 1 iiii xxxfxf −′−= +

L+′′

+−′+−′−= +

2

,1!2

)())(())((0 it

iiriiii E

xfxxxfxxxf

L+′′

+′= +

2

,1,!2

)()(0 it

iiti E

xfExf

11, ++ −= irit xxE

예제 6.3 (1/2)

� Q. Newton-Raphson 법을 사용해서 의

양의 근을 구하라. 단, x0 = 0.5

Sol)

i x |ε | %

1)(10−= xxf

9

10

110

1

i

iix

xxx

−−=+

Numerical AnalysisNumerical Analysis

M

i xi |εt| %01234

404142

0.551.65

46.48541.8365

37.65285

1.0023161.000024

1

99.03211.11111.11111.111

2.1300.2290.002

예제 6.3 (2/2)

Numerical AnalysisNumerical Analysis

6.2 Newton6.2 Newton6.2 Newton6.2 Newton----RaphsonRaphsonRaphsonRaphson법법법법 (3/3)(3/3)(3/3)(3/3)

� Newton-Raphson 법이 느리게 수렴되지 않는 네 가지 경우

Numerical AnalysisNumerical Analysis

• 기울기가 0 [f'(x) = 0] 이면 N-R 공식에서 0으로 나누는 경우가 발생

• N-R 법의 수렴 ~ � 함수의 성질 � 초기가정의 정확도

function [root, ea, iter] = newtraph(func, dfunc, xr, es, maxit, varargin)

% [root, ea, iter] =newtraph(func, dfunc, xr, es, maxit, p1, p2, …);

% uses Newton-Raphson method to find root of a func

% input:

% func = name of function

% dfunc = name of derivative of function

% xr = initial guess

% es = desired relative error (default = 0.0001%)

% maxit = maximum allowable iterations (default = 50)

% p1, p2,… = additional parameters used by function

% output:

% root = real root

% ea = approximate relative error (%)

% iter = number of iterations

Numerical AnalysisNumerical Analysis

% iter = number of iterations

if nargin<3, error(‘at least 3 input arguments required’), end

if nargin<4| isempty(es), es= 0.0001; end

if nargin<5| isempty (maxit), maxit =50 ; end

iter = 0;

while (1)

xrold = xr;

xr = xr – feval(func,xr)/feval(dfunc,xr);

iter = iter +1;

if xr ~= 0, ea = abs((xr - xrold)/xr) * 100; end

if ea <= es | iter >= maxit, break, end

end

root = xr;

6.3 6.3 6.3 6.3 할선법할선법할선법할선법(secant methods)(secant methods)(secant methods)(secant methods) (1/2)(1/2)(1/2)(1/2)

� N-R의 문제는 도함수가 0에 가까운 값을 가지거나

도함수를 계산할 수 없을 때 발생

� N-R 법에서 도함수의 표현을 없앤 방법

ii

iii

xx

xfxfxf

−≅′

1

1 )()()(

Numerical AnalysisNumerical Analysis

• N-R 법에서 나타나는 도함수를 후향 유한차분으로 근사시키면

• x에 대해 도함수값 대신 두 개의 초기값이 필요

• 초기값 사이에서 f(x)의 부호가 바뀔 필요는 없음

)(

)(1

i

iii

xf

xfxx

′−=+

)()(

))((

1

11

ii

iiiii

xfxf

xxxfxx

−−=

−+

6.3 6.3 6.3 6.3 할선법할선법할선법할선법 (2/2)(2/2)(2/2)(2/2)

• 또 다른 방법으로 독립변수에 약간의 변동을 주면,

• 반복계산식

i

iiii

x

xfxxfxf

δ

−δ+≅′

)()()(

Numerical AnalysisNumerical Analysis

• 반복계산식

수정된 할선법(modified Secant method)

)()(

)(1

iii

iiii

xfxxf

xfxxx

−δ+

δ−=+

예제 6.5 (1/2)

� Q. 수정된 할선법으로 항력계수가 0.25 kg/m일 때 자유

낙하 4초 후의 속도가 36 m/s가 되도록 번지점프하는 사

람의 질량을 구하라. 중력가속도는 9.81 m/s2이다. 질량

의 초기가정으로 50 kg으로 놓고,

변동량을 10-6으로 잡아라.

Numerical AnalysisNumerical Analysis

Sol)

첫 번째 반복:

%)4.43%;1.38(39931.88

)57938708.4(579381118.4

)57938708.4)(50(1050

579381118.4)( 00005.50

57938708.4)( 50

6

1

0000

00

=ε=ε=

−−−

−−=

−=δ+=δ+

−==

at

x

xxfxx

xfx

예제 6.5 (2/2)

두 번째 반복:

%)76.28%;1.13(08970.124

)69220771.1(692203516.1

)69220771.1)( 39931.88(10 39931.88

692203516.1)( 39940.88

69220771.1)( 39931.88

6

2

1111

11

=ε=ε=

−−−

−−=

−=δ+=δ+

−==

at

x

xxfxx

xfx

Numerical AnalysisNumerical Analysis

iiii xxxxiiii (%)(%)(%)(%) (%)(%)(%)(%)0123456

50.000088.3993

124.0897140.5417142.7072142.7376142.7376

64.97138.06913.0641.5380.021

4.1 × 10-6

3.4 × 10-12

43.43828.76211.7061.5170.021

4.1 × 10-6

tεaε

6.4 Brent methods6.4 Brent methods6.4 Brent methods6.4 Brent methods

� 구간법과 개방법을 혼합하여 사용

� 구간법은 이분법 이용

� 개방법은 할선법 또는 역2차 보간법 이용

� 할선법과 역2차 보간법의 비교

Numerical AnalysisNumerical Analysis

• 가능하면 빠른 개방법을 사용하나 구간을 벗어나면 구간법(이분법) 이용

6.5 MATLAB 6.5 MATLAB 6.5 MATLAB 6.5 MATLAB 함수함수함수함수: fzero (1/3): fzero (1/3): fzero (1/3): fzero (1/3)

� fzerofzerofzerofzero는 단일 방정식의 실근을 구할 때

구간법과 개방법의 장점을 만족하도록 설계되었다.

-Using an initial guess:x x x x = = = = fzerofzerofzerofzero((((function, x0function, x0function, x0function, x0))))[x, [x, [x, [x, fxfxfxfx] ] ] ] = = = = fzerofzerofzerofzero((((function, x0function, x0function, x0function, x0))))

function is a function handle to the function being evaluated

Numerical AnalysisNumerical Analysis

function is a function handle to the function being evaluated

x0 is the initial guess

x is the location of the root

fx is the function evaluated at that root

-Using an initial bracket: x x x x = = = = fzerofzerofzerofzero((((function, [x0 x1])function, [x0 x1])function, [x0 x1])function, [x0 x1])[x, [x, [x, [x, fxfxfxfx] ] ] ] = = = = fzerofzerofzerofzero((((function, [x0 x1])function, [x0 x1])function, [x0 x1])function, [x0 x1])

As above, except x0 and x1 are guesses that must bracket a sign change

6.5 MATLAB 6.5 MATLAB 6.5 MATLAB 6.5 MATLAB 함수함수함수함수: fzero (2/3): fzero (2/3): fzero (2/3): fzero (2/3)

� 의 근을 MATLAB으로 구해보자.9)( 2 −= xxf

>> x=fzero(@(x) x^2-9, -4) %음의 근x =-3

>> x=fzero(@(x) x^2-9, 4) % 양의 근x =

3

Numerical AnalysisNumerical Analysis

3>> x=fzero(@(x) x^2-9, 0)x =-3

>> x=fzero(@(x) x^2-9, [0 4]) % 확실히 양의 근x =

3

6.5 MATLAB 6.5 MATLAB 6.5 MATLAB 6.5 MATLAB 함수함수함수함수: fzero (3/3): fzero (3/3): fzero (3/3): fzero (3/3)

[x, [x, [x, [x, fxfxfxfx] = ] = ] = ] = fzerofzerofzerofzero((((function, x0, options, p1, p2, …]function, x0, options, p1, p2, …]function, x0, options, p1, p2, …]function, x0, options, p1, p2, …]))))

� Fzero에 options을 부여할 수 있다.

optionsoptionsoptionsoptions = = = = optimsetoptimsetoptimsetoptimset((((‘par1’, val1, ‘par2’, val2,…‘par1’, val1, ‘par2’, val2,…‘par1’, val1, ‘par2’, val2,…‘par1’, val1, ‘par2’, val2,…))))

• parn : 부여할 파라미터 명

• valn : 파라미터에 부여할 값

• fzero에 주로 사용되는 파라미터 값

Numerical AnalysisNumerical Analysis

• fzero에 주로 사용되는 파라미터 값

� display: 모든 반복에 대한 자세한 기록을 표시할 때 ‘iteriteriteriter’ 지정

� tolx: x에 대한 종료 허용값을 지정하는 양수의 스칼라 값

예제 6.7 (fzero와 optimset) (1/2)

� Q. 예제 6.3의 의 근을 구하는 문제를

optimset과 fzero로 풀어라.

1)( 10 −= xxf

>> options = optimset('display','iter','tolx',0.00001);>> [x,fx] = fzero(@(x) x^10-1, 0.5, options)Func-count x f(x) Procedure1 0.5 -0.999023 initial2 0.485858 -0.999267 search… … … …25 1.14 2.70722 search

Numerical AnalysisNumerical Analysis

25 1.14 2.70722 searchLooking for a zero in the interval [-0.14, 1.14]26 0.205272 -1 interpolation27 0.672636 -0.981042 bisection28 0.906318 -0.626056 bisection29 1.02316 0.257278 bisection30 0.989128 -0.103551 interpolation31 0.998894 -0.0110017 interpolation32 1.00001 7.68385e-005 interpolation33 0.999988 -0.000123159 interpolation

Zero found in the interval: [-0.14, 1.14].x =

1.0000fx =7.6838e-005

예제 6.7 (fzero와 optimset) (2/2)

>> options = optimset('display','iter','tolx',0.001); >> [x,fx] = fzero(@(x) x^10-1, 0.5, options)Func-count x f(x) Procedure1 0.5 -0.999023 initial …… … … …32 1.00089 0.00897957 interpolation

Zero found in the interval: [-0.14, 1.14].

Numerical AnalysisNumerical Analysis

Zero found in the interval: [-0.14, 1.14].x =

1.0009fx =

0.0090

6.6 6.6 6.6 6.6 다항식다항식다항식다항식 (1/2)(1/2)(1/2)(1/2)

� rootsrootsrootsroots는 고차다항식의 모든 근을 구할 때 사용하는 함수

x = roots(c)

• x:근을 나타내는 열벡터

• c: 다항식의 계수를 나타내는 행벡터

Numerical AnalysisNumerical Analysis

Example:

f(x)=x5-3.5x4+2.75x3+2.125x2-3.875x+1.25의 근을 찾으려면

x = roots([1 -3.5 2.75 2.125 -3.875 1.25])

6.6 6.6 6.6 6.6 다항식다항식다항식다항식 (2/2)(2/2)(2/2)(2/2)

� polypolypolypoly함수는함수는함수는함수는 근의 값이 전달되면 다항식의 계수를 산출

-rootsrootsrootsroots의 역함수

Example:

b = poly([0.5 -1])

(x=0.5 and x=-1을 f(x) =0의 근으로 갖는 방정식 f(x)를 찾는다.)

>> b = [1.000 0.5000 -0.5000] (f(x)=x2+0.5x-0.5의 의미)

Numerical AnalysisNumerical Analysis

>> b = [1.000 0.5000 -0.5000] (f(x)=x2+0.5x-0.5의 의미)

� polyval함수는 한점 내지 여러점에서 다항식의 값을 계산

Example:

a = [1 -3.5 2.75 2.125 -3.875 1.25];(f(x)=x5-3.5x4+2.75x3+2.125x2-3.875x+1.25)

polyval(a, 1)

>> -0.2500 (f(1)을 계산)