วันศุกร์ที่ 17 พฤศจิกายน พ.ศ. 2560

รู้ทันนักวิจัย (๘) ลดความถูกต้องของการแก้สมการ เพื่อให้ผลการคำนวณตรงกับข้อมูลที่มี MO Memoir : Friday 17 November 256

"ทำไมถึงเลือกใช้วิธี 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 ที่กว้างขึ้น) ซึ่งการกระทำดังกล่าวเป็นการกระทำที่ไม่ถูกต้อง

และนี่ก็ไม่ใช่ครั้งแรกที่พบกับการกระทำแบบนี้

ใครตามที่คอยฟังแต่ผลและข้อสรุป โดยไม่สนใจว่าผลและข้อสรุปนั้นได้มาด้วยวิธีการอย่างไร ก็จะโดนผู้ทำวิจัยหลอก (รับประทาน) อยู่เรื่อยไป


กรุงเทพมหานครตอน ๕ โมงเย็นของวันวาน ถ่ายจากชั้น ๕ อาคารจอดรถ มองไปทางด้านทิศตะวันตกเฉียงใต้

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