วันอาทิตย์ที่ 2 กุมภาพันธ์ พ.ศ. 2563

การคำนวณเชิงตัวเลข (๒๔) ตัวอย่างการแก้ปัญหา สมการพีชคณิตไม่เชิงเส้นด้วยระเบียบวิธี Müller และ Inverse quadratic interpolation MO Memoir : Sunday 2 February 2563

ทิ้งห่างเรื่องนี้ไปกว่าสี่ปี วันนี้ได้เวลากลับมาเขียนใหม่ ก็เพราะว่ามัน (และญาติของมัน) เป็นอัลกอริทึมที่ใช้อยู่ในซอร์ฟแวร์สำเร็จรูปที่คนนิยมใช้กันในปัจจุบัน (และมักจะใช้กันแบบไม่รู้ว่าภายใต้คำสั่งที่เรียกใช้นั้นมันมีข้อจำกัดอะไรบ้างซ่อนอยู่) จะเรียกว่าตอนนี้เป็นการปูพื้นฐานให้กับตอนถัดไปก็ได้
    
การหาคำตอบของสมการพีชคณิตไม่เชิงเส้น (nonlinear algebraic equation) มีด้วยกันหลากหลายวิธี วิธีการ Secant นั้นก็เป็นวิธีการหนึ่งที่มีการนำไปใช้ในซอร์ฟแวร์สำเร็จรูปที่นิยมให้กันอยู่ในปัจจุบัน วิธีการ Secant นี้เริ่มด้วยการเดาจุดตั้งต้นขึ้นมาก่อน ๒ จุด (จุดที่ ๑ และ ๒) จากนั้นก็คำนวณว่าเส้นตรงที่ลากผ่านสองจุดนี้ไปตัดแกน x ที่ตำแหน่งใด (จุดที่ ๓) จากนั้นคำนวณค่า y ที่จุดนั้น ถ้าพบว่าจุดที่ ๓ ที่ได้มานี้ไม่ใช่คำตอบ ก็โยนจุดที่ ๑ ทิ้งไป แล้วเริ่มต้นคำนวณใหม่ว่าเส้นตรงที่จากผ่านจุดที่ ๒ และ ๓ นั้นไปตัดแกน x ที่ตำแหน่งใด (จุดที่ ๔) ทำอย่างนี้ซ้ำไปเรื่อย ๆ จนกว่าจะพบคำตอบ
    
Müller นำเสนอวิธีใหม่ในปีค.. ๑๙๕๖ (.. ๒๔๙๙) วิธีการของ Müller นั้นคล้ายกับวิธีการ Secant เพียงแต่วิธีการ Müller ใช้จุดทั้งสิ้น ๓ จุด จากนั้นสร้างสมการฟังก์ชันพหุนามกำลัง 2 (Quadratic eqaution หรือ Equation of degree 2) ที่ลากผ่านจุด ๓ จุดนั้น แล้วคำนวณว่ารากของสมการกำลัง 2 นั้นอยู่ที่ตำแหน่งใด (คือจุดที่กราฟของสมการกำลัง 2 ตัดแกน x) จากนั้นคำนวณค่า y ที่จุดนั้น ถ้าพบว่าจุดที่ ๔ ที่ได้มานี้ไม่ใช่คำตอบ ก็โยนจุดที่ ๑ ทิ้งไป แล้วเริ่มต้นคำนวณใหม่ว่าเส้นโค้งสมการกำลัง 2 ที่จากผ่านจุดที่ ๒, ๓ และ ๔ นั้นไปตัดแกน x ที่ตำแหน่งใด (จุดที่ ๕) ทำอย่างนี้ซ้ำไปเรื่อย ๆ จนกว่าจะพบคำตอบ รูปที่ ๑ ข้างล่างเป็นการเปรียบเทียบการทำงานระหว่างวิธี Secant และ Müller
  
รูปที่ ๑ เปรียบเทียบการทำงานระหว่างวิธี Secant และ Müller

