(เขียนเพื่อรวบรวมโพสท์ต่างๆที่กระจายอยู่บน Facebook และจะได้เป็นที่โหลดโปรแกรมไปลองเล่นครับ โปรแกรมเป็นภาษา Mathematica นะครับ โปรแกรมอยู่ที่นี่ ถ้าไม่มี Mathematica สามารถลองใช้ได้ที่นี่ ถ้าไม่คุ้นเคยกับภาษานี้ลองเข้าไปดูที่ผมเขียนแนะนำที่นี่ครับ ถ้าอยากเขียนใหม่เป็น Python อาจต้องใช้โมดูล SymPy ช่วยนะครับ ถ้าจะดูโค้ดแต่ไม่มี Mathematica กดตรงนี้เพื่อดูไฟล์ PDF ครับ )
สัปดาห์ที่ผ่านมีมีดราม่าเรื่องข้อสอบ กพ. ที่ว่ามีรถสองคันอยู่ห่างกัน 40 กิโลเมตรวิ่งเข้าหากัน คันหนึ่งวิ่ง 60 กม/ชม อีกคันวิ่ง 40 กม/ชม มีแมลงวันที่บินกลับไปกลับมาระหว่างรถด้วยความเร็ว 80 กม/ชม คำถามคือแมลงวันบินได้ระยะทางเท่าไรก่อนที่รถจะชนกัน ถ้าเราไม่ซีเรียสเรื่องแมลงวันที่ไหนที่บินได้เร็วอย่างนั้น แถมยังเปลี่ยนความเร็วได้ทันทีเมื่อแตะรถอีก วิธีคิดง่ายๆก็คือระยะทางระหว่างรถทั้งสองลดลงด้วยอัตรา 60+40 = 100 กม/ชม ถ้าตอนเริ่มต้นรถห่างกัน 40 กิโล รถจะอยู่ติดกันที่เวลา 40/100 = 0.4 ชั่วโมง ดังนั้นแมลงวันก็จะบินอยู่ 0.4 ชั่วโมงคิดเป็นระยะทาง = 0.4 ชั่วโมง x 80 กิโลเมตร/ชม = 32 กิโลเมตร (โจทย์นี้เป็นที่รู้จักกันในนาม Two Trains Puzzle เป็นเวลานานมากแล้ว มีตำนานว่ามีคนเอาปัญหานี้ไปถาม John von Neumann ผู้เป็นอัจฉริยะด้านคณิตศาสตร์และคอมพิวเตอร์ คุณ von Neumann ตอบทันที คนถามบอกว่าอ๋อคงรู้วิธีคิดลัดละสิ คุณ von Neumann บอกว่าวิธีลับอะไร ก็บวกอนุกรมอนันต์ธรรมดาไง)
แต่วิธีแก้แบบนั้นมันง่ายเกินไป เราเลยวาดกราฟ spacetime ของรถและแมลงวัน และคำนวณค่า (t, x) ที่แมลงวันแตะรถแต่ละคัน แล้วเอาตำแหน่ง x มาหาว่าแมลงวันบินรวมกี่กิโลเมตร ทำอย่างนี้ไม่มีประโยชน์อะไรเลยกับการตอบเฉพาะปัญหานี้ แต่ถ้าเด็กๆคิดทำอย่างนี้จะได้รู้เรื่องกราฟเส้นตรง รูปแบบสมการเชิงเส้นเมื่อเรารู้ความชันและจุดที่วิ่งผ่านหนึ่งจุด ตำแหน่งคู่ลำดับที่เส้นตรงสองเส้นตัดกัน และวิธีแปลงความคิดของเราเป็นโปรแกรมครับ
คุณ Atis Yosprakob ทำ animation เรื่องนี้ไว้ที่ http://ayosp.info ด้วยนะครับ
ต่อมาอาจารย์ทีปานิส ชาชิโยถามว่าถ้าความเร็วของแมลงวันวิ่งไปทางซ้ายและขวาไม่เท่ากัน ระยะทางจะเป็นอย่างไร:
ผมดัดแปลงโปรแกรมแล้วลองบวกระยะทางส่งไปให้อาจารย์ดู แล้วอาจารย์ก็แสดงสูตรและวิธีทำดังนี้ครับ:
วิธีนี้เป็นวิธีบวกอนุกรมอนันต์ครับ วิธีแบบนี้เป็นวิธีที่ผมพยายามทำแต่ทำผิดเลยได้คำตอบผิดๆไม่ตรงกับโปรแกรมครับ
ช่วงเวลาประมาณเดียวกัน อาจารย์สุจินต์ วังสุยะก็แสดงวิธีทำอีกแบบหนึ่งที่ไม่ต้องบวกอนุกรมอนันต์ หน้าตาประมาณนี้ครับ:
วิธีนี้ดีที่ไม่แคร์กับอนุกรมอะไรทั้งสิ้น แค่คิดหาเวลาที่แมลงวันบินไปทางซ้าย และบินไปทางขวา ผมเห็นก็ตื่นเต้นมากเอาไปคุยกับเพื่อนผมคุณเก๊า ปวีญวิชช เกาศล คุณเก๊าบอกว่าเราไม่เห็นความเร็วของรถ B (VB) เลย แสดงว่ารถ B จะวิ่งยังไงก็ได้ ผมพยายามวาดกราฟการเคลื่อนที่ของรถ B หลายๆแบบก็พบว่าระยะทางที่แมลงวันบินไม่ขึ้นกับการเคลื่อนที่ของ B ตราบใดที่เวลาที่ใช้และจุดที่ชนคงที่ แต่สูตรข้างบนยังมีความเร็วของรถ A อยู่
หลังจากผมวาดกราฟไปสักพักผมก็สงสัยว่าจริงๆเราไม่ต้องใช้ความเร็วรถ A เลยนี่นา สิ่งที่สำคัญสำหรับการหาระยะทางมีแค่เวลาที่ใช้ทั้งหมด T และตำแหน่งที่รถชนกัน d กล่าวคือรถ A และ B จะวิ่งยังไงก็ได้ ตราบใดที่มันใช้เวลา T เพื่อมาชนกันที่ตำแหน่ง d, ระยะทางที่แมลงวันบินจะเท่ากับ:
ทั้งนี้รถทั้งสองคันต้องไม่เคยวิ่งแซงแมลงวันด้วยนะครับ (แปลว่าขนาด slope ของกราฟการเคลื่อนที่ของรถตอนแมลงวันไปถึงต้องไม่มากกว่าอัตราเร็วตอนแมลงวันบินหนีกลับมา)
วิธีแก้สมการก็ง่ายๆตรงไปตรงมาถ้าทำตามแบบอาจารย์สุจินต์ครับ ไม่ต้องบวกอนุกรมอนันต์ เป็นสมการเชิงเส้นสองตัวแปรสองสมการ:
อันนี้เป็นสรุปในกระดาษทดหลังจากวาดกราฟดูไปเยอะๆครับ:
ตัวอย่างหน้าตากราฟการเคลื่อนที่แบบต่างๆที่แมลงวันบินระยะเท่ากันเพราะ T และ d เท่ากัน และรถไม่แซงแมลงวันครับ (T=0.4, d= 16):
หน้าตาโปรแกรมจะเป็นประมาณนี้ครับ โหลดได้ที่นี่นะครับ:
ผมขอแสดงความเสียใจล่วงหน้ากับเด็กๆที่จะโดนตั้งโจทย์การเคลื่อนที่ประหลาดๆของรถทั้งสองคันแล้วถามว่าแมลงวันบินได้ไกลแค่ไหนนะครับ ถ้าเจอในอนาคตก็พยายามหา T (ชนกันเมื่อไร) และ d (ชนกันที่ไหน) ไห้ได้แล้วก็จะหาคำตอบได้ง่ายๆครับ