使用牛顿迭代法求平方根

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情


前段时间去面试,被问到“如何在不调用库函数的前提下最快速地求出根号2,结果保留6位有效数字?”


方法一:简单暴力的逼近法

def approach(a):
    x = 0.0
    count = 0
    while 1:
        count += 1
        x += 0.00001
        if x*x >= a:
            break
    print x
    print count
思路就是:x先取0,步长取0.00001,使得x^2逐步逼近2;

使用此方法求得的结果为1.41422,但是此方法循环竟然执行了141422次,实在是不快;


回去之后想了下又在网上查了下,了解到下面的方法二

方法二:牛顿迭代法

(1)先设f(x)=x^2 - a;

(2)求f(x)的一阶导数,即斜率;


(3)得到xn+1与xn的迭代关系式

化简上述斜率公式,即得到:

xn+1=1/2*(xn+a/xn);


(4)代码实现

def sqrt(a):
    x=0.0
    y=a/2
    count = 0
    while(x!=y):
        print 'x=',x,'y=',y
        count += 1
        x=y
        y=(x+a/x)/2
    print count
    return x
此方法计算出的结果为:1.41421356237,且只迭代了6次;


总结:

牛顿迭代法的本质是求出xn与xn+1的迭代关系式,此方法可以推广至求任意次方根,例如求立方根:xn+1=1/3*(2*xn+a/xn^2);

def sqrt_3(a):
    x=0.0
    y=a/2

    count = 0
    while(x!=y):
        print 'x=',x,'y=',y
        count += 1
        x=y
        y=(2*x+a/(x*x))/3
    print count
    return x


参考资料:http://wenku.baidu.com/link?url=pVNsUdORMzEUz6VqcXo1JLpHi1SN7by7DhkCwvmufIdRsuvVL_lWRYAwLWjXdINg_ZOMqP8KTYOYlneT18cRv8Lv5IOccauJV74D8m_gQSm


如何用牛顿迭代平方根 设函数y=f(x)在点x0的某个邻域内有定义,当自变量x在x0处有增量Δx,(x0+Δx)也在该邻域内时,相应地函数取得增量Δy=f(x0+Δx)-f(x0);如果Δy与Δx之比当Δx→0时极限存在,则称函数y=f(x)在点x0处可导,并称这个极限为函数y=f(x)在点x0处的导数记作①f’(x0) ;②y’│x=x0 ;③ │x=x0, 即 导函数 如果函数y=f(x)在开区间内每一点都可导,... 阅读详情

相关推荐

C语言 牛顿迭代平方根

对于用牛顿迭代平方根,最重要的是利用函数关系得到切线方程,再出迭代公式 牛顿迭代:多数方程不存在根公式,牛顿提出了一种用迭代来方程近似根的方。思路就是不断取切线,用线性方程的根逼近非线性方程f(x)=0的根X*。 流程演示:不断取切线,逼近非线性方程f(x)的根 迭代公式的 过点(Xk,f(Xk))作函数的切线,切线方程是:. 切线与x轴的交点是Xk+1,点(X...

qq_39564672的博客 1万+

根号2(100000位)[整理].pdf

根号2(100000位)[整理].pdf

使用库函数sqrt平方根详解(牛顿迭代) C语言入门

橘子冰????vlog: 点这里去B站~

橘子冰的博客 4538

根号2的小数点后10000位[可运行源码]

文章探讨了如何计算2的小数点后10000位,并介绍了三种方:二分牛顿迭代和连分数。二分通过不断缩小左右边界来逼近平方根牛顿迭代利用切线逼近方程的根,适用于多项式根;连分数则适用于手算,通过逐步逼近提高精度。文章还提供了代码示例和实际计算案例,帮助读者理解这些方的实现和应用。

牛顿迭代逼近】根号2的快速方

如果要根号2,比较快的方有:1)二分2牛顿迭代逼近

二十三小时 2万+

用“牛顿迭代根号2的近似值

