java实现秦九韶算法解一元n次方程。

一元n次多项式可以写成如下形式

f(x)=axn+bxn-1+c*xn-2+…+z

输入双精度数组nums 来表示a-z这些常数。返回函数在x的函数值。

你可以假设次方值是依次递减的,即 n等于nums 的长度减一。

示例1:

给定 nums = [3, 2, -9, 11,1], x= 4,
计算函数   f(x)=3*x^4+2*x^3-9*x^2+11*x+1; 
由于x=4;
所以  f(4)= 3*4^4+2*4^3-9*4^2+11*4+1
返回  f(3)=709

示例2:

给定 nums = [4, 2, 3.5, -2,6,1.7,0.8], x= 5,
计算函数   f(x)=4*x^5+2*x^4+3.5*x^3-2.6*x^2+1.7*x+ 0.8  ; 
由于x=5;
所以  f(3)= 4*5^5+2*5^4+3.5*5^3-2.6*5^2+1.7*5+ 0.8
返回  f(3)=14130.2

解题

1,一般算法:

    public static double polynomial(double[] a,int x){
        double  ans=0;
        int n=a.length;
        for (int i = 0; i <n ; i++) {
            ans+=a[i]*Math.pow(x,n-1-i);
        }
        return ans;
    }

2,秦九韶算法:

算法解释参考的百度附图一张:
java实现秦九韶算法解一元n次方程。_第1张图片
举例说明:
java实现秦九韶算法解一元n次方程。_第2张图片

代码实现:

    public static double qingJiusSao(double[] a,int x){
        //由内向外逐层计算一次多项式的值
        double  ans=a[0];
        for(int i = 1;i <a.length;i ++){
            ans= ans*x +a[i];
        }
        return ans;
    }

你可能感兴趣的:(算法学习,算法)