无意间看见一哥们讨论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代码如下:#include

intmain() {

inti = 0;

floatx1 = 1, x2 = 0;

floatdiff = 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

break;

printf("%.10f, %.10f\n", x1, x2);

x1 = x2;//改变x1的值为前一次跌打x2的值,继续迭代

}while(1);

return0;

}

运行结果如下:

# ./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,并且条件全都写死在代码里面,旨在用最简单的代码讲清楚怎样使用牛顿迭代法求根号的值。

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

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

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

    转载自:http://blog.csdn.net/tqtuuuu/article/details/6821767 无意间在CSDN上看见一哥们讨论Tecent的两道面试题,其中一道题目就是求根号2的值 ...

  2. 牛顿迭代公式是如何推导出来的

    牛顿迭代公式是用来求解方程的迭代法之一.它通过不断地迭代来逼近方程的根. 具体来说,假设我们要求解方程 f(x)=0 的根,那么我们可以通过如下步骤来推导牛顿迭代公式: 首先,我们需要确定一个初始猜测 ...

  3. 牛顿迭代公式计算平方根立方根

    牛顿迭代公式计算平方根立方根 如何用计算机来求一个数的平方根与立方根呢.可以采用牛顿迭代公式.相类似的还有GCD最大公约数算法,也即欧几里德算法,利用余数辗转相除. 牛顿迭代公式思路 用一个曲线的切线 ...

  4. python牛顿迭代公式_python计算牛顿迭代多项式实例分析

    本文实例讲述了python计算牛顿迭代多项式的方法.分享给大家供大家参考.具体实现方法如下: ''' p = evalPoly(a,xData,x). Evaluates Newton's polyn ...

  5. Java产生一个随机数【详细教学】巨简单

    (文章末尾有总结!不想浪费时间的小伙伴直接浏览最后) 用到的结构: Math.random() Math.random():产生一个浮点型(double)随机数,该随机数的范围是[0.0,1.0) 使 ...

  6. java测试一个泰勒级数_自己 推导一个 泰勒级数

    一开始 的 时候,  以为 泰勒级数 是   f ( x )  和 n 阶导数 之间 的 关系,  或者  f ( x ) 的   1 阶导数 和  2 阶 .3 阶 -- n 阶导数 之间 的 关系 ...

  7. java测试一个泰勒级数,数学原理-高等数学复习笔记 ——1.1 泰勒公式 泰勒展开式...

    (注 :需理解 有限增量定理 即拉格朗日中值定理 :https://www.zhihu.com/search?type=content&q=%E6%8B%89%E6%A0%BC%E6%9C%9 ...

  8. python牛顿迭代公式_python 牛顿迭代法

    使用牛顿迭代法求方程 在x附近的一个实根. 赋值X,即迭代初值:用初值x代入方程中计算此时的f(x)=(a * x * x * x + b * x * x + c * x + d)和f'(x)=(3 ...

  9. [Leetcode][第206题][JAVA][反转一个单链表][递归][迭代]

    [问题描述][简单] [解答思路] 1. 递归 自底向上 基本条件/终止条件:当前节点或者下一个节点==null 递推关系: head.next.next = head 在函数内部,改变节点的指向,也 ...

最新文章

  1. (九)React面试真题演练
  2. Java 算法 打水问题
  3. 模拟角频率和数字角频率的关系
  4. [HNOI2015]开店
  5. WIN7、Vista下无损分区工具Acronis Disk Director Suite 10.0下载及使用说明
  6. 深度学习教程(3) | 浅层神经网络(吴恩达·完整版)
  7. C++基础算法学习——汉洛塔问题
  8. java cryptography_Java密码体系结构简介:Java Cryptography Architecture (JCA) Reference Guide...
  9. 看懂UML类图和时序图
  10. C语言上机报告例文,c语言上机实验报告_大一c语言上机实验报告_c语言实验报告怎么写...
  11. Linux服务器中Ebury Trojan病毒记
  12. 香帅的北大金融学课笔记20 -- 金融术与道
  13. Greenplum关于表膨胀,数据倾斜
  14. Java读取word文档,转换为网页
  15. selenium自动化测试学习4-基本控件介绍
  16. 传感器工作原理以及传感器种类详解
  17. budgie_为什么要为您的Linux桌面选择Budgie
  18. 设计模式——共享模式
  19. 原创 私藏的实用工具/学习网站我贡献出来了
  20. vue+elementui导入、导出excel

热门文章

  1. 【Python】将文章变为软文的诗词风
  2. wps怎么默认粘贴html,wps文字怎样设置文本粘贴默认方式
  3. LiveGBS流媒体平台-GBT28181国标视频平台录像存储设备录像回看解决方案
  4. 1987. 粉刷栅栏
  5. excel和python的数值排名
  6. 计算机科学与技术专业 笔记本电脑内存8g,专业讲解:笔记本电脑内存大小和性能说明...
  7. 【数学篇】07 # 如何用向量和参数方程描述曲线?
  8. 大数据CDH安装详细教程
  9. MapReduce英语单词频次统计
  10. 2018年社交电商巨大风口 无忧猴布局全国