วันพุธที่จะถึงนี้มีกิจกรรมในแลบตามที่อาจารย์เดฟบอกไว้ คือ Programming Day ซึ่งจะหาโจทย์มาให้เด็กๆที่เรียนอยู่ทำเล่น เพื่อซ้อมมือไม่ให้ลืมไปหมด แต่ผมยังไม่รู้จะหาโจทย์อะไรดี ก็เลยหางานเก่าที่เคยทำไว้ก็ไปเจอเรื่อง การหาค่า Pi ด้วย Monte Carlo method ทำให้เกิดไอเดียว่าเอามาให้ทำดีกว่า ไม่ยากเกินไปด้วย
ก่อนที่เราจะทำโจทย์นั้น เรามารู้จักกันก่อนว่า ค่า Pi และ Monte Carlo คืออะไร
คำจำกัดความของค่า Pi ในวิกิพีเดียภาษาไทย คือ ค่าคงที่ทางคณิตศาสตร์ ที่เกิดจากความยาวเส้นรอบวงหารด้วยเส้นผ่านศูนย์กลางของวงกลม ค่า π มักใช้ในคณิตศาสตร์, ฟิสิกส์ และวิศวกรรม π เป็นอักษรกรีกที่ตรงกับตัว "p" ในอักษรละติน มีชื่อว่า "pi" (อ่านว่า พาย ในภาษาอังกฤษ แต่อ่านว่า พี ในภาษากรีก) บางครั้งเรียกว่า ค่าคงที่ของอาร์คิมิดีส หรือจำนวนของLudolph (อ่านเพิ่มเติมที่ พาย (ค่าคงที่) หรือ Pi)

π = ความยาวเส้นรอบวง / เส้นผ่านศูนย์กลางของวงกลม

การเกิดค่าพาย
ส่วน Monte Carlo method คืออะไรนั้นคงไม่แปลเป็นภาษาไทย เพราะกลัวจะแปลผิดแล้วส่งผลเสียต่อคนอ่าน จึงนำความหมายภาษาอังกฤษมาใส่ละกัน คือ
Monte Carlo methods are a widely used class of computational algorithms for simulating the behavior of various physical and mathematical systems, and for other computations. They are distinguished from other simulation methods (such as molecular dynamics) by being stochastic, that is nondeterministic in some manner – usually by using random numbers (in practice, pseudo-random numbers) – as opposed to deterministic algorithms. Because of the repetition of algorithms and the large number of calculations involved, Monte Carlo is a method suited to calculation using a computer, utilizing many techniques of computer simulation.
A Monte Carlo algorithm is often a numerical Monte Carlo method used to find solutions to mathematical problems (which may have many variables) that cannot easily be solved, for example, by integral calculus, or other numerical methods. For many types of problems, its efficiency relative to other numerical methods increases as the dimension of the problem increases. Or it may be a method for solving other mathematical problems that rely on (pseudo-)random numbers.(อ่านเพิ่มเติมที่ Monte Carlo method)
|
การหาค่า π ของวงกลมนั้น เราจะคิดจากพื้นที่ของวงกลมหารด้วยรัศมียกกำลังสอง (π = Acircle/r2) แต่เนื่องจากไม่รู้ค่าพื้นที่ของวงกลม ดังนั้นเราจึงใช้ Monte Carlo method เข้ามาแก้ปัญหานี้ โดยใช้การ random ตำแหน่ง x, y แล้วตรวจสอบว่าอยู่ภายในวงกลมหรือไม่ หากอยู่ในวงกลมก็นับค่าไว้ เมื่อจำนวนของการ random มากพอแล้วจะทำให้ได้ค่าของพื้นที่วงกลมแบบหยาบๆ จากนั้นจะสามารถเอาไปหาค่าของ π ได้ |
|
เพื่อให้การคิดนั้นง่ายๆ ดังนั้นจึงแบ่งวงกลมออกเป็น 4 ส่วนแล้วเลือกคิดเพียง 1 ส่วน และกำหนดรัศมีให้มีค่า 1 หน่วย จากนั้นจะให้สุ่มค่าอันดับ x, y แล้วตรวจสอบว่าอยู่ภายในส่วนของวงกลมหรือไม่ หากอยู่จะให้นับจำนวนที่อยู่ไว้ ซึ่งการตรวจสอบว่าอยู่ภายใต้ส่วนของวงกลมหรือไม่นั้นจะใช้ความรู้ Pythagorus ด้วย คือ z2 = x2+y2 หากค่า z นั้นมีค่าน้อยกว่ารัศมีที่กำหนด (ในที่นี้ r คือ 1 หน่วย) จะถือว่าอยู่ในส่วนของวงกลม |
|
เมื่อทำการสุ่มค่าไปเรื่อยๆ จนได้จำนวนมากพอ จากนั้นหาอัตราส่วนระหว่างจำนวนจุดสีแดงต่อจำนวนจุดทั้งหมด จะทำให้ได้พื้นที่ของส่วนของวงกลม เช่น จำนวนจุดที่ิอยู่ในส่วนของวงกลมคือ 784 หน่วย และจำนวนจุดทั้งหมดคือ 1000 หน่วย ดังนั้นพื้นที่ส่วนของวงกลมจะได้ค่า 0.784 หน่วย และเมื่อนำตัวเลขนี้ไปคูณด้วย 4 (เพราะแบ่งวงกลมออกเป็น 4 ส่วน) จะได้ค่าคือ 3.136 หน่วย ซึ่งค่าที่ได้นี้จะเป็นค่า π ด้วยเนื่องจากการหาพื้นที่นั้นสามารถคิดจาก พื้นที่วงกลม = π*r2 โดยที่ พื้นที่วงกลม = 3.136; r = 1 ดังนั้นค่า π จะมีค่าคือ 3.136 หน่วย (ค่า π จริงๆ คือ 3.14159 ซึ่งมีความคลาดเคลื่อนคือ 0.1779%) |
การหาด้วยวิธีแบบนี้นั้น ค่าท่ีได้จะใกล้เคียงกับค่าจริง และแต่ละครั้งจะได้ค่าไม่ค่อยเหมือนกัน และถ้าเรื่องที่ผมเขียนไปนี้มีส่วนที่ผิดพลาด หรืออธิบายไม่รู้เรื่องก็อยากให้คนอ่านช่วยแก้ไขให้หน่อยนะครับ ขอบคุณมากครับ


