我正在尝试计算一个积分,其中根据我们所处的间隔不同地定义了被积分数。因此,我们有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/

10-13 03:34