• 一个实例
  • 迭代简介
  • 牛顿迭代法
    • 牛顿迭代法简介
    • 简单推导
    • 泰勒公式推导
    • 延伸与应用

一个实例

//java实现的sqrt类和方法
public class sqrt {public static double sqrt(double n){if (n<0) return Double.NaN;double err = 1e-15;double t = n;while (Math.abs(t - n/t) > err*t)t = (n/t + t)/2;return t;}public static void main(String[] args){sqrt a  = new sqrt();System.out.println(a.sqrt(2));}
}
//2的平方根的求解结果
>>1.414213562373095

迭代简介

迭代,是一种数值方法,具体指从一个初始值,一步步地通过迭代过程,逐步逼近真实值的方法。
与之相对的是直接法,也就是通过构建解析解,一步求出问题的方法。

通常情况下,我们总是喜欢一步得到问题的结果,因此直接法总是优先考虑的。
但是,当遇到复杂的问题时,特别在未知量很多,方程非线性时,无法得到直接解法(例如五次方程并没有解析解)。
这时候,我们需要使用迭代算法,一步步逼近,得到问题的答案。

迭代算法,通常需要考虑如下问题:
- 确定迭代变量
- 确定迭代关系式
- 确定迭代终止条件

牛顿迭代法

牛顿迭代法简介

牛顿迭代法,求解如下问题的根xx

f(x)=0

f(x) = 0

求解方法如下:

xn+1=xn−f(xn)f′(xn)

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

方法中,迭代变量是根xx,迭代关系式如上,迭代终止条件是|f(xn)−0|<error\vert f(x_n)-0 \vert 。

牛顿迭代法需要满足的条件是:
f′(x)f'(x)是连续的,并且待求的零点xx是孤立的。
那么,在零点xx周围存在一个区域,只要初始值x0x_0位于这个邻域内,那么牛顿法必然收敛。
并且,如果f′(x)f'(x)不为0,那么牛顿法将具有平方收敛的特性,也就是,每迭代一次,其结果的有效倍数将增加一倍。

简单推导

f′(xn)=dydx=f(xn)xn−xn+1

f'(x_n) = \frac{dy}{dx} = \frac{f(x_n)}{x_n - x_{n+1}}

xn+1=xn−f(xn)f′(xn)

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

对于平方根问题,假设f(x)=x2−nf(x) = x^2 -n,代入上式,有

xn+1=12(xn+nxn)

x_{n+1} = \frac{1}{2} (x_n + \frac{n}{x_n})

其图像含义是:通过对接近零点的领域点做切线,不断逼近零点,最终十分靠近零点。

泰勒公式推导

上面的式子,同样,可以用泰勒公式推导出来。

f(xn+ϵ)=f(xn)+f′(xn)ϵ+12f″(x)ϵ2+...

f(x_n + \epsilon) = f(x_n) + f'(x_n)\epsilon + \frac{1}{2}f''(x)\epsilon^2+...
只取等号右边的前两项,有

ϵ=f(xn+ϵ)−f(xn)f′(xn)

