引言

牛顿法是求解最优问题的一种常用方法。

方法简述

本文主要在实现使用牛顿法进行开平方操作,代码使用python实现。在开平方求解中,更多的可以参考这篇文章。牛顿法是一种最优化求解方法,在迭代过程中求取到最接近解的值,类似的还有梯度下降等等。

方法分析

这里主要讲解我对该方法的推导,有错误之处麻烦指出。
首先针对开根号求解,可用以下式子描述:
x=nx=\sqrt{n} x=n​
将该式换成:
x2=nx^{2}=n x2=n
移项得
x2−n=0x^{2} - n = 0 x2−n=0
要求出n的开跟结果,其实就是求出该式的解,对于该式,可以描述为:
x2−n=yx^{2} - n = y x2−n=y
也就是求出该抛物线与x轴的交点,因为实数范围内求出的开根号结果大于0,因此只需要计算大于零的一边。对于该式的求解,牛顿法的迭代速度较快。

图中,首先给定初始的值,这个值可以随便给,图中选的是x=4,如红色竖线所示。牛顿法的精髓就在于,给定初始值之后,能够快速下降到目标解。在x=4这一点,获取该点的切线,如图紫色斜线所示。求出该点切线与x轴交点即为下次迭代的x值,最后迭代多次之后,如果在误差范围内,输出结果。
令给定一个初始值x1x_{1}x1​。
在式中:
x2−n=yx^{2} - n = y x2−n=y
其对应的点为(x1,x12−n)(x_{1},x_{1}^{2} - n)(x1​,x12​−n),该点对应的斜率为 2x1,斜率公式为:
2x=y2x = y 2x=y
斜率公式可通过对x求导得出。将点和斜率带入斜线公式:
ax+b=yax+b=y ax+b=y
求得下一个迭代的点为:
x2=−ba=n2x1+x12x_{2}=\frac{-b}{a}=\frac{n}{2x_{1}}+\frac{x_{1}}{2} x2​=a−b​=2x1​n​+2x1​​
迭代多次,知道求出xn−xn−1&lt;δx_{n}-x_{n-1}&lt;\deltaxn​−xn−1​<δ,δ\deltaδ为自定的误差范围。

代码如下:

def SquareRoot(n):tx = 100lstx = txfor i in range(10):tx = (n / tx / 2 + tx / 2)if (abs(tx - lstx) < 0.0000001):breaklstx = txreturn tx

测试了本方法与系统自带方法运算效率:

可能是因为python的原因,结果虽然正确,但是时间上时系统自带方法的两倍。但是就算如此,该方法也比二分法好。

GitHub Link:https://github.com/ThisskyMain/MyAlgorithm

