用牛顿迭代求方根
来源:互联网 发布:linux 登录界面循环 编辑:程序博客网 时间:2024/04/23 19:28
1.前言
各种编程语言中都有实现求一个数方根的函数,即sqrt函数。但是,如果不用sqrt函数,只用四则运算让求一个数的方根,该怎么办勒?换句话说,让你自己实现sqrt函数,你能实现么?OK,各位最好先自己想想然后动手实现以下。如果遇到了困难,欢迎接着往下阅读本文。
2.用二分的思想
二分法是非常好用的套路。对于各种快速查找还有迭代类的运算都是一把好手。而且复杂度只有
直接上源码:
public class Root_Of_Num { public static double bin_sec_root(int n) { double start = 0; double end = n / 2.0; double result = n / 2.0; double eps = 0.00001; //精度 double tmp = result * result - n; if (tmp < eps) { return result; } while (Math.abs(tmp) > eps) { if (tmp > 0) { end = result; //更新end result = (start + result) / 2; } else { start = result; //更新start result = (result + end) / 2; } tmp = result * result - n; } return result; } public static void main(String[] args) { int n = 5; double result = bin_sec_root(n); System.out.println("result is: " + result); }}
各位亲,是不是跟二分的思路很像?
3.用牛顿迭代
其实,更快的一种方式是用牛顿迭代的方法。关于牛顿迭代,以后会写专门的文章给大家介绍。先上代码:
public class Root_Of_Num { public static double newton_iteration_root(int n) { double result = 1.0; //迭代初始值 double eps = 0.00001; double tmp = result*result - n; while(Math.abs(tmp) > eps) { //牛顿迭代公式 result = 0.5 * (result + (n / result)); tmp = result*result - n; } return result; } public static void main(String[] args) { int n = 5; double result = newton_iteration_root(n); System.out.println("result is: " + result); }}
这里面最关键的一行其实就是迭代公式那行。要明白为什么这样迭代就能求出方根,需要有相应的数学知识作为基础。请同学们参考我有关牛顿迭代,泰勒展开的文章:http://blog.csdn.net/bitcarmanlee/article/details/52195617
牛顿迭代的速度也很快,一般迭代6-7次,就能得到精度相当高的结果!
最后不禁感叹,数学的力量是伟大的。一切的自然科学,都离不开数学的神奇魔力。只有数学好,才是真的好!
0 0
- 用牛顿迭代求方根
- 牛顿迭代法求方根
- 牛顿法求三次方根
- 利用牛顿迭代法 求n次方根
- SICP 1.1.7 牛顿迭代法求方根
- 牛顿迭代法开N次方根
- 使用牛顿迭代法求解n次方根
- Java开平方根代码——牛顿迭代法
- 牛顿迭代求平方根
- 用牛顿迭代法求根
- 牛顿
- 一种用自然对数开n次方根的方法
- 用牛顿二项式开平方
- Python实现用filter()过滤出1~100中平方根是整数的数
- J2ME快速开平方根
- J2ME快速开平方根
- RMS均方根值
- 均方根误差
- hdu5442 (2015 ACM/ICPC Asia Regional Changchun Online)
- 数据类型
- 二,八,十,十六进制输入转换
- print 语句
- 什么是变量
- 用牛顿迭代求方根
- 【通州爆料】通州台湖一村被征地建设轻轨L2线
- 最短路
- 定义字符串
- raw字符串与多行字符串
- unicode字符串
- 转:布尔类型(短路计算)
- 创建list
- 按照索引访问list