\epsilon = \frac{f(x_n+\epsilon)-f(x_n)}{f'(x_n)}
两边同时加上 xnx_n,有

xn+1=xn+ϵ=xn+f(xn+ϵ)−f(xn)f′(xn)=xn+f(xn+1)−f(xn)f′(xn)

x_{n+1} = x_n + \epsilon = x_n +\frac{f(x_n+\epsilon)-f(x_n)}{f'(x_n)}=x_n +\frac{f(x_{n+1})-f(x_n)}{f'(x_n)}
最终, f(xn+1=0)f(x_{n+1}=0),假设 f(x)=x2−nf(x) = x^2 -n,上式同样可以化成

xn+1=12(xn+nxn)

x_{n+1} = \frac{1}{2} (x_n + \frac{n}{x_n})

本质上,牛顿迭代法就是利用了泰勒公式的前两项和,是泰勒公式的简化。

延伸与应用

同样的,牛顿迭代法同样可以求n次方根,对于f(x)=xm−nf(x)=x^m - n

xn+1=xn−xnm(1−axn−m)

x_{n+1}=x_n-\frac{x_n}{m}(1-a{x_n}^{-m})

牛顿迭代法求解平方根相关推荐

  1. mysql 立方根函数_Java实现牛顿迭代法求解平方根、立方根

    一.简介 牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法. ...

  2. 牛顿迭代法求平方根原理

    牛顿迭代法可以求解n次方的根,但这里只讨论用它来求平方根. 牛顿迭代法求平方根过程 Java代码实现 /*** 求一个数的平方根* @param number* @return*/public sta ...

  3. 【算法】牛顿迭代法求平方根的原理和误差分析

    前言 在<算法(第四版)>中的P23页,给出了经典的利用牛顿迭代法求平方根的算法,牛顿迭代法在数值计算中应用十分广泛,但是在看书中的代码时,我最困惑的是其中对收敛条件的判断,经过查阅资料和 ...

  4. 牛顿迭代法求平方根倒数

    牛顿迭代法,第二次看了,发现几乎又是从头开始搜集资料,不如整理记录一下,也和大家分享一下: 牛顿迭代法的核心思想是:切线是曲线的线性逼近,通过迭代求切线最后找到函数近似解的过程.具体可以参考下面这个文 ...

  5. Python:牛顿迭代法求平方根

    #69573 牛顿迭代法求平方根[光]-函数复用#69573 牛顿迭代法求平方根描述牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson meth ...

  6. 非线性方程组牛顿迭代法matlab,matlab实现牛顿迭代法求解非线性方程组

    <matlab实现牛顿迭代法求解非线性方程组>由会员分享,可在线阅读,更多相关<matlab实现牛顿迭代法求解非线性方程组(5页珍藏版)>请在人人文库网上搜索. 1.matla ...

  7. python牛顿法解非线性方程组_matlab实现牛顿迭代法求解非线性方程组.pdf

    matlab实现牛顿迭代法求解非线性方程组.pdf matlab 实现牛顿迭代法求解非线性方程组实现牛顿迭代法求解非线性方程组 已知非线性方程组如下 3*x1-cosx2*x3-1/20 x12-81 ...

  8. 141. Sqrt(x)【牛顿迭代法求平方根 by java】

    Description Implement int sqrt(int x). Compute and return the square root of x. Example sqrt(3) = 1 ...

  9. 经典算法:牛顿迭代法求平方根

    //牛顿迭代法求平方根 1 double mysqrt(double num) 2 { 3 double x = num/2; 4 double y = 0; 5 do{ 6 x = x/2+num/ ...

最新文章

  1. woocommerce分类页面模板_怎样让wordpress网站的不同分类页面,调用不同的banner图片?...
  2. 实现哈希表 java,如何实现Java的哈希表?
  3. AT91SAM9XEK ramdisk 启动笔记
  4. maven配置tomcat7
  5. php 第一次创建文件时延迟4秒 sleep用法
  6. [C语言]函数与调试
  7. 安装VisualC++出现未安装等错误怎么办
  8. 向weka 中添加DBSCAN算法
  9. 基于神经网络和相关性分析的数学建模思路分享
  10. 揭秘AI创业江湖里的“师徒帮”:同门师兄弟搭档 导师坐镇后方
  11. 2种方式!带你快速实现前端截图
  12. 微信VS抖音_四大品类投放分析报告——护肤、彩妆、美食饮品、母婴用品
  13. 线性表示线性相关线性无关
  14. 【成为架构师课程系列】架构师的核心能力地图
  15. Point Cloud Transformer的pytorch代码实现
  16. linux 为执行程序添加一个交互确认执行的信息
  17. Matlab 斜率和曲率,曲率_与闪电共舞_新浪博客
  18. Image-to-Image Translation with Text Guidance
  19. 数据库:PostgreSQL 和 MySQL对比
  20. 职工工资信息系统 c语言题,职工工资管理信息系统

热门文章

  1. 通常我们将python语言程序保存在一个后缀_ACAA网络设计师模拟题
  2. diff算法_React源码揭秘(三):Diff算法详解
  3. 视觉SLAM开源算法ORB-SLAM3 原理与代码解析
  4. 重磅直播|结构光方法新应用
  5. 自动驾驶 | MINet:嵌入式平台上的实时Lidar点云数据分割算法,速度可达 20-80 FPS!...
  6. JAVA_weB中的一些配置
  7. RDKit | 基于RDKit从分子中提取3D药效团特征
  8. 根据某一列的进行去重的小工具----duplicated.exe
  9. sangerbox平台使用(三)绘制火山图
  10. R语言绘制环状条形图