用牛顿法求解数值问题

Solving numerical problems using Newtons method

本文关键字:问题      更新时间:2023-10-16

我正在学习数值分析,也在书中描述的求解算法。我的问题是关于牛顿方法的。一般来说,如果给定某个函数,我们必须求根,我们如何在代码中确定函数的导数?或者极限?因为你们知道牛顿的方法包含导数和这样的迭代。设某函数f(x)和初始猜想,p0,p(n)=p(n-1)+f(p(n-1))/f'(p(n-1)),这里f'f的导数。

我如何在代码中近似它?非常感谢。

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

否则,你可以用割线法,它不需要知道导数。但它的收敛速度较慢。

根据给出函数的方式,您可以做以下几件事

  1. 符号区分,如果你有一个函数的符号表示
  2. 数值区分,如果你只有点值对
  3. 用多项式插值并微分(当然是象征性的)

所有选项都是可行的。哪一种方法最适合你的问题取决于你的功能,以及你想在编码和/或阅读如何做到这一点上投入的时间。

Edit:如果在执行时间之前已经知道函数,则手动计算微分并将其作为函数实现。您还应该已经将f(x)实现为如下的函数

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

,因此:

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