수치적으로 근 찾는 방법이 필요함.
여기 사용되는 방법이 Newton’s Method 또는 Newton-Raphson Method임
아이디어 : 접선의 기울기는 미분으로 표현할 수 있음
이를 통해 방정식을 표현할 수 있음’
x좌표가 x_1인 점에서 방정식은 다음과 같이 구현 가능.
$$ y-f(x_1) = f^{\prime}(x_1)(x-x_1) $$
접선의 기울기 f’(x)의 그래프의 x절편을 x_2라고 하자.
그러면, (x_2,0)은 직선 위의 점이고 따라서,
$$ 0-f(x_1) = f^{\prime}(x_1)(x_2-x_1) $$
을 얻는다.
$$ x_{n+1}=x_{n}-\frac{f(x_n)}{f^\prime(x_n)} $$
$$ \lim_{x\to\infty}{x_n} = r $$
그런데 어떤 상황에서는 이 수열이 수렴하지 않을 수 있음
그러면 제곱근 구하기에도 구현할 수 있겠네?
$$ x^2 - k = 0 $$
접선의 기울기는 미분하면, $2x$이다.
#include<stdio.h>
double SquareRoot(int num) {
//x^2 = num을 만족하는 x를 찾는 문제
double x = 1.0; //초기값을 1로 설정
double next_x = 0.0; // 다음 x값을 저장할 변수
double diff = 0.0; // x와 next_x의 차이를 저장할 변수
// num의 제곱근을 찾을때까지 반복
while (1) {
next_x = 0.5 * (x + num / x); // 방정식을 간소화
diff = next_x - x; // x와 next_x의 차이 계산
if (diff < 0.0000001 && diff > -0.0000001) // 차이가 0에 가까우면 반복문 종료
break;
x = next_x; // x값을 next_x값으로 갱신
}
return next_x; // 제곱근 반환
}
int main(void) {
printf("%d의 제곱근 : %.3f\\n", 2, SquareRoot(2));
return 0;
}