"ทำไมถึงเลือกใช้วิธี
Crank-Nicholson"
เพราะคำถามนี้ของผม
ทำให้ได้เห็นอะไรที่ไม่ชอบมาพากลในงานวิจัยทางด้าน
simulation
ของเขา
สำหรับผู้ที่ใช้โปรแกรมสำเร็จรูปที่ใช้ระเบียบวิธีการคำนวณเชิงตัวเลขในการแก้ปัญหาระบบสมการอนุพันธ์สามัญ
ปัญหาเงื่อนไขค่าขอบเขต
(Ordinary
Differential Equation - Initial Value Problem หรือที่ย่อว่า
ODE-IVP)
เทคนิคหลักที่ใช้กันมากที่สุดเห็นจะได้แก่เทคนิคที่มีพื้นฐานมาจาก
4th
order Runge-Kutta
ด้วยเหตุผลที่ว่าวิธีนี้สามารถให้คำตอบที่มีความถูกต้องสูงโดยไม่จำเป็นต้องใช้
step
size ที่แคบมากดังเช่นระเบียบวิธีอื่น
และด้วยการที่มันเป็นวิธีการในตระกูล
explicit
method ทำให้การแก้สมการทำได้ง่าย
(แม้ว่าจะเป็นสมการไม่เชิงเส้นก็ตาม)
และเทคนิคนี้ก็สามารถแก้ปัญหาส่วนใหญ่ได้ดี
แต่ในกรณีที่โจทย์ที่ทำการแก้นั้นมีปัญหาเรื่องเสถียรภาพของการคำนวณ
(ค่อนข้างจะไวต่อการสะสมค่าความคลาดเคลื่อน
(หรือ
error)
ที่เกิดจากการคำนวณในแต่ละ
step)
การหันไปใช้วิธีการในกลุ่ม
multi
step หรือในตระกูล
semi-implicit
หรือ
implicit
method จะให้การควบคุมการสะสม
error
ที่เกิดขึ้นจากการคำนวณในแต่ละ
step
ที่ดีกว่า
เวลาที่ผมสอบวิทยานิพนธ์งานด้าน
simulation
นั้น
ผมจะถามผู้ทำวิจัยเสมอว่าจะเอาผลที่คำนวณได้นั้นไปทำอะไร
ถ้าหากต้องการเอาไปใช้ในการออกแบบหรือเปรียบเทียบกระบวนการ
ผมจะให้น้ำหนักไปที่ความถูกต้องของแบบจำลองและเทคนิคที่ใช้ในการแก้ปัญหาเป็นหลัก
เรื่องเวลาที่ต้องใช้ในการคำนวณเป็นเรื่องรองลงมา
(กล่าวคือแม้ว่าจะต้องใช้
step
size ที่แคบ
ทำให้เสียเวลาในการคำนวณมาก
แต่เพื่อให้ได้คำตอบที่ถูกต้องของระบบสมการที่ตั้งขึ้น
ก็เป็นสิ่งที่จำเป็นต้องทำ)
แต่ถ้าจะนำไปใช้ในการควบคุมกระบวนการที่เกิดขึ้นตามเวลาจริง
ผมจะให้น้ำหนักไปที่เวลาที่ต้องใช้ในการคำนวณเป็นหลัก
เพราะการที่รู้ว่าจะเกิดอะไรอย่างถูกต้องแต่เมื่อเหตุการณ์จริงนั้นผ่านไปแล้ว
มันไม่สามารถใช้ประโยชน์อะไรได้
การที่รู้ว่ามันจะเกิดอะไร
การเปลี่ยนแปลงมีขนาดประมาณเท่าใด
ก่อนที่ปรากฏการณ์นั้นจะเกิดขึ้นจริง
โดยยังมีเวลาเหลือในตัดสินใจว่าจะทำอะไรเพื่อรองรับการเปลี่ยนแปลงที่จะเกิดขึ้น
แม้ว่าขนาดการเปลี่ยนแปลงที่ได้จากการทำนายนั้นมีความคลาดเคลื่อนอยู่บ้างปริมาณ
ก็ถือว่าเป็นเรื่องที่ยอมรับได้
สิ่งที่พบในการสอนสัมมนานิสิตปริญญาเอกวันนั้นคือ
ดูเหมือนว่าถ้าทำการหาคำตอบจนค่าที่ได้นั้นเป็นค่าที่ถูกต้องของระบบสมการคณิตศาสตร์ที่เขาตั้งขึ้นมาเพื่อใช้อธิบายปรากฏการณ์ของกระบวนการ
คำตอบที่ได้จะ "ไม่ตรง"
กับข้อมูลจริงที่มีอยู่
ซึ่งแสดงให้เห็นว่าตัวระบบสมการของแบบจำลอง
หรือพามิเตอร์ที่ใช้ในแบบจำลองนั้น
มีความไม่ถูกต้องอยู่
ซึ่งก็ควรจะต้องไปปรับแก้ที่ตัวสมการที่สร้างขึ้น
หรือไม่ก็พารามิเตอร์ที่ใช้
ซึ่งจะทำให้ไม่เพียงแต่เป็นการพิสูจน์ว่าแบบจำลองที่สร้างขึ้นและพารามิเตอร์ที่ใช้นั้นสอดรับกับปรากฏการณ์จริง
แต่ยังให้ความเชื่อมั่นในการนำเอาแบบจำลองและพารามิเตอร์เหล่านั้น
ไปใช้ทำนายว่าจะเกิดอะไรขึ้นบ้างเมื่อระบบได้รับการรบกวน
(หรือมีการเปลี่ยนแปลง
input)
แต่เขากลับไปใช้วิธีไปลด
"ความถูกต้อง"
ของคำตอบที่ได้จากการแก้ปัญหาระบบสมการ
เพื่อให้ค่าที่คำนวณได้นั้น
(ซึ่งประกอบด้วย
คำตอบที่ถูกต้องของสมการคณิตศาตร์ที่ใช้สร้างแบบจำลอง
บวกกับความคลาดเคลื่อนจากการคำนวณ)
ใกล้เคียงกับข้อมูลที่มีอยู่
แล้วก็รีบอ้างว่าแบบจำลองที่สร้างขึ้นและพารามิเตอร์ที่นำมาใช้นั้น
สามารถใช้แทนปรากฏการณ์จริงได้
(ด้วยการเทียบกับข้อมูลที่มีอยู่)
และสามารถใช้ทำนายการเปลี่ยนแปลงของกระบวนการได้
ซึ่งเป็นสิ่งที่ไม่ถูกต้อง
รูปที่
๑ คำตอบของสมการ dc/dt
= -0.25c คือเส้นทึบสีน้ำเงิน
ส่วนคำตอบที่ถูกต้องของสมการ
dc/dt
= -0.2c คือเส้นประสีม่วงเส้นบนสุด
แต่ถ้าทำการแก้หาคำตอบของสมการ
dc/dt
= -0.2c ด้วยระเบียบวิธี
Crank-Nicholsonและใช้ค่า
Δt
ต่าง
ๆ กันจะพบว่าเมื่อใช้ Δt
= 7 จะได้ค่าออกมาดูใกล้เคียงกับคำตอบของสมการ
dc/dt
= -0.25c แต่นี่ไม่ใช่การกระทำที่ถูก
เพราะถ้าลดค่า Δt
ลงไปเรื่อย
ๆ จนคำตอบที่ได้ลู่เข้าหาคำตอบของสมการที่นำมาสร้างแบบจำลอง
(คือสมการ
dc/dt
= -0.2c)
จะพบว่าแท้จริงแบบจำลองที่นำมาใช้นั้นมีความคลาดเคลื่อนสูงอยู่
ในที่นี้วาดกราฟผลการคำนวณบนสเกล
linear-log
เพื่อให้เห็นภาพความแตกต่างในช่วงความเข้มข้นต่ำได้ชัดเจน
เพื่อให้เห็นภาพจะขอยกตัวอย่างโดยสมมุติว่าเรากำลังศึกษาอัตราการเกิดปฏิกิริยาของสารตั้งต้นตัวหนึ่ง
ที่ค่าอัตราการเกิดปฏิกิริยาที่แท้จริงเป็นไปตามสมการ
dc/dt
= -0.25c (เมื่อ
c
คือความเข้มข้น
และ t
คือเวลา)
ซึ่งให้ค่าความเข้มข้นของสาร
ณ เวลาใด ๆ เป็นไปตามเส้นทึบสีน้ำเงินในรูปที่
๑ แต่เรากลับไปคิดว่าอัตราการเกิดปฏิกิริยานั้นเป็นไปตามสมการ
dc/dt
= -0.2c (คือค่า
rate
constant ที่ใช้ในแบบจำลองนั้นมีค่าเพียงแค่
80%
ของค่าแท้จริง)
จากนั้นก็ทำการแก้สมการ
dc/dt
= -0.2c ด้วยระเบียบวิธี
Crank-Nicholson
เพื่อหาค่า
c
ที่เวลาต่าง
ๆ กัน ซึ่งจะได้ว่า
c(t+Δt)
= c(t).(1 - 0.2.Δt/2)/(1
+ 0.2.Δt/2)
ซึ่งจะพบว่าถ้าลดค่า
Δt
ให้ลดต่ำลง
ค่าที่คำนวณได้จากระเบียบวิธี
Crank-Nichloson
จะลู่เข้าหาคำตอบที่ถูกต้องของสมการ
dc/dt
= -0.2c (คือเส้นสีม่วงในรูปที่
๑)
ซึ่งเป็นการแสดงว่าแบบจำลองที่ตั้งขึ้นนั้นมีความไม่ถูกต้องอยู่
เพราะคำตอบที่ถูกต้องของสมการที่ใช้ในการสร้างแบบจำลองนั้นให้ผลที่แตกต่างไปจากค่าที่เป็นจริง
แต่สิ่งที่นิสิตผู้นั้น
(นิสิตปริญญาเอกปี
๔)
ทำก็คือเขาไปลดค่าระดับความถูกต้องของคำตอบที่ต้องการในตัวโปรแกรมให้ลดต่ำลง
(ซึ่งมันส่งผลต่อค่า
step
size ที่ใช้ในการคำนวณ
ทำให้สามารถใช้ step
size ที่กว้างขึ้น)
โดยให้เหตุผลว่าเพื่อให้ผลการคำนวณที่ได้นั้นมันใกล้เคียงกับข้อมูลจริง
และช่วยลดเวลาในการคำนวณ
(ผลจากการที่ใช้
step
size ที่กว้างขึ้น)
ซึ่งการกระทำดังกล่าวเป็นการกระทำที่ไม่ถูกต้อง
และนี่ก็ไม่ใช่ครั้งแรกที่พบกับการกระทำแบบนี้
ใครตามที่คอยฟังแต่ผลและข้อสรุป
โดยไม่สนใจว่าผลและข้อสรุปนั้นได้มาด้วยวิธีการอย่างไร
ก็จะโดนผู้ทำวิจัยหลอก
(รับประทาน)
อยู่เรื่อยไป
กรุงเทพมหานครตอน
๕ โมงเย็นของวันวาน ถ่ายจากชั้น
๕ อาคารจอดรถ มองไปทางด้านทิศตะวันตกเฉียงใต้
ไม่มีความคิดเห็น:
แสดงความคิดเห็น