วันพฤหัสบดีที่ 25 กันยายน พ.ศ. 2568

เมื่อคอมพิวเตอร์ให้คำตอบจากโจทย์ที่ไม่ควรมีคำตอบ MO Memoir : Thursday 25 September 2568

คอมพิวเตร์ทำงานด้วยระบบเลขฐาน 2 ในขณะที่ในชีวิตประจำวันของเรานั้น เราใช้ตัวเลขฐาน 10 ดังนั้นเวลาเราป้อนข้อมูลให้คอมพิวเตอร์ คอมพิวเตอร์ก็จะแปลงค่าตัวเลขในฐาน 10 ที่เราป้อนเข้าไปนั้นให้กลายเป็นตัวเลขในฐาน 2 แต่เนื่องจากว่าเนื่องจากเราไม่สามารถแปลงเลขจำนวนจริงฐาน 10 ให้กลายเป็นเลขจำนวนจริงฐาน 2 ที่มีค่าเท่ากันพอดีได้ทุกตัว มันทำได้เพียงแค่เก็บตัวเลขฐาน 2 ที่มีค่าใกล้เคียงเลขฐาน 10 ที่เราป้อนเข้าไปให้มากที่สุด ทำให้ตัวเลขฐาน 2 ที่อยู่ในเครื่องนั้นมีค่าแตกต่างไปจากตัวเลขฐาน 10 ที่เราต้องการให้มันเป็นอยู่เล็กน้อย ความคลาดเคลื่อนตรงนี้เรียกว่า round off error

และบางทีความคลาดเคลื่อนแบบนี้ก็สามารถทำให้ผลการคำนวณนั้นผิดเพี้ยนไปแบบคนละเรื่องเลย เช่นตัวอย่างอย่างที่นำมาเล่าให้ฟังในวันนี้ ที่ผิดพลาดแบบจากไม่ควรหาคำตอบได้กลายเป็นมีคำตอบเฉยเลย

Cramer's rule เป็นวิธีการหนึ่งที่ใช้สำหรับหาคำตอบของระบบสมการพีชคณิตเชิงเส้น ตัวอย่างเช่นถ้าเรามีระบบสมการ 3 สมการ 3 ตัวแปรที่สามารถเขียนในรูปแบบเมทริกซ์ A·x = bดังนี้

                    

เราสามารถคำนวณค่า x แต่ละตัวได้จากการใช้ค่า determinant ของเมทริกซ์ดังนี้

คำตอบจะมีก็ต่อเมื่อค่า determinant ของเมทริกซ A นั้นไม่เป็นศูนย์ (เพราะมันเป็นตัวหาร)

ทีนี้ลองพิจารณาระบบ 3 สมการ 3 ตัวแปรต่อไปนี้

ซึ่งถ้าคำนวณค่า determinant ของเมทริกซ์ A จะพบว่ามีค่าเป็นศูนย์ ดังนั้นเมื่อพิจารณาจาก Cramer's rule แล้วระบบสมการนี้ไม่ควรจะหาคำตอบได้

แต่เมื่อนำไปทดลองคำนวณด้วยโปรแกรม GNU Octave (version 10.2.0) โดยเริ่มจากหาค่า determinant ก่อน

>> format long e

>> a1 = [3, 1, 4];

>> a2 = [4, 2, 2];

>> a3 = [-1, -1, 2];

>> A = [a1; a2; a3]

A =

3.000000000000000e+00 1.000000000000000e+00 4.000000000000000e+00

4.000000000000000e+00 2.000000000000000e+00 2.000000000000000e+00

-1.000000000000000e+00 -1.000000000000000e+00 2.000000000000000e+00

>> d = det(A)

d = 0

จะเห็นว่าค่า determinant ที่ได้นั้นมีค่าเป็นศูนย์ แต่เมื่อสั่งให้โปรแกรมทำการคำนวณหาค่าคำตอบกลับพบว่า

>> b = [1; 1; 1];

1.000000000000000e+00

1.000000000000000e+00

1.000000000000000e+00

>> x = A\b

warning: matrix singular to machine precision

x =

2.857142857142860e-02 (x1)

-4.761904761904767e-02 (x2)

3.238095238095241e-01 (x3)

