博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
牛顿迭代法
阅读量:3951 次
发布时间:2019-05-24

本文共 2016 字,大约阅读时间需要 6 分钟。

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

当然,牛顿迭代法也是已知已知的实现求方根最快的方法之一。

大家都知道,五次方程无根式解,但是用途却很多。

而牛顿迭代法的出现正好解决了这个问题。

牛顿迭代法就是不断求导数,请看下图:

在这里插入图片描述
大致推导:
在这里插入图片描述
牛顿迭代法求方根:

int mySqrt(int x){
long r = x; while(r * r > x) {
r = (r + x / r) / 2;//迭代 } return (int)r;}

雷神之锤III的源码

float Q_rsqrt( float number ) {
long i; float x2, y; const float threehalfs = 1.5F; x2 = number * 0.5F; y = number; i = * ( long * ) &y; // evil floating point bit level hacking i = 0x5f3759df - ( i >> 1 ); // what the fuck? y = * ( float * ) &i; y = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration // y = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration, this can be removed #ifndef Q3_VM # ifdef __linux__ assert( !isnan(y) ); // bk010122 - FPE? #endif #endif return y; }

参考

牛顿迭代法求方程的根没有固定的模板。

需根据不同要求进行解答。

可以看看hduoj 2199

题目的大概意思是:对于8 * x *x *x *x + 7 * x *x *x + 2 * x *x + 3 * x + 6 = y ,给定y,要在1~100范围内找到合适的x使得等式成立。
可以用二分,也可以用牛顿迭代。

#include 
//#include
using std::cin;using std::cout;using std::endl;double y;const double EPS = 1e-6;//#define F(x) 8 * x *x *x *x + 7 * x *x *x + 2 * x *x + 3 * x + 6 - y//#define F1(x) 32 * x *x *x + 21 * x *x + 4 * x + 3#define F(x) 8 * x *x *x *x + 7 * x *x *x + 2 * x *x + 3 * x + 6 - y#define F1(x) 32 * x *x *x + 21 * x *x + 4 * x + 3double Newton(double x) {
int k = 1; while (fabs(F(x)) > EPS) {
x -= (F(x)) / (F1(x)); k++; if (k > 30) return -1; } return x;}int main() {
std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cout << std::fixed; int T; cin >> T; while (T--) {
cin >> y; double z; bool flag = false; for (double i = 0.0; i < 100; i++) {
z = Newton(i); if (z <= 100 && z >= 0) {
flag = true; break; } } if (flag==false) {
cout << "No solution!" << endl; } else {
cout << std::setprecision(4) << z << endl; } } return 0;}

更详细的请参考:

转载地址:http://qwuzi.baihongyu.com/

你可能感兴趣的文章
谷歌大脑2017技术研究总结 | Jeff Dean执笔(附论文 & 数据集)
查看>>
最新中国一二三四五线城市排名出炉!去这些城市买房准没错!
查看>>
BAT人工智能生态时局图:全面战争爆发前夜
查看>>
Python交互式数据分析报告框架~Dash介绍
查看>>
Chrome 浏览器 必知必会的小技巧
查看>>
Python奇技淫巧,看看你知道几个
查看>>
资源&教程 | Python数据分析,详细的学习路径
查看>>
白话AI:看懂深度学习真的那么难吗?初中数学,就用10分钟
查看>>
中国癌症大数据出来了!每年126万例癌症死亡本可避免
查看>>
超全的 Linux 机器的渗透测试命令备忘表,共16表128条命令
查看>>
代码传奇 | 明明可以靠颜值 却用代码把人类送上了月球的女人——Margaret Hamilton
查看>>
教你用Java来玩答题(百万英雄/冲刺大会等)
查看>>
用Python做跳一跳外挂太浪费了,这种技能让你目瞪口呆
查看>>
如何在Python中快速进行语料库搜索:近似最近邻算法
查看>>
比特币这么火热,看看这篇比特币初学者指南
查看>>
快收藏! 30 分钟包你学会 AWK
查看>>
各平台的推荐算法,太贴切了!
查看>>
一张图学会Python3
查看>>
500款各领域机器学习数据集,总有一个是你要找的
查看>>
2017年终奖调查出炉 程序员年终奖多少你绝对猜不到
查看>>