蒙特卡洛法应用

2019-07-15 16:00:51 浏览数 (1)

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

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

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

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

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

本文作者:南海一号

0 人点赞