21xrx.com
2024-12-23 01:37:36 Monday
登录
文章检索 我的文章 写文章
C++代码:牛顿-拉弗森法求平方根函数
2023-07-11 08:40:22 深夜i     --     --
C++ 牛顿-拉弗森法 平方根函数

牛顿-拉弗森法是一种求函数零点的迭代方法。虽然名字很长,但是这个方法非常简单有效,被广泛应用于科学计算和工程计算中。

本文介绍如何用C++实现牛顿-拉弗森法求平方根函数。首先,我们需要明确平方根函数的定义:

$ f(x) = x^2 - a $

其中,$a$是待求平方根的数。

接下来,我们需要确定迭代公式。根据牛顿-拉弗森法的定义,迭代公式可以写成:

$x_{n+1} = x_n - \dfrac{f(x_n)}{f'(x_n)}$

其中,$f'(x_n)$表示函数$f(x)$在$x_n$处的导数。

对于平方根函数,它的导数可以很容易地求出来:

$ f'(x) = 2x $

代入迭代公式,得到:

$x_{n+1} = \dfrac{1}{2} \left(x_n + \dfrac{a}{x_n} \right)$

这就是求平方根的牛顿-拉弗森法的迭代公式。

最后,我们可以用C++来实现这个迭代过程:

#include

#include

double sqrt_newton(double a, double x0, double tolerance) {

  double x = x0;

  double fx = x*x - a;

  while (std::abs(fx) > tolerance) {

    x = 0.5 * (x + a/x);

    fx = x*x - a;

  }

  return x;

}

int main() {

  double a, x0, tolerance;

  std::cout << "Enter a number: ";

  std::cin >> a;

  std::cout << "Enter an initial guess: ";

  std::cin >> x0;

  std::cout << "Enter the tolerance: ";

  std::cin >> tolerance;

  double result = sqrt_newton(a, x0, tolerance);

  std::cout << "The square root of " << a << " is " << result << std::endl;

  return 0;

}

这段代码中,sqrt_newton函数的参数分别为待求平方根的数$a$、初始猜测值$x_0$和精度要求tolerance。程序用while循环来迭代计算,当$f(x_n)$的绝对值小于tolerance时停止迭代,返回结果$x_n$。

通过以上代码,我们可以轻松实现用牛顿-拉弗森法求平方根函数。该方法不仅简单易懂,且计算速度很快,是经典的科学计算方法之一。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复