วันพฤหัสบดีที่ 24 สิงหาคม พ.ศ. 2566

การคำนวณเชิงตัวเลข (๓๙) ข้อพึงระวังในการใช้ฟังก์ชันพหุนามในการประมาณค่าในช่วง (๓) MO Memoir : Thursday 24 August 2566

ในงานวิศวกรรม บ่อยครั้งที่เรามีข้อมูลอยู่ในรูปของจุดข้อมูล (x,y) แต่เราต้องการใช้ข้อมูล (y) ณ ตำแหน่ง x ที่อยู่ระหว่างจุดข้อมูล (x,y) ที่เรามีอยู่ การหาค่า y ณ ตำแหน่งดังกล่าวสามารถหาได้ด้วยการใช้เทคนิคการประมาณค่าในช่วง (interpolation) ที่ปัจจุบันสามารถทำได้ด้วยการใช้โปรแกรมสำเร็จรูปต่าง ๆ วาดกราฟแล้วอ่านค่า (ถ้าไม่ต้องการละเอียดมาก) หรือสร้างฟังก์ชันสำหรับคำนวณค่าที่พิกัด x ต่าง ๆ ขึ้นมาก (ทำฟรีแบบออนไลน์ก็ได้)

รูปที่ ๑ กราฟอุณหภูมิและความหนาแน่นของ CO2 ที่ความดัน 200 bar.a เขียนด้วยโปรแกรม spread sheet ของ OpenOffice 4.1.14 โดยเลือกชนิดกราฟเป็น x-y scatter และให้ลากเชื่อมต่อจุดด้วยเส้นเรียบ โดยตั้งคุณสมบัติของเส้นเป็น ค่า Default ของโปรแกรม (Cubic spline ความละเอียด 20) ในการลากเส้นเชื่อมจุด จะเห็นว่าในช่วงอุณหภูมิตั้งแต่ 90-500ºC เส้นไม่ค่อยจะราบเรียบเท่าใดนัก ข้อมูลนำมาจากเอกสาร "Properties of Carbon Dioxide" ของ Ihre Messer Group GmbH

สิ่งสำคัญเมื่อได้ค่า y ณ ตำแหน่งที่ต้องการมาแล้ว เราจะมั่นใจได้อย่างไรว่าค่าที่ได้มานั้นมีความน่าเชื่อถือในระดับไหน เพราะจะว่าไปด้วยการเปลี่ยนวิธีการสร้างกราฟหรือเลือกจุดที่ใช้ในการสร้างฟังก์ชันประมาณค่าในช่วง ก็มีสิทธิ์ที่จะได้ผลออกมาแตกต่างกันมากได้ และนี่คือหัวข้อที่นำมาเล่าในวันนี้ โดยขอยกตัวอย่างกรณีความหนาแน่นของแก๊สคาร์บอนไดออกไซด์ (CO2) ที่ความดัน 200 bar.a โดยจะคำนวณหาค่าที่อุณหภูมิ 120ºC จากจุดข้อมูลที่มีอยู่คือ 50, 60, 70, 80, 90, 100, 200, 300, 400 และ 500ºC

เริ่มจากการนำเอาข้อมูลมาวาดกราฟด้วยโปรแกรม spread sheet ของ OpenOffice 4.1.14 โดยเลือกกราฟชนิด x-y scatter และให้ลากเส้นเรียบเชื่อมต่อจุดด้วยการใช้ค่า default ของโปรแกรม (แบบที่คนส่วนใหญ่ชอบทำกันโดยอาจไม่รู้ว่ามันปรับแต่งได้) ผลที่ได้แสดงไว้ในรูปที่ ๑ จะเห็นว่าเส้นกราฟที่ได้มีปัญหาตรงช่วงที่ระยะหว่างระหว่างจุดมีการเพิ่มขึ้นมากกระทันหัน (90, 100 และ 200ºC) และในช่วงอุณหภูมิสูงนั้นกราฟมีลักษณะเป็นลูกคลื่น

