牛顿法(Newton’s method)又称为牛顿-拉弗森法(Newton-Raphson method),是一种近似求解实数方程式的方法。(注:Joseph Raphson在1690年出版的《一般方程分析》中提出了后来被称为“牛顿-拉弗森法”的数学方法,牛顿于1671年写成的著作《流数法》中亦包括了这个方法,但该书在1736年才出版。)

之前的一篇博客中提到的二分法可以求解方根,而使用牛顿迭代法可以更快地解出方根。现在,人们使用的计算器里面大多数都是运用的牛顿迭代法。

假设n=x2,现在需要求n的方根,n=x2亦即x2-n=0,把它转换成方程式f(x)=x2-n,如上图所示。

选取作为求解方根的初始近似值,过点

作切线T,T的方程为

,求出T与x轴交点的横坐标

,称x1为n方根的一次近似值。

过点

再作切线,并求得该切线与x轴交点的横坐标

,称

为n方根的二次近似值。

以此类推,得到牛顿法的迭代公式:

 (注:f‘(xn)是导数,这里也就是切线的斜率,数值是2*xn)。

猜测值在经过多次迭代后会越来越接近曲线的根,用数学术语来说就是,这个方程式在

的时候收敛,故能求得近似n方根的值。

总的图示如下:

代码如下:

def sqrt_NR(n):

‘‘‘为了方便起见,先假设n为正数‘‘‘

guess=n/2 # 设置初始猜测值为n的一半

diff=guess**2-n # f(Xn)

count=1 # 设置猜测次数起始值为1

while abs(diff)>0.001 and count<100: # 当猜测值的平方和n本身的差值无限接近误差值时,循环才会停止;同时设置猜测次数不超过100次

guess=guess-diff/(2*guess) # 根据牛顿法的迭代公式Xn+1=Xn-f(Xn)/f‘(Xn),将上一次的猜测值减去f(Xn)/导数的值赋予新的猜测值

diff=guess**2-n # 更新f(Xn)

count+=1 # 猜测次数每次增加1

return guess

调用此函数试一下:

print(sqrt_NR(8))

运行结果如下:

2.8284313725490198

二分法和牛顿法对比:

把这两个函数的eplison都设置为0.01,增加显示count

运行:

