C++ C++;循环函数加法的积分逼近

C++ C++;循环函数加法的积分逼近,c++,C++,请容忍我,因为我是新的编码。我试图用C++来从0到1逼近积分4/(1+x ^ 2)。我必须使用以下公式: P=1/n[从i到n-1之和:f(x)],x=(i+0.5)/n,i等于0,1,2,3。。。。n-1。 具体来说,我正在努力编写代码的一部分,为x和I的每个值添加f(x)。这可以在代码底部的for循环中看到。我一直在计算0的值,但这个积分应该是pi的近似值。先谢谢你。下面是我的代码 // Definite Integral using Quadrature Method // As N in

请容忍我,因为我是新的编码。我试图用C++来从0到1逼近积分4/(1+x ^ 2)。我必须使用以下公式: P=1/n[从i到n-1之和:f(x)],x=(i+0.5)/n,i等于0,1,2,3。。。。n-1。 具体来说,我正在努力编写代码的一部分,为x和I的每个值添加f(x)。这可以在代码底部的for循环中看到。我一直在计算0的值,但这个积分应该是pi的近似值。先谢谢你。下面是我的代码

// Definite Integral using Quadrature Method
// As N increases, P approaches pi.
#include<iostream>
#include<cmath>
#include <iomanip>
#include <cstdlib>
#include <time.h>


using namespace std;
double func(double x)        
{
double func = 4 /(1+x*x); // define function func = 4 / (1 +x^2) to be integrated
return func;
}

int main(int argc, char **argv) {
if (argc < 2) {
std::cout << argv[0] << "n";
return 0;
}

int n = std::atoi(argv[1]);  // n is number of subintervals
std::cout << "n=" << n << std::endl;
std::cout << std::setprecision(16);


// P = (1/n)*[sum func((i+0.5)/n] with i = 0,1,2,3,... N-1 
int i;
double s, x;
for ( i=0; i<=(n-1); i++)          
{                
  x = (i + 0.5) / n;
  s = func(x);
  x += x;
  s += s;
     
 }


 double P = (1/n)*s;
  cout<< P;
  return 0;
  }
//用求积法求定积分
//随着N的增加,P接近pi。
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
双功能(双x)
{
double func=4/(1+x*x);//定义要集成的函数func=4/(1+x^2)
返回函数;
}
int main(int argc,字符**argv){
如果(argc<2){

std::cout您的代码中有两个问题。在计算总和的循环中,您没有初始化
s
。此外,您在每次迭代时都将
s
重置为不同的值,因此总和添加不正确

您可以这样编写循环:

double s = 0;
for ( i=0; i<=(n-1); i++)          
{             
  double x = (i + 0.5) / n;
  s += func(x);     
}

这里有一个。

1/n
:整数除法,等于0。此外,总和没有初始化
double P = s/n;