Category Archives: math

โจทย์แมลงวันบินระหว่างรถ (Two Trains Puzzle) และโปรแกรมที่เกี่ยวข้อง

(เขียนเพื่อรวบรวมโพสท์ต่างๆที่กระจายอยู่บน 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, ระยะทางที่แมลงวันบินจะเท่ากับ:

S = ระยะทางที่แมลงวันบิน d = ตำแหน่งที่รถชนกัน T = เวลาที่รถชนกัน V1, V2 คืออัตราเร็วที่แมลงวันบินจากรถ A ไป B และจาก B ไป A
S = ระยะทางที่แมลงวันบิน d = ตำแหน่งที่รถชนกัน T = เวลาที่รถชนกัน V1, V2 คืออัตราเร็วที่แมลงวันบินจากรถ  A ไป  B และจากรถ  B ไป  A

ทั้งนี้รถทั้งสองคันต้องไม่เคยวิ่งแซงแมลงวันด้วยนะครับ (แปลว่าขนาด slope ของกราฟการเคลื่อนที่ของรถตอนแมลงวันไปถึงต้องไม่มากกว่าอัตราเร็วตอนแมลงวันบินหนีกลับมา)

วิธีแก้สมการก็ง่ายๆตรงไปตรงมาถ้าทำตามแบบอาจารย์สุจินต์ครับ ไม่ต้องบวกอนุกรมอนันต์ เป็นสมการเชิงเส้นสองตัวแปรสองสมการ:

T = เวลาที่รถชนกัน d = ตำแหน่งที่รถขนกัน t1 = เวลาทั้งหมดที่บินไปทางขวา t2 = เวลาทั้งหมดที่บินไปทางซ้าย
T = เวลาที่รถชนกัน
d = ตำแหน่งที่รถชนกัน
t1 = เวลาทั้งหมดที่บินไปทางขวา
t2 = เวลาทั้งหมดที่บินไปทางซ้าย

 

อันนี้เป็นสรุปในกระดาษทดหลังจากวาดกราฟดูไปเยอะๆครับ:

ตัวอย่างหน้าตากราฟการเคลื่อนที่แบบต่างๆที่แมลงวันบินระยะเท่ากันเพราะ T และ d เท่ากัน และรถไม่แซงแมลงวันครับ (T=0.4, d= 16):

หน้าตาโปรแกรมจะเป็นประมาณนี้ครับ โหลดได้ที่นี่นะครับ:

ผมขอแสดงความเสียใจล่วงหน้ากับเด็กๆที่จะโดนตั้งโจทย์การเคลื่อนที่ประหลาดๆของรถทั้งสองคันแล้วถามว่าแมลงวันบินได้ไกลแค่ไหนนะครับ ถ้าเจอในอนาคตก็พยายามหา T (ชนกันเมื่อไร) และ d (ชนกันที่ไหน) ไห้ได้แล้วก็จะหาคำตอบได้ง่ายๆครับ 

การหารโดยใช้บวกลบคูณเท่านั้น

หาค่า 1/5 โดยใช้แค่การคูณและการลบ
หาค่า 1/5 โดยใช้แค่การคูณและการลบ
ตอนผมเรียนวิธีแก้สมการของนิวตัน ผมพบว่าเราสามารถใช้วิธีนี้หาค่าของการหารโดยใช้ขบวนการบวกลบและคูณเท่านั้น พบว่านักเรียนหลายๆคนไม่ทราบเรื่องนี้เลยมาบันทึกไว้ครับ
 

สมมุติว่าเราต้องการหาผลหาร B/A แล้วเราใช้ได้แต่การบวก การลบ การคูณเท่านั้น เราจะทำอย่างไร

เราสังเกตว่า B/A = B คูณกับหนึ่งหารด้วย A = B x 1/A
ดังนั้นถ้าเราหาค่า 1/A ได้ เราก็เอา 1/A ไปคูณกับ B แล้วจะได้ผลลัพธ์ B/A นั่นเอง

วิธีหา 1/A ด้วยวิธีของนิวตันก็คือการหาค่า x ที่ทำให้สมการ f(x) = A-1/x = 0 เป็นจริง ค่า x ที่ได้จะมีค่าเท่ากับ 1/A พอดี

วิธีการของนิวตันบอกว่า ถ้าจะแก้สมการ f(x) = 0 ให้เราเดาค่า x มาสักค่า (เรียกมันว่า x0) ก็แล้วกัน แล้วค่า x อันต่อไป (เรียกมันว่า x1) ที่น่าจะทำให้ f(x) ใกล้ศูนย์มากขึ้น ควรจะคำนวณอย่างนี้ครับ:

x1 = x0 – f(x0)/f'(x0) โดยที่ f'(x) คือ derivative ของ f(x) หรือค่าความชันของกราฟ f ที่ x ครับ

ถ้าค่า x1 ทำให้ f(x) ไม่ใกล้ 0 พอ เราก็หา x2, x3, x4, … ไปเรื่อยๆจนเราพอใจว่าค่า f(xn) ใกล้ 0 พอแล้ว โดยที่ xn หาได้จาก xn-1 ดังนี้ครับ:

xn = xn-1 – f(xn-1)/f'(xn-1)

ในกรณีที่ f(x) = A-1/x อย่างของเรา f'(x) = x-2 ดังนั้น

xn = xn-1 – (A- 1/xn-1)/xn-1-2

หรือ

xn = 2 xn-1 – A xn-12 ซึ่งใช้แค่การคูณและการลบเท่านั้น ไม่มีการหาร

ยกตัวอย่างเช่น ถ้าเราจะหาค่า 1/5 เราก็ให้ค่า A = 5 แล้วเราก็เดาค่าเริ่มต้น x0 ว่าเป็นสัก 0.1 แล้วหาค่า x1, x2, x3 ไปเรื่อยๆด้วยสมการ xn = 2 xn-1 – A xn-12
จะได้ว่า

x1 = 0.15
x2 = 0.1875
x3 = 0.199219
x4 = 0.199997
x5 = 0.2
x6 = 0.2

พอค่า x ไม่เปลี่ยนแล้วเราก็ได้คำตอบว่า 1/A = 1/5 = 0.2 ตามที่มันควรจะเป็นนั่นเองครับ

สอนวิทย์มัธยม 1: หัดใช้คาลิเปอร์ เข้าใจปริมาณเล็กๆ เริ่มคุยเรื่องวิวัฒนาการ

สัปดาห์นี้ผมคุยกับเด็กๆม.1 เรื่องการพยายามเข้าใจขนาดเล็กๆและเริ่มเรื่องวิวัฒนาการครับ

เราคุยกันเรื่องการบ้านสัปดาห์ที่แล้วที่เด็กๆก็พอทำได้ มีขั้นตอนขบวนการหาคำตอบใช้ได้ คำตอบถูกบ้างผิดบ้าง แต่ก็มีขั้นตอนการคิดว่าทำไมถึงเป็นคำตอบดังกล่าว

เราลองใช้คาลิเปอร์ดิจิตัลวัดความหนาสิ่งต่างๆกันครับ คาลิเปอร์ที่ใช้เป็นแบบอ่านตัวเลขได้ง่ายๆ วัดได้ละเอียดถึง 0.01 mm  ถ้าคาลิเปอร์ไม่ใช่ระบบตัวเลขแต่เป็นแบบเทียบกับมาตรความยาว ควรดูคลิปนี้สำหรับวิธีใช้ครับ:

เราวัดความหนากระดาษได้ประมาณ 0.09 ถึง 0.10 mm ครับ Continue reading สอนวิทย์มัธยม 1: หัดใช้คาลิเปอร์ เข้าใจปริมาณเล็กๆ เริ่มคุยเรื่องวิวัฒนาการ