当前位置: 首页 > article >正文

牛顿迭代法求解x 的平方根

牛顿迭代法是一种可以用来快速求解函数零点的方法。

为了叙述方便,我们用 C C C表示待求出平方根的那个整数。显然, C C C的平方根就是函数

f ( x ) = x c − C f(x)=x^c-C f(x)=xcC
的零点。

牛顿迭代法的本质是借助泰勒级数,从初始值开始快速向零点逼近。我们任取一个 x 0 x_0 x0作为初始值,在每一步的迭代中,我们找到函数图像上的点 ( x i , f ( x i ) ) (x_i,f(x_i)) (xi,f(xi)) ,过该点作一条斜率为该点导数 f ′ ( x i ) f'(x_i) f(xi)的直线,与横轴的交点记为 x i + 1 x_{i+1} xi+1 x i + 1 x_{i+1} xi+1 相较于 x i x_{i} xi 而言距离零点更近。在经过多次迭代后,我们就可以得到一个距离零点非常接近的交点。下图给出了从 x 0 x_{0} x0 开始迭代两次,得到 x 1 x_{1} x1 x 1 x_{1} x1的过程。

在这里插入图片描述

#include <iostream>
#include <math.h>
int main(int argc, char *argv[]) {
  const int C = 5;
  const double y_eps = 1e-10;
  const double x_eps = 1e-8;
  double x_n = double(C);             // last iteration value x(n)
  double x_n_1 = (x_n + C / x_n) / 2; // iteration value x(n+1)
  int iter_num = 1e5;                 // a protect value
  while (std::abs(x_n * x_n - C) > y_eps && (std::abs(x_n_1 - x_n) > x_eps) &&
         (iter_num--)) {
    x_n = x_n_1;
    x_n_1 = (x_n + C / x_n) / 2;
    std::cout<<C<<"的平方根为:"<<x_n_1<<std::endl;
  }
  std::cout<<C<<"的平方根最终迭代计算结果为:"<<x_n_1<<std::endl;
  std::cout<<C<<"的平方根库函数计算结果为:"<<std::sqrt(C)<<std::endl;
  return 0;
}

计算log:

5的平方根为:2.33333
5的平方根为:2.2381
5的平方根为:2.23607
5的平方根为:2.23607
5的平方根为:2.23607
5的平方根最终迭代计算结果为:2.23607
5的平方根库函数计算结果为:2.23607

参考
youtube
leetcode


http://www.kler.cn/a/323739.html

相关文章:

  • RabbitMQ实战启程:从原理到部署的全方位探索(上)
  • Ubuntu20.04 解决一段时间后键盘卡死的问题 ubuntu
  • LogViewer NLog, Log4Net, Log4j 文本日志可视化
  • docker与大模型(口语化原理和实操讲解)
  • 哈佛商业评论 | 未来商业的技术趋势:百度李彦宏谈技术如何变革商业
  • Android Osmdroid + 天地图 (二)
  • 架构师:消息队列的技术指南
  • Unity 网格的细节级别 (LOD) 学习
  • Python Web架构:微服务与服务网格的实践
  • C. Cards Partition 【Codeforces Round 975 (Div. 2)】
  • 强化-极限
  • Netty入门
  • 机器学习(4):机器学习项目步骤(一)——定义问题
  • Pytorch实现Transformer
  • 激光slam学习笔记4--slam_in_autonomous_driving编译碰到问题汇总
  • 基于Python+flask+MySQL+HTML的全国范围水质分析预测系统,可视化用echarts,预测算法随机森林
  • [Redis][Zset]详细讲解
  • FastAPI前置知识及快速入门
  • Python入门:类的异步资源管理与回收( __del__ 方法中如何调用异步函数)
  • CMake构建学习笔记18-cpp-httplib库的构建
  • 【目标检测】隐翅虫数据集386张VOC+YOLO
  • 【web阅读记录】web相关概念及知识整理
  • 【机器学习】——支持向量机
  • uni-app 封装websocket 心跳检测,开箱即用
  • SCAU学习笔记 - 面向对象程序设计课后习题
  • GAMES101(20节,动画和仿真)