基于牛顿法的开平方实现相关推荐

  1. 基于确定性最大似然算法 DML 的 DoA 估计,用牛顿法实现(附 MATLAB 源码)

    本文首次在公众号[零妖阁]上发表,为了方便阅读和分享,我们将在其他平台进行自动同步.由于不同平台的排版格式可能存在差异,为了避免影响阅读体验,建议如有排版问题,可前往公众号查看原文.感谢您的阅读和支持 ...

  2. 最小二乘法+牛顿法+拟牛顿法+梯度下降法+梯度上升法+共轭梯度法

    最小二乘法+牛顿法+拟牛顿法+梯度下降法+梯度上升法+共轭梯度法 最小二乘法+牛顿法+拟牛顿法+梯度下降法+梯度上升法+共轭梯度法 上述几种方法,除了最小二乘法是直接使用公式取得之外,另外几种方法都是 ...

  3. 平分法及牛顿法求解平方根

    1. 问题描述 解非线性方程算法无论是在理论还是实际应用的角度来看,都是极为重要的.在科学和工程中,如何较好的得到一个非线性方程的数值解,是数值分析算法研究中极其重要的领域之一.我们主要讨论几个解一元 ...

  4. matlab实现二分法、牛顿法与割线法

    matlab实现二分法.牛顿法与割线法求方程的解 准备工作 二分法 二分法的matlab代码 二分法运行结果 牛顿法 牛顿法的matlab代码 牛顿法结果 割线法 割线法的matlab代码 割线法结果 ...

  5. php 根号2计算过程,根号换算(开方计算器在线)

    2分之根号2和3分之根号三的计算过程 根号就是要求开方!开方分平方和立方两种!中学生有数学用表,可以在表中查出相应数值!如果用竖式自己算,就要列竖式计算!常用的根号2.根号3等都要记住-- √a+√b ...

  6. 漫步最优化四十五——矩阵S的生成

    想赖着你每一天,\textbf{想赖着你每一天,} 耽误多一秒都不愿意.\textbf{耽误多一秒都不愿意.} 想把你捧在手心,\textbf{想把你捧在手心,} 给你我最奢侈的温柔.\textbf{ ...

  7. 关于书籍“Composing Programs”1.6.3自定义函数的嵌套定义与非嵌套定义的比较

    最近开始刷ucb的cs61-2018年课程,配套书籍是John DeNero的"Composing Programs".书中1.6.3部分讲到user defined functi ...

  8. 替换运动学插件TRAC-IK

    TRAC-IK 运动学求解器 TRAC-IK是由 TRACLabs 开发的反向运动学求解器,它通过线程结合了两个 IK 实现,以实现比常见的开源 IK 求解器更可靠的解决方案.从他们的文件: (TRA ...

  9. 【论文解读】利用高光谱图像对场景反射率进行有效估计(Efficient Estimation of Reflectance Parameters from Imaging Spectropy)

    文章目录 前言 摘要 Ⅰ. 介绍 Ⅱ. 估计反射参数的方法 A. 重建阴影因子 B. 表面反射率和镜面系数的计算 C. 光源功率谱计算 D. 光源方向 E. 将方法扩展到三色图像 Ⅲ. 实现方式 Ⅳ. ...

最新文章

  1. 基于webpack3.x从0开始搭建React开发环境
  2. php 接受 amp,php中amp;amp;和||的用法
  3. 开发好能重构的代码,都是这么干的
  4. AndroidStudio安卓原生开发_activity之间复杂对象类型的数据传递---Android原生开发工作笔记92
  5. ios 给网页传值_ios常见的页面传值方式
  6. 编译exe不弹窗口_详解matlab mbuild -setup找不到C++编译器解决方案
  7. 【aliplayer】阿里播放器的使用
  8. VINS-Mono 代码详细解读——回环检测与重定位、四自由度位姿图优化
  9. 基本的常见的锁的介绍
  10. CodeForces55A - Flea travel 解题报告
  11. [附源码]Python计算机毕业设计SSM基于协同过滤算法的个性化智能图书推荐系统(程序+LW)
  12. 朝鲜打造尖端技术开发区 欲将开城变“硅谷”
  13. [HL7_V2.4]HL7消息生成和反射
  14. 基于MATLAB的数论运算与编写函数(附完整代码)
  15. AC/DC、DC/DC转换器知识
  16. ppt怎么转换成word文档呢?
  17. 网页HTML5--飞机大战小游戏开发--canvas的应用
  18. 程序员自我修养学习笔记
  19. 第16章 第一个信徒
  20. Mysql将某一列值统一拼接一个字符串

热门文章

  1. PLC计数器例子——3个计数器构成的24小时时钟
  2. C语言课程设计:通讯录系统
  3. 02_Python算法+数据结构笔记-冒泡排序-选择排序-插入排序-快排-二叉树
  4. 自然语言处理--模仿莎士比亚风格自动生成诗歌
  5. MacBook超好用的流程图软件推荐
  6. Failed to initialize Data Warehouse host process
  7. 蓝色巨人IBM(International Business Machines)
  8. 深度学习是表示学习的经典代表(浅谈什么是深度学习)
  9. 数据中心机房监控大厅效果图
  10. Windows10系统如何多开微信程序(上班划水必备)