Open ustcanycall opened 10 years ago
#include <ctime> #include <iostream> #include <cstdlib> #include<math.h> using namespace std; /*MC积分函数*/ void MC(double a,double b ,double c ,double d,double (*func)(double)); /*测试函数1*/ double test1(double x); /*测试函数2*/ double test2(double x); int main() { srand(time(NULL)); MC(0,4,-1,8,test1); MC(-1,1,-1,1,test2); system("pause"); } void MC(double a,double b ,double c ,double d,double (*func)(double)) { int i,k=0,n=1000000; double x,y,f_x; for(i=0;i<n;i++) { x = a+(b-a)*(double)rand()/(double)(RAND_MAX); y = c+(d-c)*(double)rand()/(double)(RAND_MAX); f_x = func(x); if(y<f_x&&y>0) k++; if(y<0 &&y>f_x) k--; } printf("%6f\n",(double)k*36/n); } double test1(double x) { return (x*x-2*x); } double test2(double x) { return (x); }
2.2数字积分
EX3
代码部分
实验结果: