牛顿迭代法求解方程
来源:互联网 发布:js查找字符串出现次数 编辑:程序博客网 时间:2024/06/05 10:53
说明:该篇博客源于博主的早些时候的一个csdn博客中的一篇,由于近期使用到了,所以再次作一总结。原文地址
概述
牛顿迭代法(Newton’s method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。
1. 牛顿迭代公式
设
过点
实际上牛顿迭代法就是将非线性的问题转化为线性问题再做处理。将非线性函数在小范围内用他的一阶泰勒级数表示(也就是在某点泰勒展开取低阶项)。
2. 使用牛顿迭代公式求解方程
求解步骤:
1. 原函数:
2. 原函数的导函数:
3. 使用牛顿迭代公式
3. 示例
3.1 利用牛顿迭代公式求解平方根
求解平方根也就是求解函数
#include <iostream>#include <math.h>using namespace std;int main(){ double m,x = 1.0; cout<<"Please Input a Num:"<<endl; cin>>m; if(m < 0) { cout<<"Sorry,Input is Illegal"<<endl; } else if(m == 0) { cout<<"0"<<endl; } else { while(fabs(m - (x*x)) >= 0.001) { x = (x + m/x)/2.0; cout<<"x="<<x<<"\tm="<<m<<endl; //显示运算过程 } cout<<"The result is:"<<x<<endl; } system("pause");}
3.2 另一种求解平方根的高效方法
提到这个算法就不得不说一个神奇的数字 0x5f375a86 。下面的代码来自于维基百科,关于更多该数字的奇闻可以点击下面的链接查看:
https://en.wikipedia.org/wiki/Fast_inverse_square_root
int sqrt(float x) { if(x == 0) return 0; float result = x; float xhalf = 0.5f*result; int i = *(int*)&result; i = 0x5f375a86- (i>>1); result = *(float*)&i; result = result*(1.5f-xhalf*result*result); // Newton step, repeating increases accuracy result = result*(1.5f-xhalf*result*result); return 1.0f/result; }
- 牛顿迭代法求解方程
- 牛顿迭代法求解方程
- 用牛顿的迭代法求解非线性方程
- 求解一元多次方程 牛顿迭代法
- 牛顿迭代法在求解三次方程上的应用
- 多变量非线性方程求解问题(牛顿迭代法)
- 迭代法解方程:牛顿迭代法、Jacobi迭代法
- 牛顿迭代法求解立方根
- 牛顿迭代法求解平方根
- 牛顿迭代法求解平方根
- 牛顿迭代法求解
- 牛顿迭代法求方程根
- 牛顿迭代法求方程解
- 牛顿迭代法求方程根
- 牛顿迭代法求方程根
- 求解一元多次方程的两种方法:牛顿迭代法和二分法
- HDU 2199(牛顿迭代法)/(二分)(高次方程求解)
- 【数值分析】迭代法解方程:牛顿迭代法、Jacobi迭代法
- 逻辑数据库设计 - 单纯的树(递归关系数据)
- Ubuntu14.04 terminal添加右键
- 外部类为abstract时,出错记录。
- iOS 照片时间轴
- 关于Raphael.js 的画圆弧
- 牛顿迭代法求解方程
- HttpURLConnection加载图片存在本地
- 实现Parcelable的bean中有数组对象
- DispatcherServlet简介
- Android Studio开发jni实例详解 (调用C代码实例)
- 记录通过Map将list中包含相同字段的对象存放到一起,不同对象的分开
- Mybatis分页插件 - PageHelper
- HDU-5791-TWO-DP
- Candies-差分约束系统