Tag Archives: python

วิทย์ม.ต้น: เรื่องน่ารู้เกี่ยวกับการนอน, เฉลยข้อสอบ Python, คลิป Immune System

วันนี้ผมเล่าเรื่องน่ารู้เกี่ยวกับการนอนหลับให้เด็กๆม.ต้นฟังครับ ปกติเราจะคิดว่าเราต้องนอนเพราะสมองเราต้องพักผ่อนเท่านั้น แต่มีงานวิจัยพบว่าสัตว์ที่ไม่มีสมองเช่นฟองน้ำหรือแมงกระพรุนก็แสดงพฤติกรรมประเภทนอนเหมือนกัน และนอกจากนี้ยังมีงานวิจัยที่ทดลองว่าการอดนอนจนตายในแมลงหวี่นั้น พบสารเคมีตระกูลที่มีออกซิเจนอิสระ (ROS, = reactive oxygen species) ในลำไส้เพิ่มขึ้นเรื่อยๆตามการอดนอนจนอายุขัยสั้นเหลือ 10 วันจากปกติ 30 วัน และถ้าลดปริมาณ ROS ในลำไส้โดยกินสารต้านอนุมูลอิสระหรือให้แมลงหวี่นอน แมลงหวี่ก็จะไม่ตายเร็ว ทำให้เราเข้าใจมากขึ้นว่าการนอนน่าจะวิวัฒนาการมาก่อนสมอง และน่าจะมีหน้าที่เกี่ยวกับเมแทบอลิซึมในเซลล์ต่างๆมาก่อน

รายละเอียดจะเป็นประมาณในลิงก์เหล่านี้ครับ:

  1. Sleep Evolved Before Brains. Hydras Are Living Proof.
  2. The Simplest of Slumbers
  3. การศึกษาสาเหตุของการอดนอนที่ทำให้เสียชีวิต พบว่าไม่ได้เกิดจากสมองแต่อาจเกิดในลำไส้
  4. Sleep Loss Can Cause Death through Accumulation of Reactive Oxygen Species in the Gut
  5. การนอน

จากนั้นเราคุยกันเรื่องข้อสอบที่เด็กๆทำไป ส่วนใหญ่ทำได้ไม่มีปัญหาอะไร แต่มีข้อเขียนโปรแกรมที่เด็กๆทำไม่ค่อยครบกัน เลยทำเฉลยไว้ไห้ดู คำถามคือ:

ผมเฉลยเป็นโปรแกรมบน Colab อยู่ที่นี่

เราดูคลิปและคุยกันเรื่องระบบภูมิคุ้มกัน:

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

วิทย์ม.ต้น: Perseverance Rover จอดที่ดาวอังคาร, หัดไพธอนต่อ

วันนี้เราคุยกันเรื่องเหล่านี้ครับ:

1. ข่าวการลงจอดที่ดาวอังคารโดยยานเพอร์เซเวอแรนซ์ (Perseverance Rover) หรือเพอร์ซี่ ข้อมูลประมาณดังในลิงก์และคลิปเหล่านี้ครับ:

ภาพแรกสุดจากยานสำรวจ Perseverance หลังจากที่ได้ลงจอดบนพื้นผิวของดาวอังคาร เวลาประมาณตีสี่ของเช้าวันที่ 19 กุมภาพันธ์…

Posted by มติพล ตั้งมติธรรม on Thursday, February 18, 2021

2. เด็กรุ่นพี่หัดเขียนโปรแกรมไพธอนต่อ วันนี้เรียนรู้เรื่องการสุ่ม เรื่องพวกนี้: import random, random.randint(), random.choice(), random.random(), random.randrange()

การบ้านให้ไปศึกษา Turtle Graphics แล้วทำแบบฝึกหัด

3. เด็กรุ่นน้องเริ่มหัดเขียนโปรแกรมภาษาไพธอน โหลด Thonny มาใช้เขียนโปรแกรม วันนี้หัดเซฟไฟล์งาน โหลดไฟล์งาน หัดใช้ print(), input(), x = int(input(…)), เอาข้อความ (สตริง) ต่อกัน, หัดใช้ f-string, รู้จัก new line character (\n)

การบ้านให้ไปเขียนโปรแกรมให้ใส่เลขสองตัวแล้วคำนวณผลบวก/ลบ/คูณ/หาร/ยกกำลัง

คอมขยายสมอง (1): ความน่าจะเป็นของสามเหลี่ยม

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

มีคำถามใน YouTube ว่าถ้ามีเส้นตรงหนึ่งเส้น แล้วแบ่งเป็นสามส่วนแบบสุ่มๆ จะมีโอกาสเท่าไรที่ทั้งสามส่วนจะประกอบกันเป็นสามเหลี่ยมได้พอดี:

วิธีในวิดีโอใช้ทฤษฎีบทของวิเวียนนี (Viviani’s Theorem) ที่บอกว่าสำหรับสามเหลี่ยมด้านเท่าใดๆและจุดใดๆภายในสามเหลี่ยมนั้น ผลรวมของระยะห่างจากจุดไปยังด้านทั้งสามของสามเหลี่ยม จะเท่ากับความสูงของสามเหลี่ยม ทฤษฎีบทนี้แสดงว่าเมื่อแบ่งเส้นตรงเป็นสามส่วน ความน่าจะเป็นที่ทั้งสามส่วนจะประกอบเป็นสามเหลี่ยมพอดีคือ 1/4

