泰勒级数+牛顿迭代公式+最简单的C语言求根号的值

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

转载自:http://blog.csdn.net/tqtuuuu/article/details/6821767

无意间在CSDN上看见一哥们讨论Tecent的两道面试题,其中一道题目就是求根号2的值,并且保留指点的小数位。我想我一定是不能进Tecent了,并且我一定是一个数学小白,不,就是一个小白。查了一些资料。mark一下先...

泰勒级数

    泰勒级数的冥级数如下所示:

    取前面两项等于0得:f(a) + f'(a)(x-a) = 0;

    化简后得:x = a - f(a)/f'(a);

    其中a为自变量的取值,x为a的一个近视解,使用x0代替a,x1代替x,则上式可表示为:x1 = x0 - f(x0)/f'(x0);

牛顿迭代公式

    牛顿迭代法结论其实就是取泰勒级数前两项等于0求得的,为:x(n+1) = x(n) - f(x(n))/f'(x(n));

思路如下:

    假设有一条曲线C,在曲线上面任选一点x0 = 1, 求的曲线的值为f(1), 即(1, f(1))为曲线上得一点。过点(1, f(1)), 作一条曲线C的切线,切线与X轴相交于点x1。同理使用x1求得x2、x3、x4......。所求得的一些列与X轴相交的点位曲线与X轴相交点得近视值。如设定某一误差e,当x(n+1)-x(n) < e,则可认为x(n+1)是曲线的一个近视解。因为x(n+1)作为曲线的解误差为可以接受的e。

    其实,对于某个点,相对于曲线的切线方程是确定的,即为:f(x0) = f'(x0)(x - x0), 其中f'(x0)为切线的斜率。化简即为x1 = x0 - f(x0)/f'(x0);和泰勒级数中求得的公式不谋而合。由此可得牛顿迭代公式为:x(n+1) = x(n) - f(x(n))/f'(x(n));

最简单的C语言求根号2

    采用上述方法求得了曲线的近视解,如要求根号2,可假设f(x) = x^2 - 2 = 0;即曲线x^2 -2 = 0的解即为根号2的值,通过控制误差的大小,即可求得根号2的保留小数点位数的取值。如要取得小数点为8为的根号2的值,可取误差e=0.00000001, 即误差为10的负8次方。取根号2小数点保留10位的最简单C代码如下:

[cpp] view plaincopyprint?
#include <stdio.h>  
  
int main() {  
  
    int i = 0;  
    float x1 = 1, x2 = 0;  
    float diff = 0;  //diff为两次近视值之间的差,如果此差小于某一个误差值,即结束迭代  
  
    do {  
        x2 = x1 - (x1*x1-2)/(2*x1);  //如迭代公式所示,求x1的一个近视值x2  
  
        if (x2 > x1)                 //abs不适合求float数的绝对值,所以采用sb的判断语句  
            diff = x2 - x1;  
        else  
            diff = x1 - x2;          //可以看到,误差的计算方式就是两次迭代值之间的正差  
  
        if (diff < 0.0000000001)     //小数点后位数控制误差大小  
            break;  
  
        printf("%.10f, %.10f\n", x1, x2);  
        x1 = x2;                     //改变x1的值为前一次跌打x2的值,继续迭代  
    }   while (1);  
  
    return 0;  
}  

运行结果如下:

[html] view plaincopyprint?
# ./a.out   
1.0000000000, 1.5000000000  
1.5000000000, 1.4166666269  
1.4166666269, 1.4142156839  
1.4142156839, 1.4142135382  

btw,根号2的值也就是方程x^2 - 2 = 0的解。而以上输出中第2列均为方程的解,只是精度不同而已。而精度的控制就靠diff和0.0000000001控制了。当然,代码写得很sb,并且条件全都写死在代码里面,旨在用最简单的代码讲清楚怎样使用牛顿迭代法求根号的值。

    另外,大家别喷我,上述代码肯定不是最简单的,只是想要表达比较简洁,希望能够更清楚的看出牛顿迭代法的使用。


