วิทย์ม.ต้น: เขียนโปรแกรมไพธอนหาว่าพาราโบลาตัดแกน x ที่ไหน, วิธีหาคำตอบโดย Bisection Method

สัปดาห์ที่ผ่านมาผมให้เด็กๆไปค้นคว้ามาว่ากราฟพาราโบลาหน้าตาเป็นอย่างไรครับ

ผมแนะนำให้เด็กดูคลิปเหล่านี้ จะเห็นว่าถ้าเราตัดกรวยด้วยมุมต่างๆเราจะได้วงกลม วงรี พาราโบลา ไฮเปอร์โบลาครับ:

ส่วนต่างๆของพาราโบลา:

พาลาโบลาทุกอันเป็นตัวเดียวกัน ต่างกันแค่เลื่อนไปมา หมุนไปมา และซูมเข้าซูมออก (เหมือนกับที่วงกลมทุกวงเป็นตัวเดียวกัน ต่างกันแค่เลื่อนไปมาและซูมเข้าซูมออก):

ต่อไปเด็กๆก็รู้จักสูตรควอดราติก (quadratic formula) ที่บอกว่าพาราโบลาตัดแกน x ที่ไหนครับ

เราเขียนโปรแกรมไพธอนเพื่อหาค่าตามสูตรข้างบน:

ผมเล่าให้เด็กๆฟังว่าพาราโบลาเป็นสมการที่มีกำลังสองเพราะตัวแปรยกกำลังมากที่สุดคือกำลังสอง และเรามีสูตรหาได้ว่าสมการนี้เท่ากับศูนย์เมื่อไร เมื่อสักประมาณ 400-500 ปีมาแล้วนักคณิตศาสตร์รู้จักสูตรสำหรับสมการกำลังสามและกำลังสี่ด้วย แต่ไม่มีใครหาสูตรสำหรับกำลังห้าได้ จนเวลาผ่านมาอีกเกือบๆสามร้อยปีถึงมีคนพิสูจน์ได้ว่าโดยทั่วไปสมการกำลังห้าหรือมากกว่าจะไม่มีสูตรหาว่ามันมีค่าเท่ากับศูนย์เมื่อไร

สำหรับสมการที่ไม่มีสูตรแก้ เราต้องใช้วิธีทางตัวเลข (numerical method) ประมาณค่าดู วันนี้เราคุยกันเรื่องวิธี Bisection ครับ (bisection method) โดยไอเดียหลักก็คือวาดกราฟดูก่อนว่าฟังก์ชั่นเรามีค่าเท่ากับศูนย์แถวๆช่วงไหน แล้วเราก็แบ่งครึ่งช่วงนั้นเป็นสองช่วงที่เล็กลงครึ่งหนึ่ง แล้วดูว่าฟังก์ชั่นเราเท่ากับศูนย์ในช่วงที่เล็กลงช่วงไหน แล้วทำอย่างนี้วนไปเรื่อยๆ ช่วงที่ล้อมรอบคำตอบเราก็จะเล็กลงเรื่อยๆทีละครึ่งจนช่วงเล็กพอให้เราประมาณค่าในช่วงนั้นเป็นคำตอบ

ตัวอย่างวิธี bisection แบบเรียกตัวเอง (recursion)
ตัวอย่างวิธี bisection ที่ไม่เรียกตัวเอง และทำการเทียบบัญญัติไตรยางค์ในช่วงที่ถูกบีบให้เล็กๆ เพื่อให้ได้คำตอบที่ถูกต้องมากยิ่งขึ้น

สามารถโหลดโค้ดต่างๆใน Jupyter Notebook นี้หรือดูออนไลน์ที่ https://nbviewer.jupyter.org/urls/witpoko.com/wp-content/uploads/2019/06/2019-06-28_G8-9.ipynb นะครับ

One thought on “วิทย์ม.ต้น: เขียนโปรแกรมไพธอนหาว่าพาราโบลาตัดแกน x ที่ไหน, วิธีหาคำตอบโดย Bisection Method”

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.