ฉันจะขอคำแนะนำอย่างยิ่งต่อการใช้โซลูชั่นแบบปิดเนื่องจากพวกเขามีแนวโน้มที่จะไม่เสถียรเชิงตัวเลขมาก คุณจำเป็นต้องใช้ความระมัดระวังเป็นอย่างมากในวิธีการและลำดับของการประเมินของตัวแปรและตัวแปรอื่น ๆ
ตัวอย่างคลาสสิกเป็นหนึ่งสำหรับสมการกำลังสอง 0 การคำนวณรากเป็นจะทำให้คุณมีปัญหากับชื่อที่ประกอบด้วยหลายคำที่ตั้งแต่นั้นคุณจะถูกยกเลิกใน เศษ. คุณต้องคำนวณ{x_1}a x2+ b x + c = 0
x1 , 2=−b±b2−4ac−−−−−−−√2a
ข» 4 คx1= - ( b + s ฉันgn ( b ) b2- 4 a c-------√)2 ก; x2= ca1x1
Higham ในผลงานชิ้นเอกของเขา "ความแม่นยำและความเสถียรของอัลกอริธึมเชิงตัวเลข" (2nd ed, SIAM) ใช้วิธีการค้นหาโดยตรงเพื่อค้นหาสัมประสิทธิ์ของพหุนามลูกบาศก์ซึ่งโซลูชันลูกบาศก์วิเคราะห์เชิงคลาสสิคให้ผลลัพธ์ที่ไม่แม่นยำมาก ตัวอย่างเช่นที่เขาให้เป็น1.2704] สำหรับพหุนามนี้รากนั้นแยกออกจากกันอย่างดีและด้วยเหตุนี้ปัญหาจึงไม่ได้มีเงื่อนไข อย่างไรก็ตามถ้าเขาคำนวณรูตโดยใช้วิธีการวิเคราะห์และประเมินพหุนามในรากเหล่านี้เขาจะได้รับเศษในขณะที่ใช้วิธีมาตรฐานที่เสถียร (เมทริกซ์สหาย) ส่วนที่เหลือมีคำสั่ง[ a , b , c ] = [ 1.732 , 1 , 1.2704 ]ต ( 10)- 2)ต ( 10)- 15). เขาเสนอการดัดแปลงอัลกอริทึมเล็กน้อย แต่ถึงอย่างนั้นเขาก็สามารถหาชุดของค่าสัมประสิทธิ์ที่นำไปสู่การตกค้างของซึ่งไม่ดีอย่างแน่นอน ดูหน้า p480-481 ของหนังสือที่กล่าวถึงข้างต้นต ( 10)- 11)
ในกรณีของคุณผมจะใช้วิธีการ Bairstow ของ มันใช้การวนซ้ำของนิวตันซ้ำในรูปแบบสมการกำลังสอง (จากนั้นรากของสมการกำลังสองจะถูกแก้ไข) และภาวะเงินฝืด มันใช้งานได้ง่ายและมีแม้กระทั่งการใช้งานบางอย่างบนเว็บ