Bắt đầu ngayBắt đầu miễn phí

Tích phân một hàm đơn giản

Đây là một bài tập đơn giản giới thiệu khái niệm Tích phân Monte Carlo.

Tại đây, bạn sẽ tính một tích phân đơn giản \( \int_0^1 x e^{x} dx\). Ta biết đáp án chính xác là \(1\), nhưng mô phỏng sẽ cho lời giải xấp xỉ, nên có thể kỳ vọng kết quả gần \(1\). Như đã thấy trong video, quy trình rất đơn giản. Với một hàm một biến \(f(x)\):

  1. Xác định cận trục x \((x_{min}, x_{max})\) và trục y \((\max(f(x)), \min(\min(f(x)), 0))\).
  2. Sinh một số điểm phân bố đều trong hình chữ nhật này.
  3. Lấy diện tích hình chữ nhật (\((\max(f(x) - \min(f(x))\times(x_{max}-x_{min})\)) nhân với tỷ lệ điểm nằm dưới đồ thị \(f(x)\).

Hoàn thành xong, bạn sẽ có một khung phương pháp để xử lý tích phân xác định bằng Tích phân Monte Carlo.

Bài tập này là một phần của khóa học

Mô phỏng Thống kê bằng Python

Xem khóa học

Hướng dẫn bài tập

  • Trong hàm sim_integrate(), sinh các số ngẫu nhiên phân bố đều giữa xminxmax và gán cho x.
  • Sinh các số ngẫu nhiên phân bố đều giữa \(\min(\min(f(x)), 0)\) và \(\max(f(x))\) và gán cho y.
  • Trả về tỷ lệ điểm nhỏ hơn \(f(x)\) nhân với diện tích (\((\max(f(x) - \min(f(x))\times(x_{max}-x_{min})\)).
  • Cuối cùng, dùng lambda để định nghĩa func là \(x e^{x}\).

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

# Define the sim_integrate function
def sim_integrate(func, xmin, xmax, sims):
    x = np.random.uniform(____, ____, sims)
    y = np.random.uniform(____, ____, sims)
    area = (max(y) - min(y))*(xmax-xmin)
    result = area * sum(____(____) < abs(func(x)))/sims
    return result
    
# Call the sim_integrate function and print results
result = sim_integrate(func = lambda x: ____, xmin = 0, xmax = 1, sims = 50)
print("Simulated answer = {}, Actual Answer = 1".format(result))
Chỉnh sửa và Chạy Mã