基于牛顿法的开平方实现
引言
牛顿法是求解最优问题的一种常用方法。
方法简述
本文主要在实现使用牛顿法进行开平方操作,代码使用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=2x1n+2x1
迭代多次,知道求出xn−xn−1<δx_{n}-x_{n-1}<\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
基于牛顿法的开平方实现相关推荐
- 基于确定性最大似然算法 DML 的 DoA 估计,用牛顿法实现(附 MATLAB 源码)
本文首次在公众号[零妖阁]上发表,为了方便阅读和分享,我们将在其他平台进行自动同步.由于不同平台的排版格式可能存在差异,为了避免影响阅读体验,建议如有排版问题,可前往公众号查看原文.感谢您的阅读和支持 ...
- 最小二乘法+牛顿法+拟牛顿法+梯度下降法+梯度上升法+共轭梯度法
最小二乘法+牛顿法+拟牛顿法+梯度下降法+梯度上升法+共轭梯度法 最小二乘法+牛顿法+拟牛顿法+梯度下降法+梯度上升法+共轭梯度法 上述几种方法,除了最小二乘法是直接使用公式取得之外,另外几种方法都是 ...
- 平分法及牛顿法求解平方根
1. 问题描述 解非线性方程算法无论是在理论还是实际应用的角度来看,都是极为重要的.在科学和工程中,如何较好的得到一个非线性方程的数值解,是数值分析算法研究中极其重要的领域之一.我们主要讨论几个解一元 ...
- matlab实现二分法、牛顿法与割线法
matlab实现二分法.牛顿法与割线法求方程的解 准备工作 二分法 二分法的matlab代码 二分法运行结果 牛顿法 牛顿法的matlab代码 牛顿法结果 割线法 割线法的matlab代码 割线法结果 ...
- php 根号2计算过程,根号换算(开方计算器在线)
2分之根号2和3分之根号三的计算过程 根号就是要求开方!开方分平方和立方两种!中学生有数学用表,可以在表中查出相应数值!如果用竖式自己算,就要列竖式计算!常用的根号2.根号3等都要记住-- √a+√b ...
- 漫步最优化四十五——矩阵S的生成
想赖着你每一天,\textbf{想赖着你每一天,} 耽误多一秒都不愿意.\textbf{耽误多一秒都不愿意.} 想把你捧在手心,\textbf{想把你捧在手心,} 给你我最奢侈的温柔.\textbf{ ...
- 关于书籍“Composing Programs”1.6.3自定义函数的嵌套定义与非嵌套定义的比较
最近开始刷ucb的cs61-2018年课程,配套书籍是John DeNero的"Composing Programs".书中1.6.3部分讲到user defined functi ...
- 替换运动学插件TRAC-IK
TRAC-IK 运动学求解器 TRAC-IK是由 TRACLabs 开发的反向运动学求解器,它通过线程结合了两个 IK 实现,以实现比常见的开源 IK 求解器更可靠的解决方案.从他们的文件: (TRA ...
- 【论文解读】利用高光谱图像对场景反射率进行有效估计(Efficient Estimation of Reflectance Parameters from Imaging Spectropy)
文章目录 前言 摘要 Ⅰ. 介绍 Ⅱ. 估计反射参数的方法 A. 重建阴影因子 B. 表面反射率和镜面系数的计算 C. 光源功率谱计算 D. 光源方向 E. 将方法扩展到三色图像 Ⅲ. 实现方式 Ⅳ. ...
最新文章
- 基于webpack3.x从0开始搭建React开发环境
- php 接受 amp,php中amp;amp;和||的用法
- 开发好能重构的代码,都是这么干的
- AndroidStudio安卓原生开发_activity之间复杂对象类型的数据传递---Android原生开发工作笔记92
- ios 给网页传值_ios常见的页面传值方式
- 编译exe不弹窗口_详解matlab mbuild -setup找不到C++编译器解决方案
- 【aliplayer】阿里播放器的使用
- VINS-Mono 代码详细解读——回环检测与重定位、四自由度位姿图优化
- 基本的常见的锁的介绍
- CodeForces55A - Flea travel 解题报告
- [附源码]Python计算机毕业设计SSM基于协同过滤算法的个性化智能图书推荐系统(程序+LW)
- 朝鲜打造尖端技术开发区 欲将开城变“硅谷”
- [HL7_V2.4]HL7消息生成和反射
- 基于MATLAB的数论运算与编写函数(附完整代码)
- AC/DC、DC/DC转换器知识
- ppt怎么转换成word文档呢?
- 网页HTML5--飞机大战小游戏开发--canvas的应用
- 程序员自我修养学习笔记
- 第16章 第一个信徒
- Mysql将某一列值统一拼接一个字符串
热门文章
- PLC计数器例子——3个计数器构成的24小时时钟
- C语言课程设计:通讯录系统
- 02_Python算法+数据结构笔记-冒泡排序-选择排序-插入排序-快排-二叉树
- 自然语言处理--模仿莎士比亚风格自动生成诗歌
- MacBook超好用的流程图软件推荐
- Failed to initialize Data Warehouse host process
- 蓝色巨人IBM(International Business Machines)
- 深度学习是表示学习的经典代表(浅谈什么是深度学习)
- 数据中心机房监控大厅效果图
- Windows10系统如何多开微信程序(上班划水必备)