หลังจากที่เดาจุดเริ่มต้นการคำนวณขึ้นมา ๓ จุด ( x0, x1 และ x2 ) การคำนวณจุดที่สมการกำลังสองไปตัดแกน x (จุด x3) ตามระเบียบวิธี Müller ทำได้ดังนี้
เมื่อ sign(b) คือเครื่องหมายของตัวแปร b ค่านี้จะเท่ากับ -1 ถ้า b น้อยกว่าศูนย์ และเท่ากับ 1 ถ้า b มากกว่าศูนย์ (อันที่จริงรากของสมการกำลัง 2 นั้นมีสองค่า ขึ้นอยู่กับเครื่องหมายหน้า square root ของตัวหารว่าเป็นบวกหรือลบ แต่ในที่นี้การที่ให้มันมีเครื่องหมายเดียวกับค่า b ก็เพื่อให้ส่วนที่เป็นตัวหารมีขนาดใหญ่ จะได้ลดปัญหาการปัดเศษ)
  
วิธีการหนึ่งที่เป็นญาติกับวิธีการ Müller คือ Inverse quadratic interpolation ความแตกต่างอยู่ตรงที่แทนที่จะใช้จุดข้อมูล ๓ จุดสร้างฟังก์ชันสำหรับคำนวณค่า y ที่ตำแหน่ง x ใด ๆ ก็เปลี่ยนเป็นสร้างฟังก์ชันสำหรับคำนวณค่า x ที่ตำแหน่ง y ใด ๆ แทน โดยตำแหน่งที่กราฟตัดแกน x ก็คือตำแหน่งที่ y เท่ากับศูนย์
  
หลังจากที่เดาจุดเริ่มต้นการคำนวณขึ้นมา ๓ จุด (x0, f(x0)), (x1, f(x1)) และ (x2, f(x2)) การคำนวณจุดที่กราฟตัดแกน x หรือจุด x3 คำนวณได้จากสมการต่อไปนี้



ถ้าเปรียบเทียบกับรูปแบบสมการกับรูปแบบของ Müller แล้วจะเห็นว่ารูปแบบ Inverse quadratic interpolation มีความซับซ้อนที่น้อยกว่า
  
จุดเด่นข้อหนึ่งของวิธีการของ Müller หรือ Inverse quadratic interpolation คืออัตราการลู่เข้าหาคำตอบ (Rate of convergence) ที่อยู่ที่ประมาณ 1.84 ซึ่งสูงกว่าวิธีการ Secant ที่อยู่ที่ประมาณ 1.62 ในขณะที่วิธีการ Newton-Raphson นั้นจะอยู่ที่ 2.0 และจุดเด่นอีกข้อหนึ่งของวิธีการ Müller คือการที่สามารถหารากที่เป็นจำนวนเชิงซ้อนได้
   
แต่สิ่งหนึ่งที่ผู้ใช้ต้องพึงระลึกอยู่เสมอคือ วิธีการหาคำตอบสมการไม่เชิงเส้น ไม่ว่าจะเป็นวิธีการใดก็ตาม ต่างไม่รับรองว่าจะหาคำตอบเจอ แม้ว่าคำตอบนั้นจะมีอยู่ หรือหาคำตอบเจอทุกคำตอบ ในกรณีที่มีคำตอบที่ทำให้สมการเป็นจริงนั้นมากกว่า ๑ คำตอบ

ทีนี้เราลองมาดูตัวอย่างการใช้การ สมการข้างล่างเป็นตัวอย่างหนึ่งของสมการคำนวณค่าสัมประสิทธิ์ความเสียดทาน (friction coefficient) ของการไหลในท่อ

เมื่อ f คือค่าสัมประสิทธิ์ความเสียดทานและ Re คือ Reynolds number โดยจะทำการหาค่า f ที่ Re = 1000

การคำนวณกระทำโดยใช้โปรแกรม Spredsheet OpenOffice 4.1.7 บนระบบปฏิบัติการ 64 bit การคำนวณเริ่มต้นโดยเดาค่า x0 = 0.1, x1 = 0.07 และ x2 = 0.02 ผลการคำนวณแสดงไว้ในตารางในหน้าถัดไป

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


ไม่มีความคิดเห็น: