Monte Carlo integration (hit or miss) to find the area of a circle of radius R
Show older comments
Hi everyone. Trying to solve an old exam topic regarding Monte Carlo integration, I wrote the following code for which I based it on a code from a professor in the C language. For R = 1 it worked so I assume I did it correctly. Then I tried R > 1 and the results were wrong compared to the formula πR^2 so I tried a few modifications by trial and error method. I fixed the problem and it seems to works correctly but there is a modification that I don't understand. If you could help me understand this it would be great. Thank you in advance.
clear, clc, format short
%---------- Computation for R = 1 ----------
R = 1;
N = 1e+7;
insideCircle = 0;
for i = 1:N
x = rand(1);
y = rand(1);
if (x^2 + y^2) < R
insideCircle = insideCircle + 1;
end
end
Area_MC = 4*insideCircle/N;
Area = pi*R^2;
error = 100*abs(Area - Area_MC)/Area;
fprintf('\n\tExact area\t\t%f\n\tMonte Carlo area\t%f\n\tPercentage error\t%.5f%%\n',Area,Area_MC,error);
%---------- Computation for R > 1 (e.g. R = 4 but you can try any real value) ----------
R = 4; %input('Enter radius R: R = ','s'); R = str2double(R);
% while R <= 0 || isreal(R) == 0 || isnan(R) == 1 || isnumeric(R) == 0
% disp('Invalid input')
% R = input('Enter radius R: R = ','s');
% R = str2double(R);
% end
N = 1e+7;
insideCircle = 0;
for i = 1:N
x = rand(1)*R;
y = rand(1)*R;
if (x^2 + y^2) < R
insideCircle = insideCircle + 1;
end
end
Area_MC = 4*R^3*insideCircle/N; % Modification needed that I don't understand (I had to multiply with R^3)
Area = pi*R^2;
error = 100*abs(Area - Area_MC)/Area;
fprintf('\n\tExact area\t\t%f\n\tMonte Carlo area\t%f\n\tPercentage error\t%.5f%%\n',Area,Area_MC,error);
Accepted Answer
More Answers (0)
Categories
Find more on Logical in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
