Matlab monte carlo 循环集成
Matlab monte carlo integration for loop
我正在尝试使用 MATLAB 中的 Monte Carlo 方法编写计算积分的函数。我对 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 循环计算积分。谢谢
你最后i的计算是错误的,应该是
count/numel(x) * max(z) * (b-a)
我正在尝试使用 MATLAB 中的 Monte Carlo 方法编写计算积分的函数。我对 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 循环计算积分。谢谢
你最后i的计算是错误的,应该是
count/numel(x) * max(z) * (b-a)