算法初级_Question6_牛顿迭代法求方程根(java实现)

这篇文章讲述的是算法初级部分的牛顿迭代法求方程根问题的java实现,参考的书籍为清华大学出版社出版,贾蓓等编著的《c语言趣味编程1000例》,如有错误或者不当之处,还望各位大神批评指正。

问题描述

编写用牛顿迭代法求方程的根。方程ax³+bx³+cx+d=0,系数a,b,c,d由主函数输出。求x在1附近的一个实根,由主函数输出。
牛顿的迭代法公式是:x = x0-f(x0)/f’(x0),设迭代到|x-x0|<=10^-5时结束。

算法分析

牛顿迭代法是计算方程近似值的常用方法,主要步骤有:
1. 假定一个初始值,这里设x0=1.5
2. 将初始值x0带入函数f(x0)和导函数fd(x0)
3. 通过公式x = x0-f(x0)/fd(x0)计算出新的近似值x
4. 判断是否符合近似值要求的标准,若不符合继续通过公式进行近似计算

代码实现

public class Q6_Newton {
    /**
     * 问题描述:编写用牛顿迭代法求方程的根。方程ax³+bx³+cx+d=0,系数a,b,c,d
     *           由主函数输出。求x在1附近的一个实根,由主函数输出。
     *           牛顿的迭代法公式是:x = x0-f(x0)/f'(x0),设迭代到|x-x0|<=10^-5
     *           时结束。
     * 
     * 算法分析:牛顿迭代法是计算方程近似值的常用方法,主要步骤有:
     *          1. 假定一个初始值,这里设x0=1.5
     *          2. 将初始值x0带入函数f(x0)和导函数fd(x0)
     *          3. 通过公式x = x0-f(x0)/fd(x0)计算出新的近似值x
     *          4. 判断是否符合近似值要求的标准,若不符合继续通过公式进行近似计算
     */
    public static void main(String[] args) {

        float a,b,c,d ;

        Scanner s = new Scanner(System.in) ;
        System.out.println("请输入a,b,c,d的值(请用空格隔开):");
        a = s.nextFloat() ;
        b = s.nextFloat() ;
        c = s.nextFloat() ;
        d = s.nextFloat() ;
        s.close();

        float x = 1.5F , x0 ;
        do{

            x0 = x ;
            float f = a*x0*x0*x0 + b*x0*x0 + c*x0 + d ; //计算f(x0)
            float fd = 3*a*x0*x0 + 2*b*x0 + c ;         //计算fd(x0)
            x = x0 - f/fd ;

        }while(Math.abs(x-x0)>=10e-5) ;                 //判断是否符合标准

        System.out.println(x);
    }
}

样例输出

  • 输入
2 -4 3 -6
  • 输出
2.0

猜你喜欢

转载自blog.csdn.net/u013634252/article/details/80813787