Saya akan sangat menyarankan untuk menggunakan solusi bentuk tertutup karena mereka cenderung sangat tidak stabil secara numerik. Anda perlu sangat berhati-hati dalam cara dan urutan evaluasi Anda terhadap parameter diskriminan dan lainnya.
Contoh klasik adalah yang untuk persamaan kuadrat . Menghitung akar sebagai akan membuat Anda mendapat masalah untuk polinomial di mana sejak saat itu Anda mendapatkan pembatalan di pembilang. Anda perlu menghitung .x 1 , 2 = - b ± √a x2+ b x + c = 0 b≫4acx1=-(b+sign(b) √
x1 , 2= - b ± b2- 4 a c-------√2 a
b ≫ 4 a cx1= - ( b + s i gn ( b ) b2- 4 a c-------√)2 a; x2= cSebuah1x1
Higham dalam karya besarnya "Akurasi dan Stabilitas Algoritma Angka" (edisi ke-2, SIAM) menggunakan metode pencarian langsung untuk menemukan koefisien polinomial kubik yang mana solusi kubik analitik klasik memberikan hasil yang sangat tidak akurat. Contoh yang dia berikan adalah . Untuk polinomial ini akar dipisahkan dengan baik dan karenanya masalahnya tidak dikondisikan. Namun, jika ia menghitung akar menggunakan pendekatan analitis, dan mengevaluasi polinomial pada akar ini, ia memperoleh residu dari sambil menggunakan metode standar yang stabil (metode matriks pengiring) , residunya berurutanO ( 10 - 2 ) O ( 10 - 15 ) O ( 10 - 11 )[ a , b , c ] = [ 1.732 , 1 , 1.2704 ]O ( 10)- 2)O ( 10)- 15). Dia mengusulkan sedikit modifikasi pada algoritma, tetapi bahkan kemudian, dia dapat menemukan satu set koefisien yang mengarah ke residu dari yang pasti tidak baik. Lihat p480-481 buku yang disebutkan di atas.O ( 10)- 11)
Dalam kasus Anda, saya akan menerapkan metode Bairstow . Ia menggunakan kombinasi iterasi dari iterasi Newton pada bentuk kuadrat (dan kemudian akar kuadrat dipecahkan) dan deflasi. Ini mudah diimplementasikan dan bahkan ada beberapa implementasi yang tersedia di web.