使用牛顿迭代方法(Newton’s method)来估计方程的解

发布时间:2014-10-23 23:30:15
来源:分享查询网

假定现在我们想要估计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

返回顶部
查看电脑版