求个c++编程 用蒙特卡洛法算积分 跪求一大神帮忙 跪求

如题所述

第1个回答  2011-06-15
随便写了下,也没怎么检查,大致算法就是这样。你可以参考参考。

#include <iostream>
#include <ctime>
#include <cmath>
using namespace std;

const double PI = acos(-1);
const int MAXR = 999;
double interval[MAXR+10];
int n;
const double a = 0;
const double b = PI/2;

double func(double x)
{
return 4/(3*sqrt(1-sin(PI/12)*sin(PI/12)*sin(x)*sin(x)));
}

void genRandomInterval(double a,double b)
{
srand( (unsigned)time( NULL ) );
n=rand()%MAXR;
if(n%2==0)n++;
interval[0]=a;
interval[n+1]=b;
for(int i=1;i<=n;i++)
interval[i]=a+(b-a)*(i+0.5)/n;
}

double integral()
{
double ret=0;
genRandomInterval(a,b);
for(int i=1;i<=n;i++)
ret+=func(interval[i])*(interval[i+1]-interval[i-1]);
return ret;
}

int main()
{
int m;
cout<<"Please input the experiment time: ";
cin>>m;
cout<<"Processing "<<m<<" experiments and output the average value."<<endl;
double ans=0;
for(int i=0;i<m;i++)
ans+=integral();
ans/=m;
cout<<"The average value is "<<ans<<endl;
system("pause");
}本回答被网友采纳

C++ 编程 利用蒙特卡罗模拟方法,得到sinα在积分区间0到pi的近似结果...
\/\/Count of hit points. double totalArea = (double)M_PI * 1.0L; double resultArea; srand((unsigned int)time(NULL));\/\/Initial random seed. do { cout<<"Input try times(0 to exit):"; cin>>N;

曲线长度怎么计算
曲线长度的计算方法如下:1、我们需要知道曲线的坐标。例如,我们可以使用极坐标系来描述曲线,其中每个点都有一个角度和半径。我们可以使用函数来描述这些坐标,例如r=ftheta。我们需要计算曲线上的每个小段长度。这可以通过微积分的方法来实现。2、我们将曲线的坐标代入函数中,然后计算函数在两个相邻点...

图计算引擎Neo4j和Graphscope有什么区别?
Neo4j是单机系统,主要做图数据库。GraphScope是由阿里巴巴达摩院智能计算实验室研发的图计算平台,是全球首个一站式超大规模分布式图计算平台,并且还入选了中 国科学技术协会“科创中 国”平台。Graphscope的代码在github.com\/alibaba\/graphscope上开源。SSSP算法上,GraphScope单机模式下平均要比Neo4j快176.38...

相似回答