MATLAB: I'm having trouble calculating the probability to estimate pi. Any help is appreciated.

3 views (last 30 days)
The MATLAB command rand produces a uniformly-distributed random number between 0 and 1. For example, the MATLAB commands x = rand; and y = rand; will produce a point randomly located in the unit square: (0<x<1) and (0<y<1). The probability that the randomly-generated point (x, y) will lie within the "unit quarter-circle" is equal to the ratio between the area of the unit quarter-circle and that of a unit square; i.e., π/4. Note that (x, y) lies within the unit quarter circle if x^2+y^2<1 Write a MATLAB program that will achieve the following tasks. a. Generate a minimum of 10,000 points (x,y). b. Test each point and increment a counter if x^2+y^2<1. c. Produce an estimate of π. d. Calculate the relative percent true error, E sub t.
n=10000;
for counter=0:n
x= rand;
y=rand;
z=hypot(x,y);
if (z<1)
Est_pi= Area*4;
counter= counter+1;
Error= (((abs(pi-(Est_pi)))/(pi)).*100);
end
end
  1 Comment
Star Strider
Star Strider on 10 Sep 2015
Original Question copied here:
The MATLAB command rand produces a uniformly-distributed random number between 0 and 1. For example, the MATLAB commands x = rand; and y = rand; will produce a point randomly located in the unit square: (0<x<1) and (0<y<1). The probability that the randomly-generated point (x, y) will lie within the "unit quarter-circle" is equal to the ratio between the area of the unit quarter-circle and that of a unit square; i.e., π/4. Note that (x, y) lies within the unit quarter circle if x^2+y^2<1 Write a MATLAB program that will achieve the following tasks. a. Generate a minimum of 10,000 points (x,y). b. Test each point and increment a counter if x^2+y^2<1. c. Produce an estimate of π. d. Calculate the relative percent true error, E sub t.
n=10000;
for counter=0:n
x= rand;
y=rand;
z=hypot(x,y);
if (z<1)
Est_pi= Area*4;
counter= counter+1;
Error= (((abs(pi-(Est_pi)))/(pi)).*100);
end
end

Sign in to comment.

Accepted Answer

James Tursa
James Tursa on 9 Sep 2015
Edited: James Tursa on 9 Sep 2015
You have made a decent start. Issues with your code:
1) You use counter for two separate conflicting things. One is the loop counter, and another is the number of "hits" within the unit quarter circle. Use two different variables. E.g., keep the loop counter and have another variable called hits ... set hits = 0 at the start and then inside the loop have hits = hits + 1.
2) Move all of your Est_pi stuff out of the loop and put it after the loop is finished. The estimated probability is simply hits/n. Then apply your formula for the estimate of pi.
3) Change the loop indexing to start at 1 instead of 0.

More Answers (1)

jimmymarsh
jimmymarsh on 9 Sep 2015
% This program generates a min of 10,000 points (x, y), tests, and counts
% each point to produce an estimate of pi and then calculates relative true
% error
% Written by: James Marshall Date:09/08/15
n=10000;
for counter=0:n
x= rand;
y=rand;
z=hypot(x,y);
if (z<1)
Area= sum(x)+sum(y);
Est_pi= Area*4;
counter= counter+1;
Error= (((abs(pi-(Est_pi)))/(pi)).*100);
end
end
This seems to kind of work, error is still a little big. A point in the right direction is all I need.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!