Chào các bạn.

Câu hỏi hôm nay như sau:

Problem

The area of a circle is defined as πr^2. Estimate π to 3 decimal places using a Monte Carlo method.

Hint: The basic equation of a circle is x2 + y2 = r2.

Method

Phương pháp Monte Carlo là dựa vào xác suất thống kê để tính toán số Pi. Theo đó thì :

  • Giả sử ta có 1 bảng mục tiêu hình vuông 1x1. Tâm là gốc tọa độ O(0,0). Từ gốc tọa độ ta vẽ một đường tròn nội tiếp hình vuông.

  • Một xạ thủ bắn phi tiêu vào bảng mục tiêu (Giả sử tất cả đều trúng mục tiêu nhưng có thể trong hoặc ngoài hình tròn.)

  • Sau n phát ta thống kê được k phát bắn nằm trong hình tròn. Công thức tính số pi là pi = (k/n)/4.

  • Với n càng lớn thì ta càng tiến sát tới số pi.

Ví dụ minh họa

Code Implementation

public static void main(String[] args)
    {
        int i;
        int nThrows = 0;
        int nSuccess = 0;

        double x, y;

        for (i = 0; i < 1000000 ; i++)
        {
            x = Math.random();      // Throw a dart
            y = Math.random();

            nThrows++;

            if ( x*x + y*y <= 1 )
                nSuccess++;
        }

        System.out.println("Pi/4 = " + (double)nSuccess/(double)nThrows );
        System.out.println("Pi = " + 4*(double)nSuccess/(double)nThrows );
    }

Source code

https://github.com/tubean/dailycode/tree/master/src/day13

Reference

Link