首页 > 解决方案 > Matlab 蒙特卡罗积分循环

问题描述

我正在尝试编写使用 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 循环计算积分。谢谢

标签: matlabintegration

解决方案


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

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

推荐阅读