Розв’язання квадратного рівняння


10

Чи є відкрита C-реалізація для рішення квар- тичних рівнянь:

ах+бх³+cх²+гх+е=0

Я думаю про реалізацію рішення Ferrari. У Вікіпедії я читав, що рішення є обчислювально стійким лише для деяких можливих знакових комбінацій коефіцієнтів. Але, можливо, мені пощастило ... Я отримав прагматичне рішення, розв’язавши аналітично за допомогою комп'ютерної алгебри системи та експортувавши до C. Але якщо є перевірена реалізація, я вважаю за краще скористатися цим. Я шукаю швидкий метод і вважаю за краще не використовувати загальний кореневий пошук.

Мені потрібні лише реальні рішення.


Вам потрібні всі (справжні) рішення одночасно? Як зазначає GertVdE нижче, якщо у вас є проблеми зі стабільністю із рішенням закритої форми, насправді немає вагомих причин не використовувати якийсь алгоритм пошуку кореневих файлів.
Годрік Провид

3
Мені здається смішним, що це було позначено нелінійною алгеброю, оскільки ви могли просто обчислити власні значення супутньої матриці, яка вже є у формі Гессенберга, і застосувати QR-перегляд було б досить просто.
Віктор Лю

2
Погляньте на кубічні / кварцові розв'язки, опубліковані в ACM TOMS (Алгоритм 954) . Код, який вносить цей журнал, зазвичай дуже високої якості. Сам папір знаходиться за платною стіною, але код можна завантажити за цим посиланням .
GoHokies

... (пізніше редагування) код ACM написаний на FORTRAN 90, але моє перше враження, що можна було викликати його з C, не докладаючи великих зусиль.
GoHokies

1
@GoHokies Я думаю, ви повинні перетворити свій коментар у відповідь, тому що я вважаю, що це гарна відповідь на це питання. Тим більше, що зв'язаний папір вдається уникнути звичайних числових нестабільностей, і це абсолютно не тривіально.
Кирило

Відповіді:


20

Я б настійно радив не використовувати рішення закритої форми, оскільки вони, як правило, є дуже нестабільними. Вам потрібно бути дуже обережними в порядку та порядку ваших оцінок дискримінантних та інших параметрів.

Класичний приклад - це для квадратичного рівняння . Обчисливши коріння як , ви у проблеми для поліномів, де з тих пір ви отримуєте скасування в чисельник. Вам потрібно обчислити .x 1 , 2 = - b ± ах2+бх+c=0 b4ac

х1,2=-б±б2-4аc2а
б4аc
x1=(b+sign(b)b24ac)2a;x2=ca1x1

Гігхем у своєму шедеврі «Точність та стабільність чисельних алгоритмів» (2-е видання, СІАМ) використовує метод прямого пошуку для пошуку коефіцієнтів кубічного многочлена, для яких класичний аналітичний кубічний розчин дає дуже неточні результати. Приклад, який він наводить, є . Для цього полінома корені добре відокремлені, а отже, проблема не обумовлена. Однак якщо він обчислює корені за допомогою аналітичного підходу та оцінює поліном у цих коренях, він отримує залишок , використовуючи стабільний стандартний метод (метод супутньої матриці) , залишок порядку[a,b,c]=[1.732,1,1.2704]О(10-2)О(10-15). Він пропонує незначну модифікацію алгоритму, але вже тоді він може знайти набір коефіцієнтів, що призводять до залишків що, безумовно, не добре. Див. P480-481 вищезгаданої книги.О(10-11)

У вашому випадку я застосував би метод Бейрстоу . Він використовує ітеративну комбінацію ітерації Ньютона на квадратичні форми (і тоді вирішуються корені квадратичної форми) та дефляції. Це легко реалізується і є навіть деякі реалізації, доступні в Інтернеті.


1
Чи можете ви пояснити, що ви маєте на увазі під "я б настійно радив не використовувати рішення закритої форми, оскільки вони, як правило, є дуже нестабільними". Чи стосується це лише поліномів 4-го ступеня чи це загальне правило?
NoChance

@EmmadKareem Я оновив свою відповідь вище.
GertVdE

3

Дивіться такі:


2
Використовуючи цей код на поліномі з коефіцієнтами, наведеними у моїй відповіді, я знаходжу наступне: , який має відносну похибку порівняно з реальним коренем (обчислюється за допомогою команди коренів Octave, яка використовує метод супутньої матриці). Він має залишок тоді як корінь методу супутньої матриці має залишок . Ви ще O ( 10 - 8 ) O ( 10 - 7 ) O ( 10 - 15 )х1=-1.602644912244132е+00О(10-8)О(10-7)О(10-15)
вирішуєте,

1

Числові рецепти в с забезпечують вираження закритої форми для справжніх коренів квадратичного та кубічного, які, імовірно, мають гідну точність. Оскільки алгебраїчний розв’язок квартика включає розв’язання кубічного, а потім розв’язування двох квадратиків, можливо, квартика закритої форми з хорошою точністю не підлягає.


Я щойно отримав корінь кубічного прикладу, який цитується в межах 2e-16 (що є над точністю моїх поплавків), використовуючи числові рецепти в c (press et al) кубічних формулах. Тож є надія сподіватися.
Nemocopperfield
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.