我要编写一个函数,试图使用牛顿方法找到函数的零。
我有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?
答案 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 */);
}