งานทดสอบคำนวณสูตรอุปราคาสากล

งานทดสอบคำนวณสูตรอุปราคาสากล 

บทนำ

เดิมที จะมีอุปราคาเกิดช่วงปลายเดือน พฤษภาคม 2564  เรื่องคำนวณเร่งด่วนใดๆทั้งหมดนั้น ทำไปแล้ว
แต่เนื่องจากว่าในมือ มีตำราอยู่สองชุด ซึ่ง ใช้วิธีการคำนวณแตกต่างกัน  เลยคันไม้คันมือ คิดจะลองนำมันมาช่วยในการคำนวณดูบ้าง 

ตำราเล่มแรก เป็นของ Peter Duffett-Smith et al. ชื่อว่า Practical Astronomy with your

Calculator or Spreadsheet

ส่วนตำราอันที่สอง เป็นของ Jean Meeus ชื่อ Astronomical Algorithms 

แบบแรก ขอเรียกย่อๆว่า Prac  ส่วนอันที่สอง เรียกย่อว่า Jean ก็แล้วกัน

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

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

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

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

ซึ่งเรื่องราวจะเป็นอย่างไร เดี๋ยวจะแจกแจงรายละเอียดให้ทราบ

ตัวใช้สูตร แม่นมาก แต่แกะยาก ตัวใช้คณิตศาสตร์พร้อมค่าแก้ ใช้งานไม่ยาก แต่มึนงง 

จากย่อหน้าของบทนำ ได้กล่าวว่า ในมือ มีตำราอยู่สองชุด ซึ่ง ใช้วิธีการคำนวณแตกต่างกัน  

เนื้อหาด้านในของทั้งสองชุด ใช้คนละวิธีการในการคำนวณ โดยหลักพื้นฐานก็ดูจะเหมือนๆกัน เพียงแต่มีทางแยกคือ

ฝั่งหนึ่ง(Prac) จับ วิธีการคิดทางคณิตศาสตร์ กึ่งฟิสิกส์ มีคิดดักการเคลื่อนที่ ในพิกัดของผู้สังเกต คำอธิบายไม่ยากนัก
แต่สูตรที่ให้มาจริงๆนั้น โคตรอภิมหาซับซ้อน พิลึกพิกล พอสมควร

ส่วนอีกฝั่งหนึ่ง(Jean) เน้นแนวทางคณิตศาสตร์เชิงตัวเลข พร้อมกับค่าแก้จำนวนมาก ยิบย่อยเต็มไปหมด นี่ก็อธิบายไม่ยากเหมือนกัน
แต่ค่าแก้ทั้งหลาย ทั้งปวง แลดูจะเยอะจัดไปหน่อย

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

พอตัดสินใจ ที่จะทิ้งแบบ Prac เพราะการแกะสูตรที่ดูยุ่งยาก ไม่เหมาะกับเวลาที่งวดเข้ามา(ณ ขณะนั้น)

แล้วหันมาดูของ Jean แทน แต่ ก็พบว่า มันยุ่งยากพอกัน แถมด้วยความมึนๆงงๆ อีกต่างหาก

อันที่จริง นอกจากสองตำรานี่แล้ว ยังหาข้อมูลจากที่อื่นๆอีกเยอะ แต่พอเอามาเปรียบเทียบกับ Prac มันห่างไป 1-2 องศา เลยไม่ใช้ ซึ่งสำหรับ Prac กว่าจะแกะสูตรได้ แทบแย่ แถมต้องใช้สูตรของเขาอีก ในการหาค่าต่างๆต่อเนื่อง เลยเลิกไปก่อนด้วยข้อจำกัดด้านเวลา แต่ถามว่า แม่นไหม ก็ ใช้ได้เลยล่ะ

ส่วนฝั่งดาราศาสตร์เชิงตัวเลข นี่พิจารณาดูแล้ว มีแค่บรรดาค่าแก้เยอะแยะ กลั้นใจพิมพ์ๆไปตามนั้น แล้วเอาลองเข้า spreadsheet ดู บางที อาจจะได้คำตอบออกมาเลยก็เป็นได้ เลยเลือกที่จะลองเสี่ยงดู 

ในความง่ายของมันมียาขม อยู่ตรงที่บรรดาค่าแก้น้อยใหญ่ทั้งหลายทั้งปวงใดๆ นั่นแหละ เพราะมันเยอะมากจนตาลาย 

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

ทีแรก คำนวณแค่ เฟสดวงจันทร์กันก่อน ค่าที่ได้มา ดูเหมือนจะง่ายดายดีจริงๆด้วย แต่พอลองเอาเล่นกับตัวอย่างการคำนวณอุปราคาดู ถึงรู้ว่าจริงๆแล้ว เราทำผิด (แต่กว่าที่จะรู้ตัวได้ ก็ล่วงเลยมาจนถึงต้นเดือนมิถุนายนกันแล้ว -_-‘)

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

จนกระทั่งมาเอะใจ หลังจากที่อ่าน paper การคำนวณอุปราคาตัวหนึ่ง และฉุกใจคิดขึ้นได้ว่า
ที่จริงแล้ว 
Spreadsheet เอง ก็รองรับการป้อนการคำนวณแบบเป็นกลุ่มด้วยนี่นา 

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

