用牛顿法求解数值问题

时间:2011-10-07 04:37:54

标签: c++ numerical-methods

我正在研究数值分析,并且还在解决书中描述的算法。我的问题是关于牛顿的方法。一般来说,如果给出了一些函数并且我们必须找到root,我们如何确定代码中函数的导数?甚至限制?因为你知道牛顿的方法涉及导数并且像这样进行迭代。 假设某个函数f(x)和初始猜测,p0,然后p(n)=p(n-1)+f(p(n-1))/f'(p(n-1))此处f'表示f的派生。

我如何在代码中对其进行近似?非常感谢。

2 个答案:

答案 0 :(得分:2)

如果你想使用牛顿方法,你需要知道函数的衍生物并将其编码。

否则,你可以使用不需要知道衍生物的Secant Method。但它的收敛速度较慢。

答案 1 :(得分:1)

根据功能的给定方式,你可以做几件事

  1. 符号区分,如果您有函数的符号表示
  2. 数值差异,如果你只有点值对
  3. 用多项式插值并区分(当然是符号)
  4. 所有选项都可行。哪个最适合您的问题取决于功能以及您希望投入编码和/或阅读如何操作的时间。

    编辑:如果您在执行时间之前已经知道了该功能,那么请手动计算差异并将其作为一个函数实现。您还应该已经将f(x)实现为此功能

    float f (float x) {
        // ...
    }
    

    因此:

    float df_dx (float x) {
        // ...
    }