본문 바로가기

수학/수치해석

[수치해석 02] 절단오차와 Taylor 급수

절단오차

 

수학적 연산을 근사식으로 표현할 때 발생하는 오차

 

Taylor 급수

 

어떤 점 X(i+1) 에서의 함수 값을 다른점 X(i) 에서의 함수값 및 도함수 값들을 사용해 예측하는 방법

이를 활용하여 절단오차의 추정이 가능하다.

 

Taylor 정리

매끄러운 함수(smooth function)은 다항식으로 근사가 가능하다.

 

Taylor 급수

 

Taylor 급수의 절단오차

절단 오차 O(h^n+1) 은 h^n+1에 비례하며, 충분히 작은 h에 대해 그 이하의 값은 사소하다.

ex) O(h^2) : h 간격 1/2 => 오차 1/4

 

따라서 h가 충분히 작다면 몇개의 항으로 적절한 근사값을 얻을 수 있다.

이때 0차 / 1차 ... 까지 근사한 값을 0차 / 1차 ... 근사값이라 한다.

 

오차는 참 백분율 상대 오차 [Et =  (True - approximate)/True * 100%] 를 이용해 구한다.

 

ex) x(i + 1) = 𝜋/3 , x(i) = 𝜋/4, f(x) = cos(x) 일때, 근사값 및 상대 오차 구하기.

from math import factorial, sin, cos, pi

def getCos(): #코사인의 도함수를 반환하는 클로저
    count = 0

    def getFunc(val):
        nonlocal count
        count = (count + 1) % 4
        if count == 1:
            return cos(val)
        elif count == 2:
            return -sin(val)
        elif count == 3:
            return -cos(val)
        elif count == 0:
            return sin(val)

    return getFunc

## 계산 영역

xi1 = pi/3
xi = pi/4
h = xi1 - xi

myCos = getCos()

target = cos(xi1)

et = lambda err : abs((target - err)/ target) * 100

appr = 0

for i in range(0,4):
    appr += myCos(xi)*(h**i)/(factorial(i))
    print(f'{i} : {appr} : {et(appr)}')
    
결과 : 

# 0 : 0.7071067811865476 : 41.42135623730948
# 1 : 0.5219866587632823 : 4.397331752656441   
# 2 : 0.4977544914034251 : 0.44910171931500364 
# 3 : 0.49986914693004414 : 0.02617061399119435

 

오차의 전파

추정오차 = abs(1차 도함수 * 오차 추정값)

 

 

다중 변수 함수의 오차 전달

추정오차(다변수) = sum(각각 편미분해 구한 추정오차)

 

안정성과 조건수(Conditional number)

 

수학 문제에서의 조건(condition)은 입력 값의 변화에 대한 민감도와 관련이 있다. 이때 입력값의 불확실성이 수치해법에 의해 크게 확대되면 계산이 수치적으로 불안정(numerically unstable) 하다고 한다.

 

조건수(Conditional number) : x 의 불확실성이 f(x)에 의해 얼마나 확대되는지에 대한 척도

  •  == 1 : f(x)의 상대오차 == x의 상대오차
  •  > 1   : f(x)의 상대오차 증폭
  •  < 1   : f(x)의 상대오차 감소

불량 조건(ill - conditioned) : 조건수가 매우 큰 함수.

 

 

조건수의 정의

전체 수치 오차(total mumerical error)

 

절단오차와 반올림오차의 합

간격크기 h를 늘리면 계산량은 감소하고 반올림 오차는 작아지지만, 절단 오차는 늘어난다.

 

절단오차의 큰 증가 없이 계산량 및 반올림 오차를 줄일 수 있는 비교적 큰 간격 크기를 사용해야 한다.