print(“二分法: ", sqrt_bi(8))

print("牛顿法: ", sqrt_NR(8))

结果如下:

二分法:    (2.828369140625, 15)

牛顿法:    (2.8284313725490198, 4)

是不是牛顿法比二分法快多了?

原文:http://www.cnblogs.com/HuZihu/p/7605440.html

牛顿法求解1-100的平方根python_使用牛顿-拉弗森法定义平方根函数(Newton-Raphson method Square Root Python)...相关推荐

  1. 【计算方法】牛顿-拉弗森法(非线性方程的求解)

    牛顿法 设函数y=f(x)同x轴相较于点(p,0),我们假设初始值p0在p附近,过函数曲线上点(p0,f(p0))的切线与x轴交线为p1 如图上这样反复迭代,不断逼近p点,这里同样可以用斜率的公式去推 ...

  2. 数值分析之牛顿拉夫森迭代(牛顿法)

    @数值分析之非线性方程求解 文章目录 一.牛顿拉夫森迭代 1.1 牛顿拉夫森法 1.1.1 牛顿-拉夫森定理: 1.1.2 matlab版算法: 二.题目及实现代码 2.1 题目 2.2 输入输出格式 ...

  3. 通过梯度下降和牛顿法求解一个数的平方根

    梯度下降 梯度下降法(Gradient descent)是一个一阶最优化算法,就是让参数沿着损失函数负梯度的方向更新.迭代的步长,也就是学习率是事先给定的,如果负梯度的绝对值越大,这次更新的幅度也会越 ...

  4. 牛顿法(牛顿拉夫逊)配电网潮流计算matlab程序

    牛顿法配电网潮流计算matlab程序 传统牛顿-拉夫逊算法,简称牛顿法,是将潮流计算方程组F(X)=0,进行泰勒展开.因泰勒展开有许多高阶项,而高阶项级数部分对计算结果影响很小,当忽略一阶以上部分时, ...

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

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

  6. LIO-SAM:在高斯牛顿法求解过程中用SO3代替欧拉角

    LIO-SAM发表于IROS2020,是一个效果非常好的惯性-激光紧耦合里程计 我打算给我们的机器人搞一个激光里程计,于是打算把LIO-SAM改一改搞过来 修改过程中发现一个问题:在里程计求解(map ...

  7. [C++]已知f(x) = cosx - x。x的初值为3.14159/4,用牛顿法求解方程f(x) = 0的近似解,要求精确到10-6。f(x)的牛顿法的表达式为xn+1 = xn + (cosxn

    (附加题)已知f(x) = cosx - x.x的初值为3.14159/4,用牛顿法求解方程f(x) = 0的近似解,要求精确到10-6.f(x)的牛顿法的表达式为xn+1 = xn + (cosxn ...

  8. 简单题-不用库函数,求解一个数字的平方根

    题目: 如标题所示,不用平方根库函数,求解一个数字的平方根. 分析: 这个问题有两个思路: 思路1:采用二分的方式(无处不在的二分),上界初始化为数字本身,下界初始化为1,这样用二分,判断中间数字的平 ...

  9. 最优化--牛顿法求解多元函数极值例题(python)

    目录 一.问题 二.python代码 三.结果 一.问题 给定一个函数f(x)=60-10x1-4x2+x12+x22-x1x2,利用牛顿法求解该函数的最小值,需给出中间结果. 二.python代码 ...

最新文章

  1. 一个考查作用域以及闭包的题目
  2. 怎么用python统计字数_使用Python 统计高频字数的方法
  3. NanoProfiler-Step1翻译
  4. 网页单机怎么用服务器修改元宝,[一键安装] 网页游戏热血战纪半一键端,附加架设方法+元宝修改!...
  5. TypeScript里一些特殊的类型
  6. 数据结构之二叉搜索树
  7. JAVA入门级教学之(对象和引用)
  8. java解析时已到达文件结尾_IO流读取到文件末尾继续读取
  9. 语法推导树之短语,直接短语,句柄
  10. 训练和测试数据的观察
  11. $.getJSON()应用
  12. java与数据库教程_[求助]Java与数据库的链接的教程or资料
  13. mysql 表字段信息从一张表迁移到另一张表_Mysql之分库分表
  14. python---turtle库(详解)
  15. Ubuntu下ASIC/FPGA环境搭建
  16. 连接服务器,上传代码,Flashfxp5
  17. cassandra java cql_Cassandra CQL v3.3中文文档(上)
  18. 【HTML粉色跳动爱心】效果展示+源代码
  19. MBTI职业性格测试和大五人格测试对比分析
  20. 很不错的教程一步步教你如何写Makefile

热门文章

  1. [原创] 给偏色美女调色 五步搞定
  2. [转载]《越狱》第二季过后,剧情跌宕起伏,各角色们的命运也各有不同,现公布如下
  3. 关于红杏的公益代理, Android Studio以及freso的编译
  4. 长春金融高等专科学校计算机系宿舍怎样,长春金融高等专科学校,寝室条件好的专科大学!...
  5. 【linux杂谈】安装linux虚拟机的时候发现的full name,user name有啥区别
  6. 监控摄像机动态范围的几种测试方法
  7. Arduino中编写打砖块小游戏(完整代码)
  8. Scrapy 爬取 分析了 7 万款 App,全是没想到
  9. 需求说明:请用户输入一个“QQ号码”,我们来判断这个QQ号码是否正确。 要求:使用方法来完成判断功能。
  10. 金融工程学(九):期权回报与价格分析