辛普森&x27;s二重积分赢得';我不能用java工作
所以我必须为辛普森二重积分写一个算法,这样我才能更快地找到答案。我有一个指南,说明了编写这个程序的步骤。在遵循本指南并在netbeans中运行它之后,我发现程序中给出的值与实际答案并不接近。这是我用java编写的代码:辛普森&x27;s二重积分赢得';我不能用java工作,java,netbeans,integral,numerical-analysis,simpsons-rule,Java,Netbeans,Integral,Numerical Analysis,Simpsons Rule,所以我必须为辛普森二重积分写一个算法,这样我才能更快地找到答案。我有一个指南,说明了编写这个程序的步骤。在遵循本指南并在netbeans中运行它之后,我发现程序中给出的值与实际答案并不接近。这是我用java编写的代码: //INPUT double a = 0,b = 1; // Endpoints int m = 8,n = 4; double K1 = 0, K2 = 0, K3 = 0; //OUPUT
//INPUT
double a = 0,b = 1; // Endpoints
int m = 8,n = 4;
double K1 = 0, K2 = 0, K3 = 0;
//OUPUT
//Step 1
double h = (b - a) / n;
double j1 = 0; //End terms
double j2 = 0; //Even terms
double j3 = 0; //Odd terms
//Step 2
for(int i = 0; i <= n; i++){
//Step 3
double x = a + (i * h);
double hX = (d(x) - c(x)) / m;
K1 = f(x, c(x)) + f(x, d(x)); // End terms
//Step 4
for (int j = 1; j < (m-1); j++){
//Step 5
double y = c(x) + (j * hX);
double q = f(x,y);
//Step 6
if (j % 2 == 0){
K2 = K2 + q;
}
else
K3 = K3 + q;
}
//Step 7
double l = (K1 + (2*K2) + (4*K3)) * (hX / 3);
//Step 8
if (i == 0 || i == n)
j1 = j1 + l;
else if (i % 2 == 0)
j2 = j2 + l;
else
j3 = j3 + l;
}
double j = h * (j1 + (2 * j2) + (4 * j3)) / 3;
System.out.println("j = " + j);
}
public static double c(double x){
return x;
}
public static double d(double x){
return 2 * x;
}
public static double f(double x, double y){
return (Math.pow(y, 2) + Math.pow(x, 3));
}
//输入
双a=0,b=1;//端点
int m=8,n=4;
双K1=0,K2=0,K3=0;
//输出
//第一步
双h=(b-a)/n;
双j1=0//终止条款
双j2=0//偶数条件
双j3=0//奇数项
//步骤2
对于(int i=0;i我没有检查数学,较大的错误似乎表明所实现的算法中存在错误。对于边界是可疑的。并且存在浮点错误
与其将分数乘以运行索引(这将乘以分数中的浮点近似误差),不如:
相反:
double h = (b - a) / n;
for (int i = 0; i <= n; i++) {
double x = a + (i * h);
double h=(b-a)/n;
对于(int i=0;i我没有检查数学,较大的错误似乎表明所实现的算法中存在错误。对于边界是可疑的。并且存在浮点错误
与其将分数乘以运行索引(这将乘以分数中的浮点近似误差),不如:
相反:
double h = (b - a) / n;
for (int i = 0; i <= n; i++) {
double x = a + (i * h);
double h=(b-a)/n;
对于(int i=0;你试过调试你的代码吗?@Stultuske是的,我试过,但我不知道为什么它做得不正确步骤4下面的for循环应该是,你试过调试你的代码吗?@Stultuske是的,我试过,但我不知道为什么它做得不正确步骤4下面的for循环sho在尝试了你的建议解决方案后,我运行代码时仍然得到相同的结果。在尝试了你的建议解决方案后,我运行代码时仍然得到相同的结果。
for (int i = 0; i <= n; i++) {
double x = a + i * (b - a) / (n + 1);