c++ - 牛顿法调用函数 C++

标签 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?

最佳答案

这很简单:

#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);

关于c++ - 牛顿法调用函数 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42557764/

相关文章:

c++ - 这个字符串比较逻辑有什么缺陷?

c++ - 错误 LNK2019 : Unresolved External Symbol _HUGE referenced in _luaopen_math

c++ - 如何在 Windows 映射我的程序的 DLL 之前保留内存区域?

visual-studio - 从 VS 部署并添加到版本控制后,我需要备份哪些 Umbraco 文件夹?

visual-studio - TFS在线。在合并到代码库之前对开发人员 checkin 创建代码审查

c++ - C++ 中的类型转换迭代器

c++ - 错误 : call of overloaded ‘max(int, int)’ is ambiguous

visual-studio - Visual Studio调试版本是否包含任何个人信息?

.net - Visual Studio Community 2019 不显示设计器 View

c++ - 如何找到重载运算符的定义?