เพื่อนๆ รู้จักค่า Pi มาบ้างใช่มั้ยครับ? (ไอ้เลข 3.14159… นั่นแหละ)
ในบทความนี้เราจะลองสมมติว่าเราไม่เคยรู้มาก่อนเลยว่าค่า Pi คือเลขอะไร แต่เราดันอยากจะลองประมาณค่า Pi ขึ้นมาด้วยความรู้ทางคณิตศาสตร์พื้นฐาน เช่น ระยะทางระหว่างจุด (ซึ่งก็คือเรื่องเดียวกับสามเหลี่ยมมุมฉากนั่นแหละ)
หากถามว่าจะทำไปเพื่ออะไร! ในเมื่อแค่ใช้ฟังก์ชัน PI() ก็ได้ผลลัพธ์แล้ว ?
ก็ต้องบอกว่าทำเพื่อความสนุกแบบ Nerd ล้วนๆ และเพื่อหัดทำ Simulation ใน Excel ครับ เพราะการทำ Simulation เป็นจะช่วยให้เราเข้าใจอะไรหลายๆ อย่างได้ดีขึ้น เช่น อาาจไปใช้ทดสอบการลงทุนหุ้นอะไรแบบนี้ก็ได้ครับ
สารบัญ
ทฤษฎีที่ควรรู้
ถ้าใครสังเกตจะพบว่าค่า Pi นั้นมีความเกี่ยวข้องกับรูปวงกลมอยู่อย่างมากเลย ตอนที่พวกเราเรียนวิชาคณิตศาสตร์สมัยเด็กๆ ก็ทำให้เรารู้ว่า พื้นที่ของวงกลมคำนวณได้ดังนี้
Area = \pi r^2
ความน่าสนใจคือ ถ้าเราลองสมมติให้รัศมีของวงกลมมีค่าเป็น 1 หน่วย แบบนี้วงกลมก็จะมีพื้นที่เท่ากับค่า Pi ตารางหน่วย พอดีเลยจริงมั้ยครับ?
Area วงกลมรัศมี 1 หน่วย= \pi *1*1
ทีนี้ถ้าเราเอาวงกลมรัศมี 1 หน่วย ไปยัดลงในสี่เหลี่ยมจตุรัสแบบพอดีๆ เราจะพบว่า สี่เหลี่ยมนั้นจะมีพื้นที่ =2*2 = 4 ตารางหน่วย ดังรูปข้างล่างจริงมั้ยครับ? (ตอนวาดรูปนี้ใช้ Shape -> Align -> Snap to Grid เพื่อให้วาดได้เป๊ะครับ)
ดังนั้นถ้าถามว่า “อัตราส่วน” ของพื้นที่วงกลมต่อพื้นที่สี่เหลี่ยมเป็นเท่าไหร่? มันก็คือ แบบนี้
\dfrac{พื้นที่วงกลม}{พื้นที่สี่เหลี่ยม} = \dfrac{\pi}{4}
ถ้าความสัมพันธ์เป็นแบบนี้ หากเราลอง “สุ่ม” จุดลงไปในพื้นที่สี่เหลี่ยม แบบเยอะๆ รัวๆ เลย มันก็น่าจะเข้าส่วนที่เป็นวงกลมในอัตราส่วน Pi/4 % นั่นเอง
วิธีการคือ เราจะสุ่มค่า x และ y ตั้งแต่ -1 จนถึง 1 แล้วดูว่ามันอยู่ในวงกลมหรือไม่? โดยใช้ความรู้เรื่องระยะทางระหว่างจุดมาช่วยครับ
เช่น พอเราสุ่มค่ามาแล้วได้ค่า x กับค่า y มา เราจะหาว่ามันห่างจากจุด 0,0 เท่าไหร่ (ให้เป็นระยะ d) มันก็คือการคำนวณจากระยะด้านตรงข้ามมุมฉากของรูปสามเหลี่ยมนั่นเอง
ระยะ d = \sqrt(x^2+y^2)
งั้นเราลอง Random ค่า x กับ y ระหว่าง -1 ถึง 1 แล้วหาค่า d กันครับ ถ้ามันไม่เกิน 1 แสดงว่ายังอยู่ในวงกลมนั่นเองครับ
และนี่คือตัวอย่างของการ Random 1 ครั้งครับ
ถ้าเรามีการให้ Excel คำนวณใหม่ หรือกด F9 เพื่อให้ Recal ค่าที่ได้ก็อาจจะเปลี่ยนไป
ซึ่งถ้าเราสุ่มจำนวนครั้งมากพอ แล้วหาอัตราส่วนว่ามันอยู่ในวงกลมกี่ % เราก็จะหาค่า Pi ได้ในที่สุดครับ ซึ่งการทำ Simulation จากการสุ่มมีชื่อเรียกว่า Monte Carlo Simulation นั่นเองครับ
และถ้าย้ายข้างหาค่า Pi ก็จะได้ดังนี้
\pi=\dfrac{จำนวนที่สุ่มลงวงกลม}{จำนวนที่สุ่มลงสี่เหลี่ยม} *4
แล้วเราจะสุ่มค่าจำนวนหลายๆ ครั้งแล้วบันทึกค่าไว้ได้ยังไง? เพราะถ้าเรากด F9 ทุกอย่างก็จะเปลี่ยนไปหมดเลย…
วิธีการทำ Simulation นั้นมีอยู่ 2 วิธีครับ
วิธีแรก : Copy สูตรไปหลายๆ ช่องเลย
วิธีการแรก คือ การทำแบบตรงไปตรงมาสุดๆ นั่นคือ ให้ Copy สูตรให้ครบจำนวนเยอะๆ ตามที่ต้องการ (เช่น พัน, หมื่น, แสน, ล้านครั้ง ยิ่งเยอะยิ่งแม่น) ซึ่งถ้าเราต้องการ 1 ล้านครั้ง ก็ให้ Copy สูตรลงไปล้านบรรทัด ซึ่งเราใช้ Fill Series มาช่วยสร้างค่า 1 ล้านค่าได้โดยไม่ต้องลากลงไปเอง ดังนี้
จากนั้นก็ Copy สูตรลงไป (จุดนี้ระวังเครื่องแฮงค์…) แล้วนับว่ามี TRUE กี่อัน จากจำนวนการทดลอง 1 ล้านครั้ง
ถ้าลอง Plot กราฟ จะได้ประมาณนี้ (แต่กราฟนี้ผมเอาแค่ 1000 จุด)
พอเรา เอาอัตราส่วนดังกล่าวไป*4 ก็จะได้ค่า Pi ที่เราประมาณค่าขึ้นมาได้นั่นเอง ซึ่งจะพบว่าก็ใกล้เคียงกับค่า 3.14159 ที่เราเรียนมาพอสมควรครับ (ยิ่งสุ่มเยอะ ยิ่งแม่น)
วิธีที่ 2 : ใช้ Data Table
ถ้าเราไม่อยาก Copy สูตรลงมาเยอะๆ เรายังสามารถทำอีกวิธีได้คือใช้เครื่องมือ Data Table ใน What-if Analysis มาช่วยครับ (ใครยังไม่เคยใช้ Data Table ลองอ่านบทความนี้ก่อนได้)
ก่อนอื่นก็ให้เตรียมพื้นที่ที่จะแสดงผลลัพธ์ทั้ง 1 ล้านครั้งซะก่อนดังรูป โดยที่ Cell ด้านบนที่เป็นหัวของผลลัพธ์ 1 ล้านครั้งนั้น ให้ Link ค่ากับ Cell ที่ต้องการแสดงออกมา ซึ่งก็คือเขียนว่า =B5 ดังรูป
จากนั้นให้เลือกคลุมข้อมูล D1:E1000001 แล้วเลือก Data -> What if Analysis -> Data Table…
ซึ่ง Trick คือให้เลือก Column Input Cell เป็นช่องอะไรก็ได้ที่ไม่เกี่ยวกับสูตรเลย (ทั้งนี้เพื่อให้ไม่ต้องเกิดการเอาค่า 1,2,3,4 ไปใส่ในสูตรจริงๆ เพราะมันไม่เกี่ยวกัน)
พอกด Ok เราก็จะได้ผลลัพธ์ 1 ล้านครั้ง (จุดนี้ระวังเครื่องแฮงค์…) และสามารถหาค่าประมาณการของค่า Pi ได้เช่นเดิมครับ วิธีนี้จะเห็นแค่ผลลัพธ์จำนวน 1 ล้านครั้ง โดยไม่ต้องมี input ตัวอื่นโผล่มาให้เกะกะเลย
สรุป
เวลาเราทำการ Random สุ่มค่าจำนวนครั้งเยอะๆ นอกจากจะใช้การ Copy Paste ออกมาจำนวนมากแล้ว เรายังสามารถใช้ Data Table มาช่วยในการสร้างผลลัพธ์หลายๆ ค่าได้ด้วยครับ
แม้ว่าการทำใน Excel จะค่อนข้างช้าเมื่อเทียบกับการใช้เครื่องมือเขียนโปรแกรมอย่าง R, Python แต่ว่าก็ยังเป็นวิธีที่สะดวกสำหรับคนทั่วไปที่เขียนโปรแกรมไม่เป็นอยู่ครับผม