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 累积函数。



你可能感兴趣的:(《编程导论(Java)》训&练)