700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 建模:蒙特卡洛法求多重积分

建模:蒙特卡洛法求多重积分

时间:2022-06-06 00:01:37

相关推荐

建模:蒙特卡洛法求多重积分

蒙特卡洛法求多重积分-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 - m * s;R = u * R + v;m = (int)(R / s);R = (int)(R - m * s);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++描述)》

完整代码请参考我的GitHub/TYduoduo

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。