แก้สมการด้วยวิธีของนิวตัน

 
มีเด็กๆที่สนใจคณิตศาสตร์มาถามผมว่าสมการทั่วๆไปแก้ออกมาเป๊ะๆไม่ได้แล้วเราทำอย่างไร ผมก็บอกว่าสมการส่วนใหญ่เราต้องหาคำตอบด้วยการประมาณเอาครับ ซึ่งวิธีอันหนึ่งที่เราสามารถใช้ได้ง่ายๆก็คือวิธีของนิวตัน ข้างล่างนี้เป็นกระทู้ที่ผมเขียนไว้ที่ Mahidol Physics Educational Center ครับ:

******

สำหรับปัญหาที่เราแก้สมการโดยตรงไม่ได้ เราต้องแก้ด้วยวิธีประมาณด้วยตัวเลขครับ วิธีที่ใช้กันบ่อยๆวิธีหนึ่งก็คือวิธีการของนิวตัน (Newton’s method: http://en.wikipedia.org/wiki/Newton’s_method) ครับ

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

x1 = x0 – f(x0)/f'(x0) โดยที่ f'(x) คือ derivative ของ f(x) ครับ

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

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

ถ้าจะทำการคำนวณด้วยวิธีของนิวตันใน Mathematica สามารถทำอย่างนี้ครับ:

newtonSolve[f_, guess_, steps_] := NestList[ #1 – f[#1]/f'[#1] &, guess, steps]

f คือฟังค์ชั่นที่เราจะหา f(x) = 0
guess คือค่าที่เราเดาตอนแรกว่า f(guess) น่าจะไม่ห่างจาก 0 นัก
steps คือจำนวนครั้งที่เราจะทำการทำวิธีของนิวตันซำ้ๆกัน

ยกตัวอย่างเช่น เราจะหาค่ารูทที่สองของสอง เราก็เขียนสมการ f(x) = x^2 -2 = 0 ก่อน เพราะค่า x เท่ากับรูทที่สองของสองจะแก้สมการนั้นพอดี:

f[x_] := x^2 – 2

แล้วเราก็เรียก newtonSolve ด้วยฟังค์ชั่น f โดยเดาค่า guess = 1 และให้ทำซ้ำสักห้าครั้ง:

newtonSolve[f, 1, 5]

แล้วเราก็ได้ผลดังนี้: {1, 3/2, 17/12, 577/408, 665857/470832, 886731088897/627013566048}

Mathematica ทำการคำนวณให้เป็นค่าเศษส่วนไม่มีทศนิยม เพราะเราเดาด้วยค่า 1 ซึ่งเป็นจำนวนที่ไม่มีการประมาณเข้ามาเกี่ยวข้อง ถ้าเราต้องการคำตอบเป็นเลขทศนิยม เราก็ควรเดาด้วยค่า 1.0 ดังนี้:

newtonSolve[f, 1.0, 5]

แล้วเราก็จะได้ผลดังนี้: {1., 1.5, 1.41667, 1.41422, 1.41421, 1.41421} ซึ่งเราจะเห็นว่า 1.41421 นั้นเป็นค่าประมาณของรูทที่สองของสองได้ดีทีเดียว

นักศึกษาลองไปทดลองดูครับ

มีใครอยากลองอธิบายว่า newtonSolve[f_, guess_, steps_] := NestList[ #1 – f[#1]/f'[#1] &, guess, steps] ทำงานอย่างไรใน Mathematica ไหมครับ เป็นการฝึกความเข้าใจเรื่อง Pure function และ Functional programming ครับ

******

ความเฉื่อยครองโลก

ถ้าท่านได้รับข้อความเหล่านี้ทางอีเมล์แต่ไม่เห็นวิดีโอคลิป เข้ามาดูที่ https://witpoko.com/ นะครับ)
(คราวที่แล้วเรื่องเล่นกับการหมุนที่นี่ครับ)
 

 
วันนี้เป็นอีกวันอังคารที่ผมได้เข้าไปทำการทดลองวิทยาศาสตร์กับเด็กๆกลุ่มบ้านเรียนปฐมธรรมและเด็กๆอนุบาลบ้านพลอยภูมิอีกครั้งครับ คราวนี้เราทำการทดลองเกี่ยวกับ “ความเฉื่อย” ครับ
 
“ความเฉื่อย” หรือ Inertia (อ่านว่า อิ-เนอร์-เชียะ) เป็นคุณสมบัติของวัตถุทุกๆอย่างครับ เป็นคุณสมบัติของวัตถุต่างๆที่ไม่อยากเปลี่ยนแปลงการเคลื่อนที่ของมัน ถ้าอยู่เฉยๆก็จะอยู่เฉยๆไปเรื่อยๆจนมีอะไรมาทำอะไรกับมัน ถ้าเคลื่อนที่อยู่แล้วก็ไม่อยากหยุด ไม่อยากวิ่งเร็วขึ้น ไม่อยากเลี้ยว ถ้าจะทำให้หยุด หรือเร็วขึ้น หรือเลี้ยว ต้องใช้แรงมากระทำกับมัน
 
เราเรียกปริมาณความเฉื่อยของวัตถุแต่ละชิ้นว่า “มวล” ของวัตถุ บนโลกถ้าวัตถุไหนมีมวลมาก นำ้หนักของมันก็มากตาม แต่ในอวกาศไกลๆจากโลก แม้ว่าวัตถุนั้นจะมีน้ำหนักน้อยมากๆ (เพราะน้ำหนักคือแรงดึงดูดจากโลกมีค่าน้อยลงเมื่อห่างจากโลก) มวลหรือความเฉื่อยของมันก็ยังมี และทำให้วัตถุไม่ค่อยอยากเปลี่ยนแปลงการหยุดนิ่งหรือการเคลื่อนที่ของมัน ถ้าจะเปลี่ยนแปลง ก็ต้องมีแรงอะไรไปผลักดันดูดดึงมัน

Continue reading ความเฉื่อยครองโลก

เล่นกับการหมุน

ถ้าท่านได้รับข้อความเหล่านี้ทางอีเมล์แต่ไม่เห็นวิดีโอคลิป เข้ามาดูที่ https://witpoko.com/ นะครับ)
(คราวที่แล้วเรื่องเอาแรงโน้มถ่วงมาเล่นที่นี่ครับ)
 
 
วันนี้เป็นอีกวันอังคารที่ผมได้เข้าไปทำการทดลองวิทยาศาสตร์กับเด็กๆกลุ่มบ้านเรียนปฐมธรรมและเด็กๆอนุบาลบ้านพลอยภูมิครับ ตอนแรกผมจะทำการทดลองเรื่องโคมไฟลอยที่เห็นในงานวันที่ 5 ธันวา แต่หลังจากทดลองด้วยต้วเองแล้วทำโคมไหม้ไฟจึงเปลี่ยนแผนครับ กลายเป็นว่าคราวนี้เราทำการทดลองเกี่ยวกับการหมุนสองสามอย่าง
 
เนื่องจากคราวที่แล้วผมบอกเด็กๆว่าของทุกอย่างจะมีแรงดึงดูดซึ่งกันและกันจากแรงโน้มถ่วง และสาเหตุที่ดวงจันทร์ไม่พุ่งเข้าชนโลกก็เพราะดวงจันทร์มีความเร็วออกไปทางข้างๆเร็วพอ พอจะตกชนโลกจึงตกลงมาไม่โดนเสียที กลายเป็นโคจรรอบโลกไป ผมจึงคิดหาการทดลองมาให้เด็กๆดูว่าของที่ดูดกัน ไม่จำเป็นต้องชนกันอย่างไรมาให้เด็กดู

Continue reading เล่นกับการหมุน

บันทึกกิจกรรมวิทยาศาสตร์สำหรับเด็กๆ อยากให้คุณพ่อคุณแม่คุณครูเอาไปประยุกต์เล่นกับเด็กๆเยอะๆครับ :-)