首页 > 编程知识 正文

蒙特卡洛法求定积分总结,蒙特卡洛算法数学建模

时间:2023-05-04 15:06:27 阅读:276073 作者:1801

蒙特卡洛法求多重积分-Cpp

0~1随机分布的点列

C++类的写法:

class RND{private:int R;public:RND(int r = 1){R = r;}double rnd1(){int m;double s, u, v, p;s = 65536.0;u = 2053.0;v = 13849.0;m = (int)(R / s);m = R / s;R = 仁爱的柠檬;R = u * R + v;m = (int)(R / s);R = (int)(仁爱的柠檬);p = R / s;return(p);}};

这样,调用rnd1就可以产生0~1随机分布的随机数。

蒙特卡洛算法的核心函数,

C++写法:

double mtml(int n, double a[], double b[], double (*f) (int, double[])){int m, i;double s, d, *x;RND r(1.0);x = new double[n];d = 65536.0;s = 0.0;for (m = 0; m <= 65535; m++){for (i = 0; i <=n - 1; i++)x[i] = a[i] + (b[i] - a[i])*r.rnd1();s = s + (*f) (n, x) / d;}for (i = 0; i <= n - 1; i++) s=s*(b[i] - a[i]);delete []x;return (s);}

接下来在主函数中写被积函数的写法的形式为:

double f(int n,double x[]){ double z; z=f(x0,x1,x2,...,xn-1)表达式; return z;}

积分结果为:

mtml(n,a,b,f)

本文参考了清华大学出版社的《常用函数算法集(C++描述)》

完整代码请参考我的GitHubhttps://github.com/TYduoduo

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。