蒙特卡洛法应用

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

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

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

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

1:求面积

%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文件

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计算最大值的主函数

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

本文作者:南海一号

本文分享自微信公众号 - matlab爱好者(matlabaihaozhe)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券