Matlab 蒙特卡罗积分循环

Posted

技术标签:

【中文标题】Matlab 蒙特卡罗积分循环【英文标题】:Matlab monte carlo integration for loop 【发布时间】:2021-04-20 08:01:21 【问题描述】:

我正在尝试编写使用 MATLAB 中的蒙特卡洛方法计算积分的函数。我对 MATLAB 不够熟悉,无法理解为什么每次都会遇到不同的集成问题。这是我的代码:

f=@(x)exp(-(x-3).^2);
N = 1000; %random samples 
a = 0; % lower bound 
b = 3; %upper bound

x2=linspace(0,3,1000);
syms z % zero vector holder to find max y value
z = zeros(size(x2));
z = f(x2);
y = f(b).*rand(1,1000);
x = a +(b-a)*rand(1,N);
count = 0;
for k=1:numel(x);
    %produce random x coordinate 
    if y(k) <= f(x);
        count= count +1;
    end
end
count;
i = (b-a)/N*sum(f(x));

当我运行它时,i 值每次都会改变,但我希望使用 for 循环计算积分。谢谢

【问题讨论】:

我无法运行代码,因为我没有符号工具箱。然而,首先想到的是蒙特卡洛方法本质上是随机的——每次你的输出有多大不同?如果把N增加到10000,再跑几次,是不是更一致一点? 【参考方案1】:

你最后的 i 计算是错误的,应该是这样的

count/numel(x) * max(z) * (b-a)

【讨论】:

以上是关于Matlab 蒙特卡罗积分循环的主要内容,如果未能解决你的问题,请参考以下文章

Markov Chain蒙特卡洛积分和无限while循环

曲线下面积的蒙特卡罗积分

C语言求解定积分(蒙特卡罗方法)

初识蒙特卡罗算法

蒙特卡洛方法

蒙特卡洛方法