แต่ถ้าเราไม่เคยรู้จักทฤษฎีบทของวิเวียนนี(หรือวิธีอื่นๆ) เราจะแก้ปัญหานี้ได้อย่างไรได้บ้าง? วิธีแบบหนึ่งก็คือทำการทดลองตรงๆครับ โดยเราทดลองแบ่งเส้นตรงเป็นสามส่วนแบบสุ่มๆหลายๆครั้งแล้วดูว่าสามารถสร้างเป็นสามเหลี่ยมได้กี่ครั้ง อัตราส่วนครั้งที่เป็นสามเหลี่ยมต่อจำนวนครั้งที่ทดลองทั้งหมดจะเป็นคำตอบโดยประมาณให้เราได้

ถ้าเราทดลองด้วยมือ เราก็จะทดลองได้ไม่กี่ครั้งก่อนที่จะเหนื่อยหรือหมดเวลา แต่ถ้าเราสั่งคอมพิวเตอร์ให้ทำงานแทนเราได้ คอมพิวเตอร์จะทดลองให้เราได้อย่างรวดเร็วและไม่เหน็ดเหนื่อย วิธีตระกูลนี้(ที่ให้คอมพิวเตอร์ทำการทดลองต่างๆแทนเราแล้วเราไปดูคำตอบ)เรียกว่า computer simulation

ยกตัวอย่างฟังก์ชั่นภาษาไพธอนที่ทำการทดลองให้เราอาจมีหน้าตาประมาณนี้ จริงๆตัวโปรแกรมมีไม่กี่บรรทัดแต่มีคอมเม้นท์อธิบายเยอะหน่อยเผื่อเป็นประโยชน์สำหรับผู้เรียนรู้ครับ:

import random

def prob_triangle(ntrials):
    """
    ประมาณความน่าจะเป็นที่เส้นตรงที่ถูกแบ่งเป็นสามส่วนแบบสุ่มๆ
    จะสามารถประกอบเป็นสามเหลี่ยมได้
    
    ทำการทดลอง ntrials ครั้ง
    """
    
    # ntriangles เก็บจำนวนครั้งที่ประกอบเป็นสามเหลี่ยมได้
    ntriangles = 0 
    
    # ทำการทดลองแบ่งเส้นตรงความยาว 1 หน่วยเป็นสามส่วน
    # ทั้งหมดntrials ครั้ง
    
    for n in range(ntrials):
        
        # x, y คือตำแหน่งที่เราสุ่มตัดเส้นตรงสองตำแหน่ง
        # ทำให้แบ่งเส้นตรงเป็นสามส่วน
        # เราจะเรียงตำแหน่งให้ x <= y
        # ถ้าไม่เป็นอย่างนั้นเราจะสลับ x และy
        
        x = random.random()
        y = random.random()
        if x > y:
            x, y = y, x
        
        # เมื่อเราสุ่ม x, y มาตัดเส้นตรงได้แล้ว
        # เราจะมีเส้นตรงสามชิ้นยาว x, y-x, และ 1-y
        # เราจะเรียกชิ้นที่ยาวที่สุดว่า longest
        
        longest = max(x, y-x, 1-y)
        
        # ถ้าชิ้นที่ยาวที่สุดมีความยาวไม่เกิน 1/2 ของ
        # ความยาวเส้นตรงดั้งเดิม เราจะสามารถเอา
        # ทั้งสามชิ้นมาประกอบเป็นสามเหลี่ยมได้
        # และเราก็จะเพิ่มจำนวนครั้งที่ประกอบเป็นสามเหลี่ยมสำเร็จ
        
        if longest < 0.5:
            ntriangles += 1
            
         # ประมาณความน่าจะเป็นที่เป็นสามเหลี่ยมสำเร็จ
         # เท่ากับ (จำนวนสามเหลี่ยม)/(จำนวนครั้งที่ทดลอง)
            
    return ntriangles/ntrials

เมื่อเราบอกให้คอมพิวเตอร์ทดลองให้เราหลายๆครั้ง (เช่นในที่นี้คือ 1 แสนครั้ง) เราก็จะได้คำตอบมาประมาณ 1/4 ดังนี้:

ntrials = 100_000
print(f"ทดลองแบ่งเส้นตรงแบบสุ่มๆเป็นสามชิ้นทั้งหมด {ntrials:,} ครั้ง")
print("แล้วดูว่าทั้งสามชิ้นสามารถประกอบเป็นสามเหลี่ยมได้ไหม\n")
print(f"ความน่าจะเป็นที่ได้สามเหลี่ยม = {prob_triangle(ntrials):.2f}")

ผลที่ได้คือ:

ทดลองแบ่งเส้นตรงแบบสุ่มๆเป็นสามชิ้นทั้งหมด 100,000 ครั้ง
แล้วดูว่าทั้งสามชิ้นสามารถประกอบเป็นสามเหลี่ยมได้ไหม

ความน่าจะเป็นที่ได้สามเหลี่ยม = 0.25

วิธีตระกูล computer simulation นี้เป็นวิธีสำคัญที่มนุษยชาติใช้หาคำตอบต่างๆครับ ในหลายๆกรณีมนุษยชาติยังไม่มีความรู้ที่จะหาคำตอบโดยตรงด้วยทฤษฎีต่างๆ ก็หาคำตอบโดยให้คอมพิวเตอร์คำนวณหรือทำการทดลองให้

หวังว่าผู้อ่านจะได้ไอเดียหรือประโยชน์บ้างนะครับ ถ้ามีคำแนะนำหรือข้อสงสัยส่งข้อความอินบ๊อกซ์ไปที่เพจวิทย์พ่อโก้บนเฟซบุ๊คได้ครับ: https://www.facebook.com/witpokosci/

(ตอนต่อไปอยู่ที่ https://witpoko.com/?p=7499 นะครับ)