สัปดาห์นี้เด็กๆม.1 รู้จักเขียนฟังก์ชั่นเพื่อทำงานซ้ำๆหรืองานคล้ายๆกันครับ เริ่มจากการสั่งให้คอมพิวเตอร์บวกเลขให้เรา 1+2+3+…+1,000,000:
ถ้าเราจะบวกถึงเลขอื่นๆแทนที่จะถึงหนึ่งล้าน เราก็ต้องเข้าไปเปลี่ยนแปลงตัวโปรแกรมเราเรื่อยๆ วิธีที่ดีกว่าคือเอาการคำนวณซ้ำๆพวกนี้ทำเป็นฟังก์ชั่นที่เราสามารถป้อนค่าบอกมันว่าให้บวกถึงเลขเท่าไร แล้วเราก็เรียกได้ตามใจชอบ:
แบบฝึกหัดในห้องคือให้เด็กๆหัดเขียนฟังชั่นที่รวมกำลังสอง และกำลังสามของตัวเลขต่างๆกันดู
สักพักเด็กๆก็เขียนเป็นฟังก์ชั่นหน้าตาประมาณนี้ (ผมกำหนดชื่อฟังก์ชั่นไว้เป็น sumsqr และ sum3rd ย่อมาจาก sum of square คือบวกเลขยกกำลังสอง และ sum of 3rd power คือบวกเลขยกกำลังสาม):
เราทดลองพิมพ์ค่า n, ผลรวมจาก 1 ถึง n, ผลรวมกำลังสองของ 1 ถึง n, และ ผลรวมกำลังสามของ 1 ถึง n กันดู:
เมื่อผมทำให้เด็กประหลาดใจที่ผมสามารถหาผลรวมของกำลังสามในใจได้เร็วกว่าที่เด็กๆคิด ผมก็บอกเด็กๆว่ามันมีความสัมพันธ์กันอยู่ที่ว่า (1 + 2 + 3 + … + n)2 = 13 + 23 + 33 + … + n3 และ เราหา (1 + 2 + 3 + … + n) ได้ง่ายเพราะเหมือนการจับคู่หัวท้ายแล้วคูณด้วยจำนวนคู่ = 1/2 n (n+1)
ผมถามเด็กๆว่าถ้าเราต้องการคำนวณยกกำลังอื่นๆอีกจะทำอย่างไร ต้องเข้าไปสร้างฟังก์ชั่นใหม่ๆเรื่อยๆไหม ปรากฎว่าเราสามารถสร้างฟังก์ชั่นที่รับค่ายกกำลัง และค่าที่ว่าจะให้รวมถึงแค่ไหนก็สามารถใช้คำนวณยกกำลังอื่นๆได้เลย ไม่ต้องสร้างฟังก์ชั่นใหม่ๆสำหรับกำลังใหม่ๆ หน้าตาก็จะเป็นประมาณนี้:
ผมลองรวมยกกำลัง -2 ดู ให้คำนวณ 1/12 + 1/22 + 1/32 + … + 1/1,000,0002 ดูปรากฎว่าใกล้เคียงกับค่า π2/6 มาก:
เด็กๆก็ตื่นเต้นว่าค่า π มาเกี่ยวข้องกับผลรวมอย่างนี้ได้อย่างไร จริงๆแล้วเมื่อกำลังเป็นเลขคู่ที่เป็นลบจะมีความเกี่ยวข้องกับ Riemann zeta function ที่มีคนค้นพบว่ามีค่า π ติดอยู่ดังนี้ครับ:
เนื่องจากเราไม่สามารถบวกเลขเป็นอนันต์เทอมได้ เราก็บวกไปสิบล้านเทอมเป็นการประมาณเทียบดูกับค่าข้างบนก็ใกล้เคียงกันครับ: