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 蒙特卡罗积分循环的主要内容,如果未能解决你的问题,请参考以下文章