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.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)을 계산)