กลับพบว่ามันให้คำตอบ (x1, x2 และ x3) ออกมาเป็นตัวเลขที่ดูดีเสียด้วย (คือไม่มากมหาศาลหรือเข้าใกล้ศูนย์มาก) แต่ถ้าทดลองนำคำตอบที่ได้ไปแทนค่าในโจทย์เริ่มต้น จะพบว่ามันไม่ใช่คำตอบที่ทำให้สมการเป็นจริง

หรือลองดูอีกตัวอย่างกับระบบสมการ

ซึ่งในตัวอย่างนี้ค่า determinant ของเมทริกซ์ A ก็มีค่าเป็นศูนย์เช่นกัน และเมื่อคำนวณด้วยโปรแกรม GNU Octave (version 10.2.0) ก็พบว่า

>> a1 = [7, 3, 2];

>> a2 = [1, 1, 1];

>> a3 = [5, 1, 0];

>> A = [a1; a2; a3]

A =

7 3 2

1 1 1

5 1 0

>> d = det(A)

d = -1.7764e-15

ผลการคำนวณให้ค่า determinant เข้าใกล้ศูนย์มาก (อันนี้เป็นผลจาก round off error) และเมื่อให้โปรแกรมคำนวณหาคำตอบของระบบสมการก็พบว่า

>> b = [1; 1; 1];

>> x = A\b

warning: matrix singular to machine precision, rcond = 6.83214e-18

x =

-1.1259e+15 (x1)

5.6295e+15 (x2)

-4.5036e+15 (x3)

โปรแกรมก็ยังสามารถส่งคำตอบออกมาเป็นตัวเลขที่ (อาจจะ) นำไปใช้คำนวณต่อในขั้นตอนการทำงานถัดไปได้

จากประสบการณ์ที่เคยเจอและได้ให้คำแนะนำกับนิสิตที่มาปรึกษา ผมจะบอกเขาเป็นประจำว่า ปัญหาโปรแกรมรันแล้วหยุดการทำงานก่อนจะทำงานจบนั้นมันแก้ไม่ยากเมื่อเทียบกันโปรแกรมทำงานจนครบกระบวนการแล้วพบว่าคำตอบที่ได้มานั้นผิด เพราะถ้าโปรแกรมหยุดการทำงานตรงบรรทัดไหน มันก็สามารถไล่ย้อนกลับไปได้ว่าค่าตัวเลขตัวไหนที่นำมาใช้ในบรรทัดนั้นมันไม่ถูกต้อง แล้วก็สืบย้อนขึ้นไปตามเส้นทางที่มาของตัวเลขตัวนั้น

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

วันพุธที่ 17 กันยายน พ.ศ. 2568

ต้นไทรบนระเบียงอาคาร MO Memoir : Wednesday 17 September 2568

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

ผลออกมาว่าน่าจะเป็นผลงานของนกที่กินเมล็ดต้นไทรจากต้นข้าง ๆ อาคาร แล้วนำมาปล่อยแพร่ขยายบนระเบียง (รูปที่ ๒ และ ๓)

พวกต้นโพและต้นไทรเนี่ยเรียกว่าเป็นต้นไม้ที่ขึ้นได้ในสถานที่ที่ต้นไม้อื่นไม่ขึ้นกัน เช่นบนหลังคาอาคาร บนหลังคาสะพานลอย ขอบทางถนนบนสะพานกลับรถหรือสะพานข้ามทางแยก ไม่รู้เหมือนกันว่ามันได้แร่ธาตุต่าง ๆ จากไหนในการเจริญเติบโต จะเรียกว่าเป็นต้นไม้ที่ขยายพันธ์โดยแทบไม่ต้องใช้ดินก็น่าจะได้อยู่นะ

๘ ปีที่แล้วเคยเขียนเรื่อง ต้นโพบนหลังคาสะพานลอย (วันพฤหัสบดีที่๓ สิงหาคม พ.ศ.๒๕๖๐) ซึ่งมันก็เติบใหญ่ได้มากอยู่เหมือนกันจนกระทั่งมีเจ้าหน้าที่มาทำการตัดไป

วันนี้ก็ถือว่าเป็นการบันทึกสิ่งหนึ่งที่ได้เห็นในบริเวณที่ทำงานก็แล้วกัน

รูปที่ ๑ ตอนแรกนึกมีคนทำโครงการอาคารสีเขียวลดโลกร้อน 
 
