牛顿方法调用函数C ++

时间:2017-03-02 14:13:42

标签: c++ visual-studio

我要编写一个函数,试图使用牛顿方法找到函数的零。

我有x ^ 7-1000

的功能和衍生物
double function(double x) {
    return pow(x, 7) - 1000;    
}
double derivative(double x) {
    return 7 * pow(x, 6);
}

我也有牛顿的功能

using fx = double(*)(double);

double newtons( fx f, fx df, double x0, double e ) 
{
    double x1{};
    while( true ) {
        x1 = x0 - f( x0 ) / df( x0 );

        if( std::abs( x1 - x0 ) <= e ) break;

        x0 = x1;
    }

    return x1;
}

如何将函数调用到我的int main?

2 个答案:

答案 0 :(得分:1)

这很简单:

#include <iostream>
#include "my_functions.h"

int main(){
    std::cout << newtons(function, derivative, 10.5, 1.0e-5) << std::endl;
}

注意(tx @martinbonner):使用模板和stl,你可以使它更通用:使用lambda表达式,现有函数,......任何可以调用的东西。

template<typename F>
double newtons(F f, F df, double x0, double e) {
   ... // same as your code
}

// usage:
auto x = newtons(std::sin, std::cos, 0.5, 1e-5);
auto x2 = newtons(
   [](double d){ return d*d + 2*d - 1; },
   [](double d){ return 2*d + 2; },
   0,
   1.0e-5);

答案 1 :(得分:0)

如下所述(假设一切都在范围内)

int main() {
    std::cout << newtons(function, derivative, 
                         10.5 /* Start point */, 0.00001 /* Error delta */);
}

Live example