使用牛顿迭代方法(Newton’s method)来估计方程的解
来源:互联网 发布:农村淘宝经营计划书 编辑:程序博客网 时间:2024/05/27 00:33
假定现在我们想要估计f(x)=0的解,你可能从网上找到了某些所谓穷举得方法:从x=-100到x=1000,按给定一个递增因子一个一个数的代入f(x)中,所有满足f(x)=0的都是f(x)的解。想想就觉得这种机械的方法不靠谱,效率太低了。本文要介绍的牛顿方法的一种常见用法就是用来求解方程的解。方法很简单,首先我们来根据下图来对牛顿方法的推导最简单的介绍:
1假定一个初始的估计解x0,这个“解”可能不好,我们需要寻找更好的解;
2.在f(x)上做x=x0的切线,切线的方程为:
3.求第2步得到的切线与x轴相交的点的x值,假如x=x1,因为此时y=0,所以:
4.从图中我们可以看到,相对于x0,x1更加接近于真实的解。
5,继续对x1点做2,3步骤,也就是:
显然,x2又更一步接近了真实解。如果继续我们按照上面过程进行下去,相应得到的估计解会越来越接近真实解。这就是牛顿方法。
下面直接粘贴参考文献1中提供的Newton‘s method 定义供参考:
那么怎么判断迭代可以结束,也就是估计解已经等于或最大接近于真实解了呢?因为在真实解处的切线,y本身已经等于0,那么下一个切线与x轴相交的点就是该点,所以判断的依据显然可以是:两次估计解非常接近(相同)。
牛顿方法虽然简单,但是也可能存在失败的情况,读者可以参考参考文献1.
除此之外,牛顿方法只能找到方程的一个解。比如对于f(x)=x^2-3x+2.该函数对应的方程的解有两个x=1,x=2;下面是一个非常简单的牛顿方法的代码:
public class Newton_Method { public static void main(String[] args){ //test:f(x)=x^2+3x+2;f'=2x+3 double x=0; while(true) { double temp=x; x=x-(x*x-3*x+2)/(2*x+3); if(Math.abs(temp-x)<0.000000001){ break; } } System.out.println(x); }}尝试改变:double x 的值,基本上估计解接近于2.除非直接:double x=1,得到的是1.既使能够通过改变x来找到这个方程的两个解,但是对于其他不知道有多少个解的方程,可能就没办法找全全部的解,有没有什么方法能一次找出全部的解呢?
。。。 。。。我暂时也不知道。。想想。希望有人能够提供方法。
参考文献:
1.Paul's Online Math Notes。http://tutorial.math.lamar.edu/Classes/CalcI/NewtonsMethod.aspx
- 使用牛顿迭代方法(Newton’s method)来估计方程的解
- 牛顿迭代式(Newton's Method)解多次方程
- 牛顿方法(Newton's Method)
- 牛顿迭代例子Newton-Raphson Method
- 牛顿法(Newton’s method)
- 牛顿法(Newton's method)
- 牛顿-拉夫逊方法(Newton-Raphson method)
- 牛顿迭代法(Newton's Method)
- 牛顿迭代法(Newton's Method)
- 牛顿法(Newton's Method)
- 牛顿迭代法(Newton's Method)
- 牛顿迭代法(Newton's Method)
- 牛顿迭代法(牛顿-拉弗森方法(Newton-Raphson method))
- 牛顿法求平分根(newton's method)
- Newton法(牛顿法 Newton Method)
- Newton法(牛顿法 Newton Method)
- 牛顿迭代法(Newton's Method)
- 牛顿迭代法(Newton's Method)
- Wireshark抓包工具--TCP数据包seq ack等解读
- file
- 《重构—改善既有代码的设计》要点
- 如何查看当前Ubuntu的版本
- llvm 代码结构
- 使用牛顿迭代方法(Newton’s method)来估计方程的解
- Linux LVS安装和配置笔记
- Javascript 中的引用类型(1)—— Object类型
- ShutDownHookManager分析
- Oracle 11g New 阈值
- 没有eclipse|myeclipse配置文件的情况下导入java web工程文件
- storm提交任务失败
- java 常量池认识
- cocos2d-x大批相同精灵一次渲染