我需要编写将使用蒙特卡罗在R ^ 5超立方体上集成的MATLAB代码。我有一个基本算法,当我有一个通用函数时,它可以工作。但我需要整合的功能是:
∫dA
A是R ^ 5的元素。
如果我有∫f(x)dA,那么我认为我的算法会起作用。
以下是算法:
% Writen by Jerome W Lindsey III
clear;
n = 10000;
% Make a matrix of the same dimension
% as the problem. Each row is a dimension
A = rand(5,n);
% Vector to contain the solution
B = zeros(1,n);
for k = 1:n
% insert the integrand here
% I don't know how to enter a function {f(1,n), f(2,n), … f(5n)} that
% will give me the proper solution
% I threw in a function that will spit out 5!
% because that is the correct solution.
B(k) = 1 / (2 * 3 * 4 * 5);
end
mean(B)
答案 0 :(得分:2)
无论如何,我想我明白这里的目的是什么,虽然它看起来有点像人为的练习。考虑通过MC尝试查找圆形区域的问题,如here所述。这里的样本是从单位正方形中抽取的,函数取圆圈内的值1和外面的0。要在R ^ 5中查找立方体的体积,我们可以从包含多维数据集的其他内容中进行采样,并使用类似的过程来计算所需的体积。希望这足以让其余的实现变得简单明了。
答案 1 :(得分:1)
我猜这里有点,因为你给出的“正确”答案的数字与你说的练习方式不符(单位超立方体的数量是1)。
鉴于结果应该是1/120 - 是否应该将standard simplex集成到超立方体中?
你的功能很清楚。如果sum(x)
答案 2 :(得分:0)
%Question 2, problem set 1
% Writen by Jerome W Lindsey III
clear;
n = 10000;
% Make a matrix of the same dimension
% as the problem. Each row is a dimension
A = rand(5,n);
% Vector to contain the solution
B = zeros(1,n);
for k = 1:n
% insert the integrand here
% this bit of code works as the integrand
if sum(A(:,k)) < 1
B(k) = 1;
end
end
clear k;
clear A;
% Begin error estimation calculations
std_mc = std(B);
clear n;
clear B;
% using the error I calculate a new random
% vector of corect length
N_new = round(std_mc ^ 2 * 3.291 ^ 2 * 1000000);
A_new = rand(5, N_new);
B_new = zeros(1,N_new);
clear std_mc;
for k = 1:N_new
if sum(A_new(:,k)) < 1
B_new(k) = 1;
end
end
clear k;
clear A_new;
% collect descriptive statisitics
M_new = mean(B_new);
std_new = std(B_new);
MC_new_error_999 = std_new * 3.921 / sqrt(N_new);
clear N_new;
clear B_new;
clear std_new;
% Display Results
disp('Integral in question #2 is');
disp(M_new);
disp(' ');
disp('Monte Carlo Error');
disp(MC_new_error_999);