1. 程式人生 > >Java練習: 數列/級數求和

Java練習: 數列/級數求和

級數通常指無窮級數,而有窮級數通常稱為數列。數列/級數求和或求近似值是常見的迴圈程式設計練習。

下面將給出一些題目。

1.調和數

調和級數Harmonic numbers,H(n)= 1/1 + 1/2 + 1/3 + 1/4 + ... + 1/n。求調和級數前n項的和

    /**
     * 調和級數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(10) =2.9289682539682538

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項的立方數的代數和統一。
    /**  
     * 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;            
    }
 pln("pi="+8*pi(1,5000)) 輸出 pi=3.14119265360579 請設計大統一的、通用函式,參考 4.3.3 累積函式