一、提出问题,引入新课 1、作为高中生,大家都知道根号2的近似值是1.414,这是应该记住的常数,可你知不知道如何去这个近似值呢?(提出问题,激发兴趣,开阔思路,启迪思维,导入新课) 2、学生回答:有学生说用二分,有学生说逐步必近(因为无显示,故用同音字替代),但追问如何二分,如何必近,就没有下文了。(在这里主要是让学生认识到不能机械的对书本上的知识采用“拿来主义”,老师说根号2

liujianfei526的专栏 3万+

数值计算牛顿迭代(x的平方根

牛顿迭代:x的平方根

我怎么天天吃不饱的博客 1223

牛顿迭代快速寻找平方根

    下面这种方可以很有效地根号a的近似值:首先随便猜一个近似值x,然后不断令x等于x和a/x的平均数,迭代个六七次后x的值就已经相当精确了。    例如,我想根号2等于多少。假如我猜测的结果为4,虽然错的离谱,但你可以看到使用牛顿迭代后这个值很快就趋近于根号2了:(       4  + 2/   4     ) / 2 = 2.25(    2.25  + 2/  

matrix67的专栏 1132

【算牛顿迭代平方根及多次方根

牛顿平方根及多次方根

qq_27198345的博客 7795

【算牛顿迭代平方根的原理和误差分析

前言 在《算(第四版)》中的P23页,给出了经典的利用牛顿迭代平方根的算牛顿迭代在数值计算中应用十分广泛,但是在看书中的代码时,我最困惑的是其中对收敛条件的判断,经过查阅资料和论坛,找到了一个自己感觉比较合理的解释,下文主要就简单介绍一下牛顿迭代和其在《算》这本书中的收敛条件设置的原因的理解。 一、牛顿迭代平方根原理 public static double sqrt(double c) { if(c>0) return Double.NaN......

weixin_43776810的博客 9379

解决“平方根”问题(牛顿迭代

牛顿迭代(也称为牛顿-拉弗森方或牛顿-弗森方)是一种强大且广泛应用的数值技术,用于寻找实数和复数的方程的零点(或根)。如前所述,牛顿迭代可用于计算数的平方根解(a)的平方根等价于解(f(x) = x^2 - a = 0)的根。通过选择合适的初始值(x_0)并重复应用上述公式,(x_n)将迅速收敛到(a)的平方根。是第(n)次迭代的近似值,(f(x))是目标方程,(f’(x))是(f(x))的导数。,每次迭代的目的是找到更好的近似解(x_{n+1}),直到满足一定的终止条件。

5-StarrySky的博客 1804

牛顿迭代平方根

取多少,按照牛顿迭代公式计算下去,结果一定会越来越小(或者保持不变),且越来越逼近下界。牛顿迭代的核心思想是利用函数在某一点的切线来近似该函数的曲线,切线与。轴的交点就是方程根的下一个(且更精确的)近似值。需要注意牛顿迭代是二次收敛的,因此时间复杂度为。根据微积分中的“单调有界定理”,既然数列。开始,数列的值是在不断变小的,即证明。根据我们在“第一步”中得出的结论,对于。我们要证明,从第 1 项开始,所有的。的平方根时,实际上就是在解方程。这说明,无论我们的初始猜测值。既然存在极限,我们可以设。

jyyyyx的算法之旅 1965

牛顿迭代平方根倒数

牛顿迭代,第二次看了,发现几乎又是从头开始搜集资料,不如整理记录一下,也和大家分享一下; 牛顿迭代的核心思想是:切线是曲线的线性逼近,通过迭代切线最后找到函数近似解的过程。具体可以参考下面这个文章,图示画的很容易理解。 牛顿迭代平方根(通俗易懂版)_付石头的博客-CSDN博客_迭代平方根 既然理解和其核心思想,那么就开始进行公式推导: 对上图f(x)的零点x0即:f(x)=0的解,由牛顿迭代的核心思想可知,是比更靠近...

fucong59的博客 1952

【高等数学 牛顿迭代平方根

本文介绍了使用牛顿迭代解正数平方根的方。通过构造函数f(x)=x²-c,验证了牛顿迭代适用的四个条件:二阶可导、导数在x>0时大于0、二阶导数大于0、函数在区间端点异号。代码实现中,初始值取c+1,通过迭代公式不断逼近平方根,当相邻两次结果差值小于1e-7时停止。文中提供了C++实现代码和单元测试用例,验证了算精度达到0.001。该方相比二分更适合练习牛顿迭代的应用,适用于计算任意正数的平方根

闻缺陷则喜何志丹 1129

牛顿迭代平方根及其推广

    一天晚上,本蒟蒻没有写代码,在水群,群里的奆佬说他在面试的时候HR叫他写一个平方根的代码,这哥们写了一个十分大众的二分,结果那个HR说;”你写的太简单了“!!!,我凸(艹皿艹 ),不就是二分吗?还有其他骚操作?群里的其他奆佬就问:“牛顿迭代?”,哇~~~开眼界了,今天闲来无事就去看了看,发现数学是真的奇妙。      其他的废话就不扯了,感谢这位叫马同学的奆佬的博客让我浅显的明白了牛顿...

include的背后是微不足道的开始 725

平方根牛顿迭代matlab程序,牛顿迭代平方根

牛顿迭代的作用是使用迭代解函数方程的根,简单的说就是不断地取切线的过程.对于形如f(x)=0的方程,首先任意的估算一个解x0,再把该估计值代入原方程中.由于一般不会正好选择到正确的解,所以有f(x0)=a.这时计算函数在x0处的斜率,和这条斜率与x轴的交点x1. f(x)=0中精确解的意义是,当取得解的时候,函数值为零(即f(x)的精确解是函数的零点).因此,x1比x0更加的接近精确地解...

weixin_30914893的博客 2577

python牛顿迭代平方根_Python编程如何实现二分牛顿迭代平方根代码...

一个数的平方根函数sqrt(int num) ,在大多数语言中都提供实现。那么要一个数的平方根,是怎么实现的呢?实际上平方根的算主要有两种:二分(binary search)和牛顿迭代(Newton iteration)1:二分根号5a:折半: 5/2=2.5b:平方校验: 2.5*2.5=6.25>5,并且得到当前上限2.5c:再次向下折半:2.5/2=1.25d:平方校验:...

weixin_39960145的博客 2659
上一篇: windows安装配置jdk1.8
下一篇: 在Sublime Text 3中配置编译和运行Java程序
可米_俊俊
博客等级 码龄16年 41粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值