我正在尝试计算一个积分,其中根据我们所处的间隔不同地定义了被积分数。因此,我们有f:[-1,1] -> R
,其中f(x) = sin(pi/x)
表示x
中的[-1,0]
,而f(x) = 1/2
表示x
在[0,1]
中。
使用Maple我得到积分的值大约是I = 0.04030
。但是,在C
中我得到了I = 0.35829
的信息。这是我自己的代码:
int main(){
double x,y,S_n;
int n = 1000;
int i;
srand ( time ( NULL));
for (i = 0; i < n; i++){
x = (double)rand()/RAND_MAX*2.0-1.0; //generate double in range -1 to 1
if(x < 0){
y = sin(M_PI/x);
}
else {
y = 0.5;
}
S_n = S_n + y;
}
S_n = S_n/n;
printf ( "%f\n", S_n);
}
谁能看到为什么这段代码给了我错误的答案?
最佳答案
你必须
初始化S_n
考虑要集成的窗口的大小。
因此正确的代码是:
double x,y,S_n;
int n = 10000;
int i;
S_n = 0;
srand ( time ( NULL));
for (i = 0; i < n; i++){
x = (double)rand()/RAND_MAX*2.0-1.0; //generate double in range -1 to 1
if(x < 0){
y = sin(M_PI/x);
}
else {
y = 0.5;
}
S_n = S_n + y * (1.0 - -1.0);
}
S_n = S_n/n;
printf ( "%f\n", S_n);
关于c - 在C中评估积分时答案错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52779571/