รูปที่ ๒ พอขึ้นไปดูก็เห็นว่ามันอยู่ตรงระเบียงที่ใช้เป็นที่ติดตั้งคอยล์ร้อนของเครื่องปรับอากาศ แสดงว่าคงไม่มีใครตั้งใจไปปลูก น่าจะเป็นผลงานของนกที่ไปกินผลไทรจากต้นข้างตึก แล้วนำเมล็ดมาปล่อยไว้ที่ระเบียง

รูปที่ ๓ ไม่รู้ว่ามันจะร่วงลงมาก่อนหรือจะมีคนไปรื้อทิ้งก่อน ถ้ามันหนักจนร่วงลงมาก็ไม่รู้ว่ารากของมันจะดึงเอาอะไรตกลงมาด้วยหรือเปล่า

วันอาทิตย์ที่ 7 กันยายน พ.ศ. 2568

A-Level เคมี ปี ๖๘ ข้อการแยกสารด้วยการกลั่น MO Memoir : Sunday 7 September 2568

ในฐานะวิศวกรเคมี ก็เลยมองคำตอบของโจทย์ข้อนี้แตกต่างออกไป

ข้างล่างเป็นโจทย์ข้อสอบ A-Level วิชาเคมี ปีพ.ศ. ๒๕๖๘ ข้อ ๑๐ ที่มีคำถามและตัวเลือกดังนี้

นักวิทยาศาสตร์นำสาร P และ Q มาทำปฏิกิริยาได้สาร R และ S ดังสมการ (สมการไม่ได้ดุล)


เมื่อปฏิกิริยาสมบูรณ์พบว่าสาร P ถูกใช้ไปจนหมด ได้ของผสมของสาร Q R และ S หากต้องการแยกของผสมที่ได้ให้บริสุทธิ์ด้วยวิธีการกลั่น สารชนิดใดจะกลั่นออกมาเป็นลำดับแรก และลำดับสุดท้ายตามลำดับ

1. สาร Q และสาร R (ข้อสอบเฉลยข้อนี้)

2. สาร Q และสาร P

3. สาร R และสาร Q

4. สาร S และสาร Q

5. สาร S และสาร R

ก่อนอื่นเรามาทำความรู้จักสารแต่ละตัวและปฏิกิริยาที่เกิดกันก่อนดีกว่า

สาร P เป็นแอลกอฮอล์ C5 (2-pentanol) ที่ความดันบรรยากาศ สารตัวนี้เป็น "ของเหลว" ที่อุณหภูมิห้อง

สาร Q เป็นโอเลฟินส์ C4 (ก็คืออัลคีนนั่นแหละ ตัวนี้ก็คือ isobutene หรือ isobutylene) ที่ความดันบรรยากาศ สารตัวนี้เป็น "แก๊ส" ที่อุณหภูมิห้อง แต่เราสามารถทำให้เป็นของเหลวที่อุณหภูมิห้องได้ด้วยการเพิ่มความดัน

สาร R เป็นอีเทอร์ C9 (tert-butyl 2-pentyl ether) ที่ความดันบรรยากาศสารตัวนี้เป็น "ของเหลว" ที่อุณหภูมิห้อง (ตัวนี้หาจุดเดือดไม่เจอ แต่ตัวที่มีโครงสร้างใกล้กันคือ tert-butyl pentyl ether มีจุดเดือดที่ประมาณ 148ºC)

สาร S เป็นโอเลฟินส์ C5 (2-pentene) ที่ความดันบรรยากาศ สารตัวนี้เป็น "ของเหลว" ที่อุณหภูมิห้องได้ถ้าอุณหภูมิห้องไม่สูงเกินไป เพราะมันมีจุดเดือดประมาณ 36-37ºC แต่ถ้าอุณหภูมิห้องอยู่ที่ราว ๆ 30ºC มันก็สามารถระเหยกลายเป็นไอได้อย่างรวดเร็ว

ทีนี้มาดูปฏิกิริยาที่เกิด สาร R เกิดจากปฏิกิริยาระหว่าง P และ Q เกิดเป็นสารประกอบอีเทอร์ ส่วน S (2-pentene) นั้นเกิดจากปฏิกิริยา hydration (กำจัดน้ำ) ของสาร P (ดังนั้นผลิตภัณฑ์ที่เกิดขึ้นจาการทำปฏิกิริยาควรต้องมี H2O อยู่ด้วย) โดยทั้งสองปฏิกิริยาจะใช้ "กรด" เป็นตัวเร่งปฏิกิริยา (เป็นปฏิกิริยาที่เกิดคู่ขนานกัน) จากที่โจทย์กำหนดสารตั้งต้นมาสองตัว แสดงผลิตภัณฑ์หลักที่ต้องการคือ R โดย S (2-pentene) เป็นผลิตภัณฑ์ที่เกิดจากปฏิกิริยาข้างเคียง