สรุปคือ พอจับยัดรวมเข้าไปใน 1 cell กลายเป็นว่า ค่าที่ได้ออกมานั้น ดูเป็นคนละเรื่อง แต่ก็อย่าเพิ่งดีใจไป

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

แต่ก็เอาเถอะ พอ cross over สองแนวทางเข้าด้วยกันแล้ว ก็พบว่า พอไหว

ส่วนเรื่องที่ต้องแกะสูตรนั้น ขอให้เป็นห้วงเวลาถัดไปก็แล้วกันนะ ตอนนี้ ขอพักก่อน -*-‘

======================================================

ในการ Cross Over กัน สรุปว่า ในตอนนั้น ยึดค่ากึ่งกลางคราสจาก Prac มาใส่ลงใน สูตรองค์ประกอบของ Jean เพื่อหาเวลาประกอบในแต่ละช่วงเวลาของอุปราคา คำตอบที่ได้ ใกล้เคียงกับ ค่าจากที่ nasa คำนวณ พอควร

======================================================


มหากาพย์ค่าแก้ ระหว่าง spreadsheet กับ Script Programming

เรื่องน่าขำ ของการวางพจน์ค่าแก้ นั้น สรุปก็คือ จะต้องจับมัดเป็นพวงแล้วคำนวณให้หมดเลย (เฉพาะคิดเรื่องอุปราคานะ ถ้าคิดของ Full Moon New Moon ให้จับค่าแก้ยกมาแค่หกตัวแล้วบวกรวบให้เป็นพวงเหมือนกัน ค่าที่ได้มาน่าจะเท่ากัน)

เหตุที่ผิดพลาดจนมึน เพราะที่ผ่านมา คิดแบบแยกค่าออกมาเป็นส่วนๆ แล้วจับทุกๆส่วนมาบวกรวมกัน 

ผลที่ได้ คือลักษณะผลรวมมึนๆแบบพิลึกกึกกือ

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

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

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

เพราะทางที่ให้ทำได้ มีทางเดียวคือ บังคับบวกค่าแก้ตามที่กำหนดให้หมดทุกพจน์ หรือแล้วแต่จุดสำคัญที่คนเขียนเน้นย้ำไว้

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

เหตุที่ถึงบางอ้อเป็นครั้งแรกก็เนื่องมาจาการคำนวณอุปราคาตามตัวอย่างใน paper นั้นนั่นแหละ

พูดให้เห็นภาพง่ายๆ นั่นคือ เมื่อจับยัดคำนวณรวมเข้าไปใน 1 cell กลายเป็นว่า ค่าที่ได้ออกมานั้น ดูเป็นคนละเรื่อง กันกับแบบที่จับแยกส่วนพจน์กันมาคำนวณ

ตอนนี้ สรุปได้แล้วว่า ต้องจัดค่าแก้แบบยกไปทั้งพวงหรือเฉพาะจุดที่มีนัยยะสำคัญที่คนเขียนเน้นย้ำเท่านั้น เพื่อให้ผลลัพธ์การคำนวณที่ได้ออกมาอย่างถูกต้อง -___-’

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

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

หลังจากที่สลับกันผิด กลับไป กลับมาอยู่ ตั้งนาน ที่สุด มหากาพย์ค่าแก้ก็สิ้นสุดลง แต่จบใน spreadsheet นะ 

ขณะที่ การทำงานบนสคริปโปรแกรมนั้น กลับมาให้ค่าผิดประหลาดซ้ำเดิมๆ กันแบบมึนๆงงๆ

คำตอบโดยสรุป มีดังนี้

ค่าใน spreadsheet ได้มาจากสูตรคำนวณ แต่ที่ทำแล้วมีข้อผิดพลาด เนื่องจากการจัดกรุ๊ปวงเล็บเพื่อคำนวณไม่ถูกต้อง เมื่อถูกต้องแล้ว ผลลัพธ์ที่ได้ ก็ไม่ผิดไปจาก paper แม้แต่น้อย

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

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

ต้นเหตุคือ เป็นเพราะว่า มีการเพิ่มเลข 0 นำเกินไป 1 ตัวในสูตรคำนวณซึ่ง ต้นฉบับที่ลอกมานั้น ก็ไม่มี 

(อาจเพราะทำงานดึกดื่นหรือตื่นเช้าไปมาก มึนๆงงๆตาลาย เลยพิมพ์ไปขาดๆเกินๆเสียอย่างนั้นก็ไม่ทราบ -*-)

เมื่อเจอตัวปัญหาแล้ว สั่งรันโปรแกรมใหม่อีกครั้ง โอเค คราวนี้ ผ่านฉลุย!!!

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

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

Julian Date หรรษา

รวบรวมสมการสุริยยาตร์ ตอนที่ 2 ภาคสมการสมผุส

กรณีศึกษา การทดสอบใช้สมการสุริยยาตร์ หาสมผุสดาวพฤหัสบดี และ ดาวเสาร์