All about

이 글은 제가 공부한 내용을 정리하는 글입니다. 잘못된 내용이 있을 수 있으며, 잘못된 내용을 찾으셨다면 리플로 알려주시길 부탁드립니다. 감사합니다.



Numerical Optimization, 즉 수치최적화를 공부하고 그 내용을 정리하고자 합니다.



False position method(Regula Falsi) 가 잘 설명되어 있는 영상입니다. 알고리즘 자체의 방법론과 Rate of convergence 에 대한 설명은 영상에 충분히 시각화되어 추가적인 설명이 필요 없다고 생각됩니다.


여기선 False position method 의 장점과 단점에 대해 생각해보려합니다.


장점


1. 미분이 필요 없기 때문에, 미분 불가능한 정의역이 있거나 미분 자체가 어려운 함수에 적용하기 좋습니다.


2. 이는 장점이자 단점인데, 문제에 따라서 Bisection 처럼 느릴 수 있지만, 일반적으로 빠릅니다. 비약적으로 설명하자면 영상에서도 보였듯이 Bisection 은 해의 후보 영역이 일정한 비율로 줄어들지만 False position 은 1/2 보다 더 큰 비율로 줄어드는 경우가 존재하기 때문이라고 할 수 있습니다.


단점


1. Bisection 처럼 첫 초기 지점 a, b 에서 함수값의 부호가 서로 달라야 적용이 가능합니다. f(a)*f(b)<0 임을 확인해야 하는데, f(x) = x^2 처럼 모든 구간에서 0 ≤ f(x) 이라면 적용할 수 없습니다.



코드 구현


핑계일 뿐이지만, 제대로된 코딩 수업을 들어본 적이 없기 때문에 코드가 개똥 같을 수 있습니다.


def myEquation1(x):
return -1 * (x**3)

def falsi(a, b, iteration, my_func):
# 바이섹션처럼 처음 두 포인트의 부호가 달라야 진행이 가능
bi_a = my_func(a)
bi_b = my_func(b)

if bi_a * bi_b > 0:
print("wrong interval")
elif bi_a * bi_b == 0:
print('case1')
print("case close")
print("iteration: ", str(iteration).ljust(3), " x1: ", str(a).ljust(25), " x2: ", str(b).ljust(25))
elif bi_a * bi_b < 0:
c = b - (bi_b * (b - a) / (bi_b - bi_a))
if my_func(c) == 0 or (b - a) < 0.0000001:
print('case2')
print("case close")
print("iteration: ", str(iteration).ljust(3), " x: ", str(c).ljust(25))
elif my_func(c) * bi_a < 0:
print('case3')
b = c
bisection(a, b, iteration, my_func)
else:
print('case4')
a = c
bisection(a, b, iteration, my_func)

falsi(0.5, 2.5, 0, myEquation1)


False position method 설명 False position method 뜻 False position method 구현 False position method 코드

Linear interpolation method 설명 Linear interpolation method 뜻 Linear interpolation method 구현 Linear interpolation method 코드

Regula Falsi method 설명 Regula Falsi method 뜻 Regula Falsi method 구현 Regula Falsi method 코드

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading