ทิ้งห่างเรื่องนี้ไปกว่าสี่ปี
วันนี้ได้เวลากลับมาเขียนใหม่
ก็เพราะว่ามัน (และญาติของมัน)
เป็นอัลกอริทึมที่ใช้อยู่ในซอร์ฟแวร์สำเร็จรูปที่คนนิยมใช้กันในปัจจุบัน
(และมักจะใช้กันแบบไม่รู้ว่าภายใต้คำสั่งที่เรียกใช้นั้นมันมีข้อจำกัดอะไรบ้างซ่อนอยู่)
จะเรียกว่าตอนนี้เป็นการปูพื้นฐานให้กับตอนถัดไปก็ได้
การหาคำตอบของสมการพีชคณิตไม่เชิงเส้น
(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 ผลการคำนวณแสดงไว้ในตารางในหน้าถัดไป
ตอนนี้ก็เรียกว่าเปิดตัวละครหลักครบหมดแล้ว
แต่หน้านี้ยังว่างอยู่ครึ่งหน้า
ตอนแรกกะว่าจะถ่ายรูปเต่าที่แวะมาที่บ้านอีกเมื่อเช้านี้มาลง
คิดว่าคงเป็นตัวเดิมที่เคยมาอาศัยอยู่และนำไปปล่อยในสวนข้างบ้าง
สงสัยว่าปีนี้คงจะหนีแล้งมาขออาศัยกินข้าว
แต่พอกินข้าวเที่ยงเสร็จก็หาไม่เจอแล้ว
ไม่รู้ว่าไปมุดอยู่ใต้กองใบไม้แถวไหน
เรียกว่าซ่อนตัวเก่งจริง
ๆ ก็เลยเปลี่ยนเป็นรูปดอกมะเขือจากสวนครัวที่ภรรยาปลูกเอาไว้แทน
:)
:) :)
ไม่มีความคิดเห็น:
แสดงความคิดเห็น