AI Cho Mọi Người

AI Cho Mọi Người

Ước lượng số PI và e

 

 

Ước lượng số PI bằng các số ngẫu nhiên.

 

Chúng ta sẽ cài đặt chương trình để ước lượng số PI dùng các số ngẫu nhiên có phân bố đều (uniform distribution). Các bước cài đặt chương trình như sau:

1. Cho trước hình vuông V có cạnh s = 2 và hình tròn T có bán kính r = 1. Cả V và T có tâm tại điểm (0, 0).

2. Sinh ra N điểm p có tọa độ (x, y), trong đó x, y là các số ngẫu nhiên và thuộc đoạn [-1, 1].

(hình từ wikipedia)

3. Đếm số điểm p thuộc T, gọi là \(N_T\)

4. Cuối cùng, số PI được ước lượng như sau

$$\pi \approx 4 \times \frac{N_T}{N}$$

 

Trước khi xem source code

– Các bạn hãy thử tự cài đặt chương trình ước lượng số PI. Điều này tốt hơn là xem code ngay.
https://aivietnam.ai/python-editor/

– Các bạn hãy xây dựng công thức trên. (Dựa vào công thức tính diện tích hình tròn và hình vuông, sau đó rút PI).

Source code

# aivietnam.ai
import random
import math


# Tổng số điểm p được sinh ra
N = 100000

# số điểm thuộc tình tròn
N_T = 0

# Sinh ra N điểm ngẫu nhiên
for i in range(N):
    # sinh ra x, y thuộc [-1, 1].
    x = random.random()*2 - 1
    y = random.random()*2 - 1
    
    x2 = x**2
    y2 = y**2
    
    # kiểm tra p có nằm trong đường tròn
    if math.sqrt(x2 + y2) <= 1.0:
        N_T = N_T + 1

# tính PI
pi = (N_T / N) * 4
print(pi)

 

Kết quả

3.14052

 

Ước lượng số e

Số e được ước lượng dựa vào công thức sau

$$e\approx 1 + \frac{1}{1!} + \frac{1}{2!} + … + \frac{1}{n!}$$

trong đó, n là số cho trước. n càng lớn thì độ chính xác càng cao.

Các bạn hãy dùng vòng lặp for để tính giai thừa và tính xấp xỉ số e (cho trước giá trị của e để các bạn kiểm tra độ chính xác của chương trình cài đặt, e = 2.718281828).

Các bạn thử tự cài đặt trước nhé.

https://aivietnam.ai/python-editor/

Source code

# aivietnam.ai

# hàm tính giai thừa
def factorial(n):
    result = 1
    
    for i in range(2, n+1):
        result = result*i
        
    return result

# hàm ước lượng số e
def estimate_e(n):
    result = 1
    
    for i in range(1, n+1):
        result = result + 1/factorial(i)
    
    return result    

# ước lượng số e với n = 10
print(estimate_e(10))

 

Kết quả

2.7182818011463845