Russian Qt Forum
Ноябрь 23, 2024, 02:56 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Реализация метода Кардано для решения кубических уравнений  (Прочитано 9380 раз)
ingwarsmith
Новичок

Offline Offline

Сообщений: 10


Просмотр профиля
« : Апрель 15, 2015, 14:54 »

Создан класс CubicEquationCardano (обычный класс C++, но с применением объектов из библиотеки Qt, таких как объекты класса QVector, а также всё GUI - Qt-шное), реализующий решение кубического уравнения методом Кардано (вычисляются только действительные корни).
Уравнение общего вида ax^3 + bx^2 + cx + d = 0 реализовано так:
   koeff_A*x^3 + koeff_B*x^2 + koeff_C*x + koeff_D = 0.        (1)
При этом по умолчанию koeff_A = 1, т.е. решается уравнение вида
   x^3 + koeff_B*x^2 + koeff_C*x + koeff_D = 0.                    (2)
В алгоритме класса вид (1) приводится к канонической форме
   y^3 + koeff_p*y + koeff_q = 0                                           (3)
с помощью замены переменных:
   y = x + koeff_A / (3.0*koeff_B)     => x = y - koeff_A / (3.0*koeff_B)
   p = (3.0*koeff_A*koeff_C - koeff_B^2) / (3.0*koeff_A^2)
   q = (2.0*koeff_B^3 - 9.0*koeff_A*koeff_B*koeff_C + 27.0*koeff_A^2*koeff_D) / (27.0*koeff_A^3)

В Википедии приводится алгоритм решениям данным методом не полностью. За восстановление всего алгоритма решения методом Кардано - отдельное спасибо математику Роману Скоробогатову  Улыбающийся

Проект Qt с исходниками лежит тут (ссылка исправлена 21.04.2015)
« Последнее редактирование: Апрель 21, 2015, 05:58 от ingwarsmith » Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #1 : Апрель 15, 2015, 16:46 »

Мало того, что он написан ужасно, так оно ещё и неправильные корни выдаёт(
(а частные случаи: квадратичных и линейных уравнений вообще не может сосчитать)

Короче, плохо, очень плохо(


 

Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
ingwarsmith
Новичок

Offline Offline

Сообщений: 10


Просмотр профиля
« Ответ #2 : Апрель 21, 2015, 04:46 »

Спасибо вам за конструктивную критику. Ошибки исправил. Сейчас корни выдает верные (с точностью до 0.00005, имеется в виду максимально допустимое отклонение от нуля значения многочлена ax^3 + bx^2 + cx + d после подстановки корней, иначе программа выдает сообщение о критической ошибке). Насчет того, что частные случаи - квадратные и линейные уравнения не решает - это да, только изначально было задумано, чтоб решались уравнения вида ax^3 + bx^2 + cx + d = 0 только при ненулевом коэффициенте "a".

Исправленный проект здесь (ссылка в первом сообщении также исправлена)
« Последнее редактирование: Апрель 21, 2015, 05:58 от ingwarsmith » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.206 секунд. Запросов: 23.