泰勒级数估算平方根需展开的阶数 要估算一个数的平方根,可以用泰勒级数,而需要展开的阶数和所需的精度以及根的数有关。 阅读详情

相关推荐

如何用牛顿迭代平方根

设函数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)在区间内每一点都可导,...

weixin_44482648的博客 5397

c++用迭代法泰勒公式cosx和弦截法方程的根.docx

适合正在学习面向对象程序设计的学生学习,用迭代法解决级数问题(以余弦泰勒公式为例)。本资源提供两道样题和对应的C++代码实现。

如何不用库函数实现根号

今天和朋友聊面经,说到一道题目,如何不用库函数根号,并且能用函数的输入参数来控制误差,他想了一个比较牛逼的方法,小数转整数,然后二分查找。在那么短的时间想到这个地步真是不错,但是我貌似记得科学计算的课上说过类似的东西,用泰勒计算: 其实想到了这个其他的都比较简单了,贴一下代码: #include #include using namespace std; #define _DEBUG /

hitrose27的专栏 3209

常用泰勒公式

泰勒展开

qq_43806430的博客 6101

常见泰勒展开公式及复杂泰勒展开

初等的函数泰勒展开 ex{e^x}ex ex=1+x+12!x2+13!x3+...+1n!xn+o(xn){e^x} = 1 + x + {1 \over {2!}}{x^2} + {1 \over {3!}}{x^3} + ... + {1 \over {n!}}{x^n} + o({x^n})ex=1+x+2!1​x2+3!1​x3+...+n!1​xn+o(xn) sin⁡x\sin xsinx sin⁡x=x−13!x3+15!x5−...+1(2n+1)!x2n+1+o(x2n+2)\sin x

星辰火之梦 5万+

编程根号2

编程根号2,不能使用内置函数sqrt #include<iostream> #include<cmath> using namespace std; double MySqrt(double n) { //此处一定为浮点数,不要用整数 double _max = n; double _min = 0.0; //此处为精度,当满足该精度时,...

bjxiaxueliang的CODING小栈 8705

java测试一个泰勒级数,泰勒级数+牛顿迭代公式+最简单的C语言根号

无意间看见一哥们讨论Tecent的两道面试题,其中一道题目就是根号2,并且保留指点的小数位。我想我一定是不能进Tecent了,并且我一定是一个数学小白,不,就是一个小白。查了一些资料。mark一下先...泰勒级数泰勒级数的冥级数如下所示:取前面两项等于0得:f(a) + f'(a)(x-a) = 0;化简后得:x = a - f(a)/f'(a);其中a为自变量的取,x为a的一个近视解,使...

weixin_29958569的博客 310

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

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

二十三小时 2万+

牛顿法实现根号

SCIP 1.1.7的一个练习。 牛顿迭代法(Newton's method)又称为牛顿-拉夫逊方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似解方程的方法。多数方程不存在公式,因此精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根。牛顿迭代法是

huaqianmian的博客 1万+

C语言中利用泰勒级数算_漫谈高数——泰勒级数的物理意义

算法数学之美日期:2019年1月17日正文共:5809字2图预计阅读时间:15分钟 来源:算数学苑高等数学干吗要研究级数问题?是为了把简单的问题弄复杂来表明自己的高深?No,是为了把各种简单的问题/复杂的问题,他们的解过程用一种通用的方法来表示。提一个问题,99*99等于多少?相信我们不会傻到列式子去算,口算也太难了而是会做一个迂回的方法,99*(100-1),这样更好算。那么...

weixin_39644713的博客 863

c语言 牛顿方法计算平方根,sqrt()平方根计算函数的实现2——牛顿迭代

牛顿迭代法:牛顿迭代法又称为牛顿-拉夫逊方法,它是牛顿在17世纪提出的一种在实数域和复数域上近似解方程的方法。多数方程不存在公式,因此精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x)= 0的根。牛顿迭代法是方程根的重要方法之一,其最大优点是在方程f(x) =0的单根附近具有平方收敛,而且该法还可以用来方程的重...

