Apakah ada implementasi C terbuka untuk solusi persamaan kuartik:
Saya sedang memikirkan implementasi solusi Ferrari. Di Wikipedia saya membaca bahwa solusinya adalah stabil komputasi hanya untuk beberapa kombinasi tanda yang mungkin dari koefisien. Tapi mungkin saya beruntung ... Saya mendapat solusi pragmatis dengan menyelesaikan secara analitis menggunakan sistem aljabar komputer dan mengekspor ke C. Tetapi jika ada implementasi yang diuji saya lebih suka menggunakan ini. Saya mencari metode cepat dan memilih untuk tidak menggunakan pencari akar umum.
Saya hanya membutuhkan solusi nyata.
polynomials
nonlinear-equations
roots
kelas tinggi
sumber
sumber
Jawaban:
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) √
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.
sumber
Lihat ini:
Pemecahan Quartics dan cubics untuk Graphics , awalnya diterbitkan di Graphics Gems V . Kode aslinya ada di sini . Lihat juga ini dan ini .
Metode Universal Memecahkan Persamaan Kuartik .
sumber
Resep numerik dalam c memberikan ekspresi bentuk tertutup untuk akar kuadratik dan kubik nyata yang mungkin memiliki presisi yang layak. Karena solusi aljabar kuartik melibatkan pemecahan kubik dan kemudian menyelesaikan dua kuadrat mungkin bentuk kuartik tertutup dengan presisi yang baik tidak keluar dari pertanyaan.
sumber