科技: 人物 企业 技术 IT业 TMT
科普: 自然 科学 科幻 宇宙 科学家
通信: 历史 技术 手机 词典 3G馆
索引: 分类 推荐 专题 热点 排行榜
互联网: 广告 营销 政务 游戏 google
新媒体: 社交 博客 学者 人物 传播学
新思想: 网站 新书 新知 新词 思想家
图书馆: 文化 商业 管理 经济 期刊
网络文化: 社会 红人 黑客 治理 亚文化
创业百科: VC 词典 指南 案例 创业史
前沿科技: 清洁 绿色 纳米 生物 环保
知识产权: 盗版 共享 学人 法规 著作
用户名: 密码: 注册 忘记密码?
    创建新词条
科技百科
  • 人气指数: 1901 次
  • 编辑次数: 1 次 历史版本
  • 更新时间: 2009-03-18
admin
admin
发短消息
相关词条
数学
数学
数论
数论
工业设计
工业设计
智慧产业
智慧产业
符号位
符号位
算法设计与分析
算法设计与分析
银行家算法
银行家算法
比例计算法
比例计算法
关键路径
关键路径
先来先服务
先来先服务
推荐词条
希拉里二度竞选
希拉里二度竞选
《互联网百科系列》
《互联网百科系列》
《黑客百科》
《黑客百科》
《网络舆情百科》
《网络舆情百科》
《网络治理百科》
《网络治理百科》
《硅谷百科》
《硅谷百科》
2017年特斯拉
2017年特斯拉
MIT黑客全纪录
MIT黑客全纪录
桑达尔·皮查伊
桑达尔·皮查伊
阿里双十一成交额
阿里双十一成交额
最新词条

热门标签

微博侠 数字营销2011年度总结 政务微博元年 2011微博十大事件 美国十大创业孵化器 盘点美国导师型创业孵化器 盘点导师型创业孵化器 TechStars 智能电视大战前夜 竞争型国企 公益型国企 2011央视经济年度人物 Rhianna Pratchett 莱恩娜·普莱契 Zynga与Facebook关系 Zynga盈利危机 2010年手机社交游戏行业分析报告 游戏奖励 主流手机游戏公司运营表现 主流手机游戏公司运营对比数据 创建游戏原型 正反馈现象 易用性设计增强游戏体验 易用性设计 《The Sims Social》社交亮 心理生理学与游戏 Kixeye Storm8 Storm8公司 女性玩家营销策略 休闲游戏的创新性 游戏运营的数据分析 社交游戏分析学常见术语 游戏运营数据解析 iPad风行美国校园 iPad终结传统教科书 游戏平衡性 成长类型及情感元素 鸿蒙国际 云骗钱 2011年政务微博报告 《2011年政务微博报告》 方正产业图谱 方正改制考 通信企业属公益型国企 善用玩家作弊行为 手机游戏传播 每用户平均收入 ARPU值 ARPU 游戏授权三面观 游戏设计所运用的化学原理 iOS应用人性化界面设计原则 硬核游戏 硬核社交游戏 生物测量法研究玩家 全球移动用户 用户研究三部曲 Tagged转型故事 Tagged Instagram火爆的3大原因 全球第四大社交网络Badoo Badoo 2011年最迅猛的20大创业公司 病毒式传播功能支持的游戏设计 病毒式传播功能 美国社交游戏虚拟商品收益 Flipboard改变阅读 盘点10大最难iPhone游戏 移动应用设计7大主流趋势 成功的设计文件十个要点 游戏设计文件 应用内置付费功能 内置付费功能 IAP功能 IAP IAP模式 游戏易用性测试 生理心理游戏评估 游戏化游戏 全美社交游戏规模 美国社交游戏市场 全球平板电脑出货量 Facebook虚拟商品收益 Facebook全球广告营收 Facebook广告营收 失败游戏设计的数宗罪名 休闲游戏设计要点 玩游戏可提高认知能力 玩游戏与认知能力 全球游戏广告 独立开发者提高工作效率的100个要点 Facebook亚洲用户 免费游戏的10种创收模式 人类大脑可下载 2012年最值得期待的20位硅谷企业家 做空中概股的幕后黑手 做空中概股幕后黑手 苹果2013营收 Playfish社交游戏架构

蒙特卡罗算法 发表评论(0) 编辑词条

目录

概述编辑本段回目录