weixin_39719989的博客 1982

多元函数泰勒级数展开_泰勒级数的物理意义

高等数学干吗要研究级数问题?是为了把简单的问题弄复杂来表明自己的高深? No,是为了把各种简单的问题/复杂的问题,他们的解过程用一种通用的方法来表示。提一个问题,99*99 等于多少? 相信我们不会傻到列式子去算,口算也太难了而是会做一个迂回的方法,99*(100-1),这样更好算。那么 995*998 呢? 问题更复杂了,(1000-5)*(1000-2),式子比直接计算要复杂,但是...

weixin_39568926的博客 1319

泰勒公式矩阵形式_漫谈高数——泰勒级数的物理意义

算法数学之美日期:2019年1月17日正文共:5809字2图预计阅读时间:15分钟 来源:算数学苑高等数学干吗要研究级数问题?是为了把简单的问题弄复杂来表明自己的高深?No,是为了把各种简单的问题/复杂的问题,他们的解过程用一种通用的方法来表示。提一个问题,99*99等于多少?相信我们不会傻到列式子去算,口算也太难了而是会做一个迂回的方法,99*(100-1),这样更好算。那么...

weixin_39684052的博客 701

多元函数泰勒级数展开_漫谈高数(泰勒级数的物理意义)

高等数学干吗要研宄级数问题?是为了把简单的问题弄复杂来表明自己的高深?No,是为了把各种简单的问题/复杂的问题,他们 的解过程用一种通用的方法来表示。提一个问题,99*99等于多少?相信我们不会傻到列式子去算,口算也太难了而是会做一个迂回的 方法,99*(100-1),这样更好算。那么995*998呢?问题更复杂了,(1000-5)*(1000-2),式子比直接计算要复杂,但是口算却成...

weixin_39722692的博客 824

【超级易懂版】牛顿迭代法在解x的平方根问题下的浅谈

一个函数在某一点的导数描述了这个函数在这一点附近的变化率。导数的本质是通过极限的概念对函数进行局部的线性逼近。物理中,一阶导数是位移的变化速率,二阶导数则是加速度,也就是速度的变化率。每一阶导数都是上一层导数的变化率。如果想用一个新的函数去拟合一个幂函数,我们设为物理意义下时间与位移关系的函数f(x),如何得到任意时间x>=0下物体到底位移了多少呢?

阿奎的博客 962

泰勒公式矩阵形式_漫谈高等数学:泰勒级数的物理意义

关注数学,关注AI,关注我们公众号ID:Math-AI算法数学之美日期:2019年7月26日正文共:5809字2图预计阅读时间:15分钟 来源:math高等数学干吗要研究级数问题?是为了把简单的问题弄复杂来表明自己的高深?No,是为了把各种简单的问题/复杂的问题,他们的解过程用一种通用的方法来表示。提一个问题,99*99等于多少?相信我们不会傻到列式子去算,口算也太难了而是会做一...

weixin_42498909的博客 631

漫谈高数——泰勒级数的物理意义

全世界有3.14 % 的人已经关注了数据与算法之美高等数学干吗要研宄级数问题?是为了把简单的问题弄复杂来表明自己的高深? No,是为了把各种简单的问题/复杂的问题,他们的...

数据与算法之美 1794

用牛顿法方程的根(重点是平方根)

(二)牛顿迭代法  牛顿迭代法(Newton's method)又称为牛顿-拉夫逊方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似解方程的方法。多数方程不存在公式,因此精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根。牛顿迭代法是方程根的重要方法之...

qq_38003454的博客 1万+
上一篇: cache基础知识
下一篇: 趣闻-莱娜图
lcydhr
博客等级 码龄19年 58粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值