2016-12-05 163 views
-4

我很难找到一个算法或理解这个问题说实话。 我在网上搜索过,但没有找到答案。 问题说: 编写一个方法来计算名为SpecialSeries的类中的系列总和。 该方法的签名是:计算系列的总和

public static double sumOfSeries(double x, int numTerms) 

This is the Question

+4

到目前为止你做了什么? – Sedrick

+0

嗯,这不完全是一个合适的SO问题。但是,如果您想检查一下,我确实发现了这一点,希望它能将您推向正确的方向:https://github.com/java-tester-x/javaexercises/blob/master/difficult/SpecialSeries.java – Cody

+3

The开始的最佳地点将是手工完成一些。我建议先从X的值开始,然后手工完成这个系列,这可能会给你提示如何解决这个问题。 – Eabryt

回答

0

我觉得这个代码就足以计算您的意甲:

public static double sumOfSeries(double x, int numTerms){ 
    double result = 0; 
    if(x<=1 && x>=-1){ 
     double startval=3; 
     for(int i=0; i<numTerms-1;i++){      
     result+= (double)(oddevenfact(startval-2)/oddevenfact(startval-1))*(Math.pow(x, startval)/startval); 
     startval+=2; 
     } 
     if(numTerms!=0) result+=x; 
    } 
    return result; 
} 

static double oddevenfact(double x){ 
    if (x>2) return(oddevenfact(x-2) * (long) x); 
    return((double) x); 
} 
0
public class SpecialSeries { 
    public static double SumOfSeries(double x, int numTerms) { 
     if (numTerms == 1) { 
      return x; 
     } 
     int maxOdd = numTerms * 2 - 1; 
     int maxEven = numTerms * 2 - 2; 
     double powerTerm = Math.pow(x, maxOdd)/maxOdd; 
     int numerator = 1; 
     for (int numMult = maxOdd - 2; numMult > 2; numMult -= 2) { 
      numerator *= numMult; 
     } 
     int denominator = 2; 
     for (int numMult = maxEven; numMult > 2; numMult -= 2) { 
      denominator *= numMult; 
     } 
     return powerTerm * numerator/denominator + sumOfSeries(x, numTerms - 1); 
    } 

    public static void main(String[] args) { 
     try { 
      int numTerms = Integer.parseInt(args[0]); 
      double x = Double.parseDouble(args[1]); 
      System.out.println(sumOfSeries(x, numTerms)); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

} 
0
  1. 数学的东西

首先让检查你的系列: the special series as sum of terms 那么如下的系列可以表示为: enter image description here 有: enter image description here

现在

,我们可以做更多的数学简化,或继续用于执行力度

  • 爪哇implimenttion

    public class SpecialSeries { 
    
        public static double sumOfSeries(double x, int numTerms){ 
         double sum = x; 
         //System.out.println("u["+0+"] = "+x); 
         for (int k = 1; k < numTerms; k++) { 
          double uk = Math.pow(x,2*k+1)/(double)(2*k+1); 
          for (int i = 2*k-1; i >0; i-=2) { 
           uk *= i/(double)(i+1); 
          } 
          //System.out.println("u["+k+"] = "+uk); 
          sum += uk; 
         }   
         return sum; 
        } 
    
        public static void main(String[] args) { 
         System.out.println(sumOfSeries(1, 5)); 
        } 
    }