概率统计的理论、方法为基础的一种计算方法,将所求解的问题同一定的概率模型相联系,用电子计算机实现统计模拟抽样,以获得问题的近似解,故又称统计模拟法统计试验法
蒙特卡罗摩纳哥的一个城市,以赌博闻名于世界。蒙特卡罗法借用这一城市的名称是为了象征性地表明该方法的概率统计的特点。
蒙特卡罗法作为一种计算方法,是由S.M.乌拉姆J.冯·诺伊曼在20世纪40年代中叶为研制核武器的需要而首先提出来的。在此之前,该方法的基本思想实际上早已被统计学家所采用了。例如,早在17世纪,人们就知道了依频数来决定概率的方法。
20世纪40年代中叶,出现了电子计算机,使得用数学方法模拟大量的试验成为可能。另外,随着科学技术的不断发展,出现了越来越多的复杂而困难的问题,用通常的解析方法数值方法都很难加以解决。蒙特卡罗法就是在这些情况下,作为一种可行的而且是不可缺少的计算方法被提出和迅速发展起来的。

应用领域编辑本段回目录

蒙特卡罗方法有很强的适应性,问题的几何形状的复杂性对它的影响不大。该方法的收敛性是指概率意义下的收敛,因此问题维数的增加不会影响它的收敛速度,而且存贮单元也很省,这些是用该方法处理大型复杂问题时的优势。因此,随着电子计算机的发展和科学技术问题的日趋复杂,蒙特卡罗方法的应用也越来越广泛。它不仅较好地解决了多重积分计算、微分方程求解、积分方程求解、特征值计算和非线性方程组求解等高难度和复杂的数学计算问题,而且在统计物理核物理真空技术系统科学信息科学公用事业地质医学可靠性及计算机科学等广泛的领域都得到成功的应用。

应用程序---Monte Carlo法( 蒙特卡罗)积分编辑本段回目录

 
C源代码:
#include<iostream.h>
#include<time.h>
/* srand(),rand() */
#include<math.h>
/* sin() */
#include<stdlib.h>
/* RAND_MAX */

using namespace std ;

double FuncOne(double x);
/*被积一元函数*/
double MonteCarloOne(double(*p)(double),double a,double b,double L,double H);
/*一元函数积分调用接口*/
double FuncTwo(double x,double y);
/*被积二元函数*/
double Func1(double x);
/* 积分下限y=Func1(x) */
double Func2(double x);
/* 积分上限y=Func2(x) */
double MonteCarloTwo(double(*func1)(double),double(*func2)(double),double(*p)(double,double),double a,double b,double l,double h,double L,double H);
/*二元函数积分调用接口.在a
double FuncThree(double x,double y,double z);
/*被积分三元函数*/
double Func3(double x,double y);
/* 积分下限z=Func3(x,y) */
double Func4(double x,double y);
/* 积分上限z=Func4(x,y) */
double MonteCarloThree(double(*func1)(double),double(*func2)(double),double(*func3)(double,double),double(*func4)(double,double),double(*p)(double,double,double),double a,double b,double c,double d,double l,double h,double L,double H);
/*三元函数积分调用接口.在a

double FuncOne(double x)
{
    return sin(x);
}

double MonteCarloOne(double(*p)(double),double a,double b,double L,double H)
{
    unsigned N=100000000 ;
    /* 1e8 */
    double x,y ;
    /*随机点*/
    double t ;
    /*换元*/
    unsigned M=0 ;
    /*处于阴影部分内的点的个数*/
    srand((unsigned)time(NULL));
    /*产生随机数种子*/
    for(unsigned int i=0;i
    {
        t=double(rand())/RAND_MAX ;
        /* 产生0~1的随机浮点数 */
        y=double(rand())/RAND_MAX ;
        x=a+(b-a)*t ;
        /* 得到a~b的随机浮点数 */
        /*随机点处于阴影部分内*/
        if(y*(H-L)<(p(x)-L))M++;
    }
    double result=(H-L)*(b-a)*M/N+(b-a)*L ;
    /* double型乘以unsigned型为double型 */
    return result ;
    /*积分结果*/
}

double FuncTwo(double x,double y)
{
    return x+y ;
}

double Func1(double x)
{
    return x ;
}

double Func2(double x)
{
    return x*x ;
}