เพื่อที่จะให้ปฏิกิริยาเกิดได้ดีนั้น ควรต้องผสม P และ Q ให้เป็นเฟสเดียวกัน จากนั้นจึงสารผสมไปผ่านตัวเร่งปฏิกิริยา ซึ่งทำให้ให้ P และ Q ผสมเป็นเฟสเดียวกันนั้นอาจทำโดย

(ก) ใช้การเพิ่มความดันเพื่อเปลี่ยนให้ Q เป็นของเหลว ดังนั้นปฏิกิริยาจะเกิดในเฟสของเหลว หรือ

(ข) ใช้การเพิ่มอุณหภูมิเพื่อเปลี่ยนให้ P เป็นแก๊ส ดังนั้นปฏิกิริยาจะเกิดในเฟสของแก๊ส

สำหรับตัวเร่งปฏิกิริยาที่เป็นกรดนั้น ในอุตสาหกรรมจะนิยมใช้กรดที่เป็นของแข็ง (เช่น acidic ion-exchange resin) แล้วให้สารผสมของสารตั้งต้นไหลผ่านอนุภาคของแข็งที่มีความเป็นกรดเหล่านั้น จากนั้นจึงนำสารผสมที่ไหลผ่านตัวเร่งปฏิกิริยาไปแยกเอา สารตั้งต้นที่เหลือ, ผลิตภัณฑ์ที่ต้องการ และผลิตภัณฑ์จากปฏิกิริยาข้างเคียง ออกจากกัน

โจทย์บอกว่าในการทำปฏิกิริยานั้น P ถูกใช้จนหมด สารผสมที่ได้จากการทำปฏิกิริยามีเพียง Q, R และ S

การกลั่นเป็นการแยกสารผสมเนื้อเดียวด้วยการใช้จุดเดือดที่แตกต่างกันของสารแต่ละตัวในสารผสมนั้น โดยทั่วไปเมื่อพูดถึงการกลั่น คนมักจะนึกถึงของเหลวเนื้อเดียวที่มีสารหลายชนิดละลายปนกันอยู่

ทีนี้ลองมาดูโจทย์ที่บอกว่าสารผสมที่ได้จากการทำปฏิกิริยามีเพียง Q, R และ S ถ้าสารผสมนี้เป็นของเหลว ก็แสดงว่าเป็นของเหลวภายใต้ความดัน

ถ้าเป็นแบบนี้ก็จะสามารถแยกสารได้โดยเริ่มจากการลดความดันก่อน เพื่อให้ Q (isobutene) ระเหยกลายเป็นไอออกมา จากนั้นจึงค่อยนำของเหลวที่เหลือที่ประกอบด้วย R และ S ไปกลั่นแยก ซึ่งก็จะได้ S (2-pentene) ระเหยกลายเป็นไอออกมา โดยเหลือ R เป็นของเหลวที่มี H2O ละลายปนอยู่

แต่ถ้าสารผสมของสายผลิตภัณฑ์เป็นไอ การแยกก็จะทำได้ด้วยการค่อย ๆ ลดอุณหภูมิลง เพื่อควบแน่น R (อีเทอร์) ให้กลายเป็นของเหลวก่อน และเมื่อลดอุณหภูมิให้ต่ำลงไปอีกตัว H2O และ S (2-pentene) ก็จะควบแน่นออกมา โดยเหลือ Q อยู่ในเฟสไอ ที่สามารถควบแน่นให้เป็นของเหลวที่อุณหภูมิห้องได้ด้วยการเพิ่มความดัน

สำหรับคนที่เรียนทางวิศวกรรมเคมีแล้ว การเขียนสมการในรูปข้างล่างจะเห็นภาพการเกิดปฏิกิริยาได้ถูกต้องกว่า เพราะเป็นการแยกระหว่างผลิตภัณฑ์หลักที่ต้องการ (R) และผลิตภัณฑ์ที่เกิดจากปฏิกิริยาข้างเคียง (S)