[C++] 백준 14786번: Ax+Bsin(x)=C ②

be_clever·2022년 1월 28일
0

Baekjoon Online Judge

목록 보기
54/172

문제 링크

14786번: Ax+Bsin(x)=C ②

문제 요약

A, B, C가 주어질 때, Ax+Bsin(x)=CAx+Bsin(x)=C를 만족하는 xx를 찾아야 한다. 절대/상대 오차는 10910^{-9}까지 허용된다.

접근 방법

수치해석을 들으셨다면 쉽게 푸실 수 있습니다. 뉴턴-랩슨법을 이용하면 됩니다.

Xn+1=Xnf(xn)f(xn)X_{n + 1} = X_n-\frac{f(x_n)}{f^{\prime}(x_n)}

문제에서 제시된 Ax+Bsin(x)=CAx+Bsin(x)=C에서 CC를 이항해주면 f(x)=Ax+Bsin(x)Cf(x)=Ax+Bsin(x)-C가 됩니다. 그러면 f(x)=A+Bcos(x)f^{\prime}(x)=A+Bcos(x)가 됩니다.

이제 이 둘을 이용해서 근사해를 구하면 되는데, 절대/상대 오차는 10910^{-9}가 될때까지 반복을 해야합니다. 이를 위해서는 Ax+Bsin(x)C>109|Ax+Bsin(x)-C| > 10^{-9}인 동안 계속 반복하면 됩니다.

코드

#include <bits/stdc++.h>

using namespace std;

int main(void)
{
	double a, b, c, now = 0, next;
	cin >> a >> b >> c;

	while(fabs(a * now + b * sin(now) - c) > 0.000000001)
	{
		next = now - (a * now + b * sin(now) - c) / (a + b * cos(now));
		now = next;
	}

	cout << fixed;
	cout.precision(9);
	cout << now;
	return 0;
}
profile
똑똑해지고 싶어요

0개의 댓글