我正在尝试编写一个Integrate类,它将使用Trapezoidal规则为我提供函数的积分。出于某种原因,代码我从未解析为值并且仍然停留在“sum + =”步骤中:
public static double Trap(int exponent, int a, int b, int n) {
double h = (double) (b-a)/n;
double sum = 0;
for(int i = a; i <= b; i+=h)
sum += (Math.pow(i, exponent) + Math.pow(i+1, exponent))/2; //trouble!
return h * sum;
}
public static void main(String[] args) {
System.out.println(Trap(3,1,3,10)); //integral of x^3 from 1 to 3,
divided into 10 parts
}
答案 0 :(得分:4)
你将i声明为int,所以当你向它添加一个double(1/3)时,它会向下舍入并保持相同的值。
将我变为双人。
事实上,你应该把所有东西都变成双倍。
答案 1 :(得分:1)
您的代码在类型转换方面存在问题,特别是在循环增量表达式i + = h。
上在你的情况下,如果h是值为0.2的double,并且i是整数,则0.2将被转换为0。
为了说明这一点,请尝试运行以下代码示例:
public static void main(String[] args) {
int i = 1;
i += 0.2;
System.out.println(i); // will always output 1
}