![post-thumbnail](https://velog.velcdn.com/images/ilov1112/post/d0c68669-dd3d-4296-9a2e-2aa9152f2ad8/image.png)
방정식의 근을 찾기
Trial & Error
- f(x) 가 0이 될 만한 x값을 추측 및 시도하는것.
Graphical Approach
![](https://velog.velcdn.com/images/ilov1112/post/a416db1f-bc45-49a9-abb5-4268e9976c06/image.png)
- 그래프가 이어져 있다는 전제 하에, x 위치 하나가 양수이고 하나가 음수이면 근은 반드시 존재한다.
- 둘다 양수이거나 음수일 경우 근은 없거나 짝수개 존재한다.
- 우측 1번의 경우 중근은 2개의 근으로 따져 3개의 근이 존재한다.
풀이법
Bisection Method
![](https://velog.velcdn.com/images/ilov1112/post/6b97cea3-188c-4afa-8534-815e00c53e45/image.png)
* xl<xu
- f(xl)∗f(xu)<0 이 성립하는 xl과xu 를 찾는다.
- 연속되는 그래프에서 이 둘 사이에는 반드시 홀수개의 근이 존재한다.
- 찾지 못했을시 반복한다.
- 이 둘의 평균(xr)을 구한다.
- 아래 과정을 거친다.
- f(xl)f(xr)<0
- 근보다 xr 이 우측에 위치, xu=xr 로 대입.
- f(xl)f(xr)>0
- 근보다 xr 이 좌측에 위치, xl=xr 로 대입.
- f(xl)f(xr)==0
- 근을 찾지 못했으면 다시 2번으로 돌아간다.
- 혹은 xr 기준, 상대적 오차 ( (현재추정값 - 이전추정값) / 현재추정값) 의 절댓값) 을 이용해 구할수도 있다.
![](https://velog.velcdn.com/images/ilov1112/post/0b6173a4-0705-4314-b088-2fc2a23da631/image.png)
- 시도별 오차가 떨어지는 모습.
- 이진 탐색에 가까운 코드를 사용해 실제 오차는 증가와 감소를 반복한다.
False-Position method
![](https://velog.velcdn.com/images/ilov1112/post/7b0f8768-a228-4ac2-9637-c17e289d6f3e/image.png)
- f(xl)∗f(xu) 가 음수가 되는 두 x점을 찾는다.
- 이 두 점을 선으로 연결하면 중간에 근을 지나는 선이 완성된다.
- 이 선을 선분으로 이으면 두 삼각형을 그릴수 있다.
- 이 선이 x축에 만나는 xr을 구할수 있다.
- 이 xr값을 xl 에 대입한다.
![](https://velog.velcdn.com/images/ilov1112/post/c766c662-2747-4568-82d5-956ece209d14/image.png)
Modified false position
- 거의 대부분의 경우에 Bisection보다 성능이 좋은 방식이다.
- 좌표점 (xl,f(x1)) 과 (xu,f(xu)/2) 의 xr을 찾는식으로 진행된다.
근이 여러개 존재하는 경우
![](https://velog.velcdn.com/images/ilov1112/post/c48e55dd-9ee3-46f6-b7e0-747388460e9e/image.png)
incremental search
- x0 부터 아주 작은 간격으로 한칸씩 앞으로 나가며 해당하는 y축의 값을 찾는다.
- x0 은 첫번째 근보다 앞에 있어야 한다.
- 간격을 지났을때 해당하는 y축의 값이 부호가 반대가 되면
Bisection혹은 False-position을 사용해 근을 계산할수 있다.
- 간격이 너무 작으면 시간이 오래 걸리고, 간격이 너무 크면 근을 지나칠수도 있다.
간격이 너무 커서 근을 지나친것을 판별하는 방법
- 찾은 두 점의 기울기를 찾으면 된다.
- 예시로 위 그래프에서 간격을 가지는 두 점이 x0과 x1 일시 두 점의 기울기는 반대가 된다.
- 두 점 사이에 근이 존재 할수도 있다, 간격을 줄여 다시 확인해볼수 있을것이다.
- 반드시 존재하지는 않는다. ( x3,x4 )