절단오차
수학적 연산을 근사식으로 표현할 때 발생하는 오차
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
오차의 전파
다중 변수 함수의 오차 전달
안정성과 조건수(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를 늘리면 계산량은 감소하고 반올림 오차는 작아지지만, 절단 오차는 늘어난다.
절단오차의 큰 증가 없이 계산량 및 반올림 오차를 줄일 수 있는 비교적 큰 간격 크기를 사용해야 한다.
'수학 > 수치해석' 카테고리의 다른 글
[수치해석 06] 행렬식에서 근 구하기 (0) | 2021.09.30 |
---|---|
[수치해석 05] 선형 대수 방정식 (0) | 2021.09.30 |
[수치해석 04] 개구간법(Open Methods) (0) | 2021.09.27 |
[수치해석 03] 방정식의 근 (0) | 2021.09.23 |
[수치해석 01] 근사값과 반올림 오차 (0) | 2021.09.16 |