double MonteCarloTwo(double(*func1)(double),double(*func2)(double),double(*p)(double,double),double a,double b,double l,double h,double L,double H)
{
    unsigned N=100000000 ;
    /* 1e8 */
    double x,y,z ;
    /*随机点*/
    double t,s ;
    /*换元*/
    unsigned m=0,M=0 ;
    /*处于阴影部分内的点的个数*/
    srand((unsigned)time(NULL));
    /*产生随机数种子*/
    for(unsigned int i=0;i
    {
        t=double(rand())/RAND_MAX ;
        /* 产生0~1的随机浮点数 */
        s=double(rand())/RAND_MAX ;
        x=a+(b-a)*t ;
        /* 得到a~b的随机浮点数 */
        y=l+(h-l)*s ;
        /* 得到l~h的随机浮点数 */
        if(y>func1(x)&&y
        {
            m++;
            /* 注意,m是与一元积分相对应的 */
            z=double(rand())/RAND_MAX ;
            /*随机点处于阴影部分内*/
            if(z*(H-L)<(p(x,y)-L))M++;
        }
    }
    double result=(H-L)*(b-a)*(h-l)*M/N+(b-a)*(h-l)*L*m/N ;
    /* double型乘以unsigned型为double型 */
    return result ;
}

double FuncThree(double x,double y,double z)
{
    return x+y+z ;
}

double Func3(double x,double y)
{
    return 0 ;
}

double Func4(double x,double y)
{
    return FuncTwo(x,y);
}

double MonteCarloThree(double(*func1)(double),double(*func2)(double),double(*func3)(double,double),double(*func4)(double,double),double(*p)(double,double,double),double a,double b,double c,double d,double l,double h,double L,double H)
{
    unsigned N=100000000 ;
    /* 1e8 */
    double x,y,z,u ;
    /*随机点*/
    double t,s,k ;
    /*换元*/
    unsigned m=0,M=0 ;
    /*处于阴影部分内的点的个数*/
    srand((unsigned)time(NULL));
    /*产生随机数种子*/
    for(unsigned int i=0;i
    {
        t=double(rand())/RAND_MAX ;
        /* 产生0~1的随机浮点数 */
        s=double(rand())/RAND_MAX ;
        k=double(rand())/RAND_MAX ;
        x=a+(b-a)*t ;
        /* 得到a~b的随机浮点数 */
        y=c+(d-c)*s ;
        /* 得到c~d的随机浮点数 */
        if(y>func1(x)&&y
        {
            k=double(rand())/RAND_MAX ;
            z=l+(h-l)*k ;
            /* 得到l~h的随机浮点数 */
            /*随机点处于阴影部分内*/
            if(z>func3(x,y)&&z
            {
                m++;
                /* 注意,m是与二元积分对应的 */
                u=double(rand())/RAND_MAX ;
                if(u*(H-L)<(p(x,y,z)-L))
                M++;
            }
        }
    }
    double result=(H-L)*(b-a)*(d-c)*(h-l)*M/N+(b-a)*(d-c)*(h-l)*L*m/N ;
    /* double型乘以unsigned型为double型 */
    return result ;
}

int main()
{
    double a,b ;
    /* x积分限 */
    double l,h ;
    /* y的值域或y积分限 */
    double result ;
    /*积分结果*/
   
    a=0,b=3.1415926 ;
    l=0,h=1 ;
    result=MonteCarloOne(FuncOne,a,b,l,h);
    cout<<<"N" ;
   
    a=1.0,b=2.0 ;
    l=1.0,h=4.0 ;
    double L=2.0,H=6.0 ;
    /* z的值域 */
    result=MonteCarloTwo(Func1,Func2,FuncTwo,a,b,l,h,L,H);
    cout<<<"N" ;
   
    a=1.0,b=2.0 ;
    double c=1.0,d=4.0 ;
    l=0.0,h=6.0 ;
    L=2.0,H=12.0 ;
    result=MonteCarloThree(Func1,Func2,Func3,Func4,FuncThree,a,b,c,d,l,h,L,H);
    cout<<<"N" ;
   
    return 0 ;
}

 
  运行结果:
  2.00011
  3.35045
  20.994
  准确值分别为:
  2
  3.35
  20.9964286

→如果您认为本词条还有待完善,请 编辑词条

词条内容仅供参考,如果您需要解决具体问题
(尤其在法律、医学等领域),建议您咨询相关领域专业人士。
0

标签: 蒙特卡罗算法

收藏到: Favorites  

同义词: 暂无同义词

关于本词条的评论 (共0条)发表评论>>

对词条发表评论

评论长度最大为200个字符。