Java练习: 数列/级数求和

来源:互联网 发布:交换机镜像端口抓包 编辑:程序博客网 时间:2024/06/06 17:34

返回 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 =0;//近似值、x的幂、n!        int itemIndex = 1;        do{            xn *= x;//            f *= itemIndex;// n!            item = xn/f;pln(item);            itemIndex++;            sum += item;        }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

请设计大统一的、通用函数。



0 0