高中数学:数列

来源:互联网 发布:怎么和淘宝卖家聊天 编辑:程序博客网 时间:2024/05/17 06:59

需求分析:

数列知识列表
概要设计:

详细设计:

数列-继承

编码及单元测试:

数列:

package sequence;public abstract class Sequence {/** * 返回数列第n项 */protected abstract double getAn(int n);/** * 计算数列前n项和 */public double getSum(int n) {            double sum=0.0;            for(int i=1;i<n;i++)                sum+=getAn(i);            return sum;}}

等差数列:

package sequence;public class ArithmeticSequence extends Sequence {// 首项private double a1 = 0;// 公差private double d = 0;public ArithmeticSequence(double a1, double d) {this.a1=a1;        this.d=d;}public ArithmeticSequence(double am, int m, double an, int n) throws Exception {if(m==n)throw new Exception("两项应为不同项");else{            d=(an-am)/(n-m);            a1=an+(1-n)*d;}}/** * 计算数列前n项和 */@Overridepublic double getSum(int n) {            return n*a1+n*(n-1)*d/2;}/** * 返回数列第n项 */@Overridepublic double getAn(int n) {return a1+(n-1)*d;}}

等比数列:

package sequence;public class GeometricSquence extends Sequence {//精度设置public static double PRECISION=0.0000001;//首项private double a1=1;//公比private double q=1;public GeometricSquence(double a1, double q) throws Exception {            if(Math.abs(q-0)>PRECISION){                 this.a1=a1;                 this.q=q;            }else                throw new Exception("公比不能为0");}public GeometricSquence(double am, int m, double an, int n) throws Exception {if(m==n)throw new Exception("两项应为不同项");else{            q=Math.pow(an/am, 1/(n-m));            if(Math.abs(q-0)>PRECISION){             a1=an*Math.pow(q, 1-n);            } else             throw new Exception("公比不能为0");}}@Overridepublic double getSum(int n) {            if(q-1>PRECISION)                return a1*(1-Math.pow(q, n))/(1-q);            else                 return a1*n;}@Overridepublic double getAn(int n) {return a1*Math.pow(q, n-1);}}

斐波拉契数列:

package sequence;public class FibonacciSequence extends Sequence {// 第一项private double a1;// 第二项private double a2;public FibonacciSequence(double a1, double a2) {this.a1=a1;this.a2=a2;}public double getAn(int n) {switch(n){case 1:return a1;case 2:return a2;default:return getAn(n-1)+getAn(n-2);}}public double getSum(int n) {if(n==1)return a1;elsereturn getSum(n-1)+getAn(n);}}

平方根估算数列:

package sequence;public class SqrtSequence extends Sequence {private double radicand=0.0;//被开方数public SqrtSequence(double radicand) {this.radicand=radicand;}@Overridepublic double getAn(int n) {double precision=1.0;for(int i=0;i<n;i++)precision/=10;double root=0.0;for(double d=1.0;d>=precision;d/=10)                  for(;Math.pow(root+d, 2)<=radicand;root+=d);return root;}@Overridepublic double getSum(int n) {throw new UnsupportedOperationException();}}
平方根估算
0 0
原创粉丝点击