前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >蒙特卡洛法应用

蒙特卡洛法应用

作者头像
巴山学长
发布2019-07-15 16:00:51
4760
发布2019-07-15 16:00:51
举报
文章被收录于专栏:巴山学长巴山学长

在世界上最著名的赌城 —— 蒙特卡洛(摩纳哥)。有一种著名的数学方法,它通过对大量事件的统计结果来实现对确定性事件的计算,这就是蒙特卡洛法,也叫做随机模拟方法。

在《三体》中,魏成就是通过这个方法,将复杂的三体问题简化成一个数学模型,然后将繁重的公式推导转化成巨大的统计量。进而求解三体问题(当然,也失败了)。

下面,我就向大家简单介绍这个方法。

下面是全部代码,方便大家学习

1:求面积

代码语言:javascript
复制
%y1=2*sin(x)+cos(x)

clear
n=100000;   % 随机生成n个点
x=rand(1,n);
y=rand(1,n);
x=pi.*x;
y=3.*y;
y1=2*sin(x)+cos(x);
k=0;
for i=1:n
    if y1(i)>=0&&y1(i)<=2*sin(x(i))+cos(x(i))
        k=k+1;
    end
end
S=3*pi*(k/n)
%画出图像
x2=0:0.1:pi;
y2=2*sin(x2)+cos(x2);
plot(x2,y2,'r')
hold on
y3=zeros(1,length(x2));
plot(x2,y3,'-')
hold on

2.1计算最大值的m文件

代码语言:javascript
复制
function [f,g]=jisuan(x);
f=3*x(1)+4*x(2)^2+5*x(2)*x(3)+x(4)^2-x(4)*x(5);
g=[sum(x)-50
    3*x(1)+4*x(2)+x(3)+x(4)+x(5)-350
    2*x(3)+x(4)+x(5)-250
    x(1)+x(2)+x(3)+x(4)*x(5)-1000
    x(1)+x(3)*x(4)-700];

2.2计算最大值的主函数

代码语言:javascript
复制
rand('state',sum(clock));
p0=0;%假设p0为最优解
for i=1:1000000
    x=randi([0,50],1,5);
    [f,g]=jisuan(x);
    if all(g<=0)
        if p0<f
            x0=x;
            p0=f;
        end
    end
end
p0

本文作者:南海一号

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 巴山学长 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档