形如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爲行數。