求一元和二元多項式結果

形如f(x)= a0+a1x+a2x+…+an-1x+anx,爲一元多項式,當給定x後,求f(x)。係數矩陣爲一維數組array[] ={a0,a1,a2,a3········,an}(順序一定)
傳統方式,先寫一個x的n次冪的函數,然後主義與係數相乘,求和。代碼如下:

    //求x的N次冪
    private static double power(double x,int times){
        while(times>0){
            x*=x;
            times--;
        }
        return x;
    }

    //求一元多項式結果
    public double polynomial_1(double x,int index,double[] coefficient){//參數分別是,x的值,項數,係數矩陣
        //這是傳統寫法
        double sum=0;
        for(int i=index-1;i>=0;i--){
            sum+=coefficient[i]*power(x, i);
        }
        return sum;
    }

下面這種更爲優秀,首先需要對原式進行變形:
這裏寫圖片描述

    public double polynomial_1(double x,int index,double[] coefficient){    
        //改進版
        double sum=coefficient[index-1];//首先需要先獲取第一個係數an-1.
        for(int i=index-2;i>=0;i--){
            sum=sum*x+coefficient[i];//每次求出的sum,都是下一次的係數
        }
        return sum;

    }

這個從代碼量和結構上都比第一個優秀。

二元多項式和一元基本一樣,只是係數矩陣變成二維數組,行爲x,列爲y,
假設f(y)是一個一元多項式(m項),那麼:
f(x,y)=x^0*f(y)1+x^1*f(y)2+x^2*f(y)3+····+x^n-1*f(y)n.所以可以看成一個一元多項式乘上x:

    public static double polynomial_2(double x,double y,int n,int m,double[][] coefficient){//參數分別是x,y的值,係數矩陣的行和列,係數矩陣
        //以x從0到n排序
        double sum_y;//記錄y多項式的和
        double times_x=1.00;//x的n次冪,初始化爲x^0=1
        double sum_x=0;//記錄x多項式的和,這個要依賴sum_y
        for(int i=0;i<n;i++){//對x
            sum_y=coefficient[i][m-1];//每次取每一行的最後一個係數,
            for(int j=m-2;j>=0;j--){//對y,計算第i行的y多項式結果
                sum_y=sum_y*y+coefficient[i][j];
            }
            sum_x+=sum_y*times_x;//y多多項式結果乘上x
            times_x*=x;//每循環一次x的次數就升高
        }
        return sum_x;       
    }

只要理解了二維矩陣裏每一行代表的是對應的x^k的y的多項式係數,k爲行數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章