ทีนี้ด้วยข้อมูลชุดเดิม แต่ปรับชนิดของเส้นที่ใช้ลากเชื่อมต่อจุด ผลที่ได้แสดงไว้ในรูปที่ ๒ ซึ่งจะมองเห็นได้ว่าลักษณะเส้นกราฟนั้นมีความสมเหตุสมผลมากกว่า คือลาดลงอย่างเดียว ความขันของเส้นกราฟมีการเปลี่ยนแปลงในทิศทางเดียว คือตั้งชันในช่วงอุณหภูมิต่ำและลดลงในช่วงอุณหภูมิสูง โดยไม่มีลักษณะเป็นลูกคลื่น แม้ว่าทั้งสองแบบจะให้ค่าความหนาแน่นที่อุณหภูมิ 120ºC ใกล้เคียงกัน (425 กับ 420 kg/m3)

รูปที่ ๒ ข้อมูลชุดเดียวกันกับรูปที่ ๑ แต่ใช้ B-Spline ความละเอียดเท่ากับ 20 ลำดับขั้นพหุนามเท่ากับ 3 จะเห็นว่าเส้นมีความโค้งที่ราบเรียบกว่า

แต่ถ้าต้องการค่าแบบละเอียดหรือนำไปเขียนโปรแกรมเพื่อคำนวณค่าความหนาแน่นที่อุณหภูมิต่าง ๆ ก็ควรต้องหาค่าพารามิเตอร์ของฟังก์ชันที่ใช้ประมาณค่า แต่คำถามก็คือควรใช้จุดใดบ้างในการสร้างฟังก์ชันประมาณค่า รูปที่ ๓ แสดงการสร้างฟังก์ชันพหุนามกำลัง 2 สำหรับคำนวณค่าความหนาแน่นที่อุณหภูมิต่าง ๆ กัน โดยเส้นส้มนั้นใช้ข้อมูลที่อุณหภูมิ 90, 100 และ 200ºC ส่วนเส้นสีเขียวนั้นใช้ข้อมูลที่อุณหภูมิ 100, 200 และ 300ºC ฟังก์ชันของทั้งสองเส้นเป็นดังนี้

เส้นสีส้ม y = 0.0271836x^2 - 10.3908x + 1249.26

เส้นสีเขียว y = 0.0078408x^2 - 4.58794x + 862.408

จะเห็นว่าในช่วงอุณหภูมิ 100-200ºC ค่าที่ได้จากการเลือกใช้จุดที่แตกต่างกันนั้นแตกต่างกันอยู่มาก โดยเฉพาะในกรณีของช่วงอุณหภูมิ 183- 200ºC นั้น เส้นสีส้มจะให้ค่าความหนาแน่นที่ต่ำกว่าที่อุณหภูมิ 200ºC ซึ่งไม่ถูกต้อง ส่วนค่าความหนาแน่นที่อุณหภูมิ 120ºC เส้นสีส้มให้ค่าไว้ที่ประมาณ 394 kg/m3 ในขณะที่เส้นสีเขียวให้ค่าประมาณ 425 kg/m3

ด้วยเหตุนี้เวลาสอนนิสิตในเรื่องการประมาณค่าในช่วง จึงบอกกับนิสิตเสมอว่า การคำนวณนั้นมันไม่ได้จบที่แค่ได้ตัวเลข แต่มันต้องทดสอบด้วยว่าตัวเลขที่ได้มานั้นมันน่าเชื่อถือแค่ไหน การทดสอบง่าย ๆ ทำได้ด้วยการพิจารณาภาพรวมการเปลี่ยนแปลงค่าฟังก์ชัน (แบบรูปที่ ๑ และ ๒) หรือลองเลือกใช้จุด (ตำแหน่งและ/หรือจำนวน) ที่แตกต่างกันในการสร้างฟังก์ชันประมาณค่าในช่วง ทำการคำนวณค่า y ณ ตำแหน่ง x ที่ต้องการ แล้วตรวจสอบว่าค่าที่ได้จากฟังก์ชันประมาณค่าที่แตกต่างกันนั้นให้ค่าที่แตกต่างกันมากหรือไม่

รูปที่ ๓ การคำนวณด้วยการใช้ฟังก์ชันพหุนามกำลัง 2 ในการประมาณค่าความหนาแน่นในช่วงอุณหภูมิ 100-200ºC เส้นสีส้มได้จากการใช้ข้อมูลที่อุณหภูมิ 90, 100 และ 200ºC ในการสร้างฟังก์ชัน เส้นเขียวได้จากการใช้ข้อมูลที่อุณหภูมิ 100, 200 และ 300ºC ในการสร้างฟังก์ชัน

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