การอินทิเกรตฟังก์ชันอย่างง่าย
แบบฝึกหัดนี้เป็นการแนะนำแนวคิดของ Monte Carlo Integration
เราจะประเมินอินทิกรัลอย่างง่าย \( \int_0^1 x e^{x} dx\) คำตอบที่แน่นอนคือ \(1\) แต่การจำลองจะให้คำตอบโดยประมาณ ซึ่งควรใกล้เคียงกับ \(1\) ดังที่เห็นในวิดีโอ กระบวนการนี้ไม่ซับซ้อน สำหรับฟังก์ชันที่มีตัวแปรเดียว \(f(x)\):
- หาค่าขอบเขตของแกน x \((x_{min}, x_{max})\) และแกน y \((\max(f(x)), \min(\min(f(x)), 0))\)
- สร้างจุดที่กระจายแบบสม่ำเสมอจำนวนหนึ่งภายในกรอบสี่เหลี่ยมนี้
- คูณพื้นที่ของกรอบสี่เหลี่ยม (\((\max(f(x) - \min(f(x))\times(x_{max}-x_{min})\)) ด้วยสัดส่วนของจุดที่อยู่ใต้ \(f(x)\)
เมื่อทำเสร็จแล้ว คุณจะมีกรอบสำหรับคำนวณอินทิกรัลจำกัดเขตโดยใช้ Monte Carlo Integration
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การจำลองทางสถิติด้วย Python
คำแนะนำการฝึกหัด
- ในฟังก์ชัน
sim_integrate()ให้สร้างตัวเลขสุ่มแบบสม่ำเสมอระหว่างxminและxmaxแล้วกำหนดให้กับx - สร้างตัวเลขสุ่มแบบสม่ำเสมอระหว่าง \(\min(\min(f(x)), 0)\) และ \(\max(f(x))\) แล้วกำหนดให้กับ
y - คืนค่าสัดส่วนของจุดที่น้อยกว่า \(f(x)\) คูณด้วยพื้นที่ (\((\max(f(x) - \min(f(x))\times(x_{max}-x_{min})\))
- สุดท้าย ใช้ lambda function เพื่อกำหนด
funcเป็น \(x e^{x}\)
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# 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))