본문 바로가기

수학/수치해석

12차시 - 수치미분

1. 수치미분

1) 수치미분이란?

수치적으로 미분

- 함수의 일부분을 다항식으로 변경 후, 변경한 다항식을 미분

- 함수 f(x)xk주위에서 전개하는 Taylor

 

오차의 발생

- 컴퓨터의 유한한 정밀도로 발생하는 마무리 오차

- 다항식으로 변경하는 과정에서 발생하는 본질적인 오차

  -> 함수의 수치적 미분은 함수 자체와 똑같은 정밀도로 계산될 수 없음.

 

 

2. 유한차분 근사식

1) 유한차분 근사식

유한차분 근사식의 유도

- x근방에서 f(x)를 전방 및 후방으로 Taylor 전개하는 것에 기초

- 각 전개의 합은 오직 짝수 미분만 갖는다.

- 각 전개의 차는 오직 홀수 미분만 갖는다.

 

2) 1차 중간차분 근사식

전방 및 후방 근사식의 필요성

- 중간차분 근사식을 항상 사용할 수 없음.

- 함수에 대한 n개의 이산점 x1, x2, ... , xn으로 주어진 경우, 양 끝점 x1, xn에 대해서 중간 차분을 적용할 수 없음.

  -> 전방(forward) 혹은 후방(backward) 유한차분 근사식이 필요

 

3) 1차 전방 및 후방 근사식을 이용한 근사값 계산

다음 표는 어던 함수 f(x)에 대한 자료이다. 전향차분 근사식과 후향차분근사식을 이용하여 f’(2.15)의 근사값을 구하여라.

 

4) 1차 전방차분 및 후방차분 근사식

1차 전방차분 및 후방차분 근사식의 오차

- 전방차분 및 후방차분 근사식의 오차는 O(h)

- 후방차분 근사식의 오차는 O(h^2)

- 1차 전방차분 및 후방차분 근사식을 줄이기 위해 x+hh+2h 혹은 x-hh-2h를 사용

 

5) 오차가 줄어든 1차 전방 및 후방 근사식을 이용한 근사값 계산

다음 표는 어던 함수 f(x)에 대한 자료이다. 오차가 줄어든 전향차분 근사식과 후향차분근사식을 이용하여 f’(2.15)의 근사값을 구하여라.

 

6) 2차 중앙차분 근사식

2차 차분 근사식은 Taylor 전개식에서 더 많은 항을 남겨 근사식을 구함

 

보기 1 – 보기 2

 

보기 3을 통해 2차 중앙차분 근사식을 얻음

고차미분에 대한 근사식을 찾을 때에는 Taylor 전개를 더욱 많이 해야 함

 

7) 2차 전방, 후방 및 중앙 차분 근사식의 예제

다음과 같은 실헙험데이터가 있다. X=1.4인 곳에서의 2계 미분값을 전방, 후방, 중앙차분 근사값을 구하여라

 

8) 유한차분 근사식의 오차

절단오차(Truncation error)

- 수학적 연산을 근사적으로 표현함으로써 발생하는 오차

- h값을 너무 키울 수 없음.

 

전체 수치 오차(total numerical error)

- 절단오차 + 반올림오차

 

예방방법

- 산술연산에서 배밀도(double-precision)이용

- 정확도가 O(h^2)인 유한 차분 근사식 이용

 

 

3. Richardson 외삽법

1) Richardson 외삽법

Taylor 전개에 의하여 중앙수치 미분법의 오차는 O(h^2)

 

보기 1에 대입하여 보기 2와 같이 정리하여 f’(x)의 오차를 O(h2)에서 O(h4) 로 향상

 

2) Richardson 외삽법 정리

 

3) MATLAB을 이용한 Richardson 외삽법

function Dnum = RichardsonDiff(f,x0,h,max1)
D = ones(max1,max1); % the matrix for Richardson derivatives

for k = 1 : max1
	x = x0 + 2^(k-1)*h; 
	f1 = eval(f);
	x = x0 - 2^(k-1)*h;
	f2 = eval(f);
		D(k,1) = (f1-f2)/(2^k*h); 
end

for k = 2 :
	for kk = 1 : (max1-k+1) % the matrix of Richardson derivatives is triangular!
		D(kk,k) = D(kk,k-1)+(D(kk,k-1) - D(kk+1,k-1))/(4^(k-1)-1); end 
end
 
Dnum = D(1,:);

입력값
>> RicDiff('sin(x)', pi/3, 1, 1) 
>> RicDiff('sin(x)', pi/3, 1, 2) 
>> RicDiff('sin(x)', pi/3, 1, 3)

 

 

4. 보간식 미분

1) 보간식 미분

함수 f(x)가 이산 데이터로 정의되어 있는 경우, 미분을 계산할 때 이용이 효율적

함수 f(x)의 미분을 보간식의 미분을 찾아 근사화
유한차분 근사식을 풀기 곤란한 경우에 유용

 

2) 다항보간식

데이터 구간이 일정한 경우 유한차분 근사식과 같은 결과

  -> 유한 차분 근사식의 공식과 다항 보간식이 같기 때문

 

3) 3차 스플라인 보간식

정확도와 안정성 때문에 일반적인 보간식으로 사용

미분이 용이

 

보기 1의 식에서 스플라인의 2차 미분인 ki 찾음

 

다항식의 1차와 2차 미분식은 보기 2를 미분

Function k = splineCurv(xData, yData)

n = length(xData);
c = zeros(n-1,1); d = ones(n,1); 
e = zeros(n-1,1); k = zeros(n,1);

c(1:n-2) = xData(1:n-2) – xData(2:n-1);
d(2:n-1) = 2*(xData(1:n-2) – xData(3:n));
e(2:n-1) = xData(2:n-1) – xData(3:n);
k(2:n-1) = 6*(yData(1:n-2)-yData(2:n-1)/(xData(2:n-2)-xData(2:n-1))
	-(yData(2:n-1)-yData(3:n)/(xData(2:n-2)-xData(3:n)) 
[c,d,e] = LUdec3(c,d,e);
k = LUsol3(c,d,e,k);

 

'수학 > 수치해석' 카테고리의 다른 글