나는 초기 추측 init
, 단항 기능 f
및 인수로 허용 tol
를 취하는 뉴턴 랩슨 루트 찾기 알고리즘의 간단한 구현을 썼다 :C++는 아래 그림과 같이 뉴턴 랩슨 및 과부하 기능
bool newton_raphson(double& init,
double(*f)(double),
double tol){
const int max_iter = 10000;
double next_x, soln = init;
int i = 0;
while(++i < max_iter){
next_x = soln - f(soln)/fp_x(f, soln);
if(fabs(next_x - soln) < tol){
init = next_x;
return true;
}
soln = next_x;
}
return false;
}
double fp_x(double(*f)(double),
double x){
const double h = 0.000001;
return (f(x + h) - f(x - h))/2.0/h;
}
내 질문은 :이 완전히 완벽하게 단항 함수에 대한 작동하지만 함수가 하나 이상의 매개 변수가있는 f
있지만 하나의 매개 변수를 제외한 모든 상수 값을 가지고 작동하도록 구현을 변경하고 싶습니다. 명확히하기 위해서 : 아래에 보이는 함수 f (x) = 3x + 2가있는 경우
double f(double x){
return (3*x + 2);
}
그런 다음 구현이 작동합니다. 그러나, 나는 주어진 수의 인수를 가진 모든 함수에서 작동하지만 첫 번째 인수 만이 가변적이다. I는 함수 f (x, y) = 3X + 2Y
double f(double x, double y){
return (3*x + 2*y);
}
I는 F의 루트 발견하고자하는 (X, 2), 또는 F 그래서, 만약의 (X, 3)와 동일한 기능을 이용하여 , 그리고 하나 또는 두 개의 인수가 아닌 n 개의 인수에 대해서도 마찬가지입니다 (예제에서 보여준 함수가 단순 선형 함수라는 생각을 무시하십시오, 이것은 단지 예일뿐입니다). 다양한 인수에 대해 함수를 구현할 방법이 있습니까? 아니면 모든 경우에 구현을 작성해야합니까?
감사합니다,
NAX
참고
당신은 지금 말할 수있는,이 질문은 정말 뉴턴 - 랩슨에 대해 아니지만, 내가로 사용하는 경우는 그것을 쉽게 실제 질문에 대한 예로서, 다른 수의 인수를 가진 함수에 대한 단일 구현입니다. 사용 std::bind
및 std::function
아래
UPDATE
몇 가지 답변은 실제로 더 나은 선택한 답변보다 내 질문을 해결하는 문제를 해결하기 위해; 그러나, 그들은 C++ 11 라이브러리 클래스/함수입니다. (저를 잘못 이해하지 말고, 모든 C++ 프로그래머에게 먼저 배우고 배울 것을 강력히 권합니다.) 그리고이 글을 쓰는 시점에서 저는 몇 가지 문제에 직면했습니다. 그들을 사용하여; Eclipse Juno는 g ++ 4.7 (C++ 11 호환)을 사용하여 여전히 std::function
을 인식하지 못했기 때문에 아래 체크 된 대답을 고수하기로 결정했습니다.
처럼 호출 할 수 있습니다'n'은 당신이 컨테이너를 통해 모든 뿌리를 반환해야한다는 공평하지? 또는 당신이 원하는 그 것이다 예를 들어, 각 호출에서 세 번째 루트를 계산하려면? –
나는 당신이 대답을 너무 빨리 받아 들였다고 생각한다. –