I'm new to matlab I'm having trouble with this one.
    조회 수: 14 (최근 30일)
  
       이전 댓글 표시
    
Write a function called mypi which consumes a number that specifies the required accuracy and approximates the value of pi to that accuracy. Use the following algorithm to approximate pi:
Think about a quarter circle inside of a unit square (quarter circle has area pi/4). Pick a random point inside the square. If it is in the quarter circle, you get a "hit", otherwise it's a "miss". The approximate area of the quarter circle will be given by the number of "hits" divided by the number of points chosen.
The function should repeat the process of counting hits and misses until at least 10,000 tries have been made or pi is within the required accuracy. It should return the the estimate for pi.
댓글 수: 5
  Ingrid
      
 2016년 1월 27일
				Stephen - how would you check with this vectorized solution if the precision is found sooner?
  Stephen23
      
      
 2016년 1월 27일
				I did not mean to imply that this was a complete solution for the OP: I would have given it as an Answer if it was! My comment simply shows how vectorized code can be used to estimate π using this concept, i.e. the "basic task".
To meet the precision condition requires either a loop of some kind, or else calculating a large number of X&Y values and finding the first subset which meets the condition.
채택된 답변
  Ingrid
      
 2016년 1월 27일
        
      편집: Ingrid
      
 2016년 1월 27일
  
      The most important mistake is adding i to hit in the loop instead of just one, i is a counter that goes from 1 to 10000 so it gets really big.
Also, you need to do the error checking with the for loop to allow for preliminary exit after the required precision has been reached.
Finally, be careful with correct naming of your variables. It matters if you write hit or hits and it is not clear were you define hits and it should definitely not be used in calculating the estimated pi as there you want to use the actual number stored in hit
The code below should work as you wanted
maxIt = 10000;
hit= 0;
for i = 1:maxIt
    x = rand();
    y = rand();
    if x^2 + y^2 <= 1
        hit = hit + 1 ;
    end
    piest = 4 * (hit/i);
    error = abs(pi-(piest));
    if error < .001
        sprintf('Number of iterations = %1.0f',i)
        break
    end
end
disp(piest)
댓글 수: 0
추가 답변 (0개)
참고 항목
카테고리
				Help Center 및 File Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


