Java練習: 數列/級數求和
阿新 • • 發佈:2018-12-31
級數通常指無窮級數,而有窮級數通常稱為數列。數列/級數求和或求近似值是常見的迴圈程式設計練習。
下面將給出一些題目。
1.調和數
調和級數Harmonic numbers,H(n)= 1/1 + 1/2 + 1/3 + 1/4 + ... + 1/n。求調和級數前n項的和
harmonic(10) =2.9289682539682538/** * 調和級數Harmonic numbers, * H(n)= 1/1 + 1/2 + 1/3 + 1/4 + ... + 1/n */ public static double harmonic (int n) { double sum = 0.0; for (int i = 1; i <= n; i++) { sum += 1.0 / i; } return sum; }
harmonic(50000) =11.397003949278504
2.e的冪
ex= 1+ x/1! + x**2 / 2! + x**3 / 3!+...,求e(double x)。雖然可以求ex如e1、e0.5等,引數x我們這裡不關心。我們關心的是迴圈結束的條件,比如計算精確到10-6。
public static double e(double x) { double sum = 0.0, xn = 1, f = 1, item = 1;//近似值、x的冪、n!、項 int itemIndex = 1; do { sum += item; xn *= x;// f *= itemIndex;// n! item = xn / f; itemIndex++; } while (item > 1E-6); return sum; }
3.求Pi
pi/8 = 1/(1*3)+1/(5*7)+1/(9*11)+...,求pi/8的a到b項的和。為什麼不是前n項的和?因為要和sum_integers求a到b項的代數和,sum_cubes求a到b項的立方數的代數和統一。pln("pi="+8*pi(1,5000)) 輸出 pi=3.14119265360579 請設計大統一的、通用函式,參考 4.3.3 累積函式。/** * the sum of a sequence of terms in the series 1/(1*3)+1/(5*7)+1/(9*11)+... */ public static double item(int x){ return 1.0/(x*(x+2)); } public static double pi(int a,int b){ double sum=0; for(int i =a;i<=b;i+=4){ sum+=item(i); } return sum; }