2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 уравнение 6-го порядка
Сообщение19.12.2007, 00:57 
Аватара пользователя
Вобщем понадобилось решить уравненьице :
$ax^6 + bx^5 + cx^4 + dx^3 + ex^2 + fx + g = 0$
Поскольку с таким не встречался, то и решать в лоб как-то не очень охото.
Есть какой-то способ преобразовать такое уравнение к двум кубическим?
Ну т.е что-то вроде, что у такого уравнение может быть все 6 вещественных корней, поскольку у кубического тоже могут быть все вещественные корни ( правдо их будет 3 ), значит должен быть некий метод, что решив первое мы получим первую тройку корней, решив второе вторую.

 
 
 
 
Сообщение19.12.2007, 01:05 
Виталий писал(а):
Вобщем понадобилось решить уравненьице :
$ax^6 + bx^5 + cx^4 + dx^3 + ex^2 + fx + g = 0$
Есть какой-то способ преобразовать такое уравнение к двум кубическим?

В общем случаеТакого способа нет.
Но в зависимости от конкретного уравнения можно предложить много различных способов для поиска его корней (метод дихотомии, Ньютана, последовательных приближений и д.р.)

 
 
 
 
Сообщение19.12.2007, 10:03 
Аватара пользователя
Виталий писал(а):
Вобщем понадобилось решить уравненьице :
$ax^6 + bx^5 + cx^4 + dx^3 + ex^2 + fx + g = 0$
Поскольку с таким не встречался, то и решать в лоб как-то не очень охото.
Есть какой-то способ преобразовать такое уравнение к двум кубическим?
Ну т.е что-то вроде, что у такого уравнение может быть все 6 вещественных корней, поскольку у кубического тоже могут быть все вещественные корни ( правдо их будет 3 ), значит должен быть некий метод, что решив первое мы получим первую тройку корней, решив второе вторую.
С одной стороны, известен факт о принципиальной невозможности построить общую формулу, выражающую все корни полинома с рациональными коэффициентами степени 5 или выше с помощью арифметических действий и операции извлечения корня. С другой стороны, известно, что всякий невырожденный многочлен с вещественными коэффициентами представим в виде произведения линейных и квадратичных множителей. Только вот как это представление эффективно получить, наука умалчивает. Так что в буквенном виде Ваша задача элементарными методами неразрешима. В соседнем разделе есть целая ветка об этом: http://dxdy.ru/viewtopic.php?t=4040&postdays=0&postorder=asc&start=0

 
 
 
 
Сообщение19.12.2007, 11:48 
Небось, Виталий, всё с кривыми Безье возитесь? Задачки, которые мы раньше обсуждали, кубическими уравнениями обходятся...

 
 
 
 
Сообщение19.12.2007, 14:15 
Аватара пользователя
Алексей К.
Да, однако пересечение с окружностью не решается кубическими уравнениями.

 
 
 
 
Сообщение19.12.2007, 14:29 
Правильно ли я понял, что следующий этип ---- пересечение кривой Безье с другой кривой Безье? Если --- случайно --- эта задачка уже решена, то ей можно воспользоваться для случая окружности. С весьма высокой точностью...

 
 
 
 
Сообщение19.12.2007, 18:35 
Аватара пользователя
Нет задачки найти пересечение между кривыми не стояло.
Потому, окружность для меня - загадка...

 
 
 
 
Сообщение19.12.2007, 18:44 
Виталий писал(а):
окружность для меня - загадка...

Для меня она апофеоз и неисчерпаемый кладезь...

Ну разбейте её на отрезочки и используйте решение предыдущей задачи.
И поскольку Вам, вроде, не формулы нужны, а нечто программное --- так и уравнение 6-й степени порешать не проблема вроде на компутере.

 
 
 
 
Сообщение21.12.2007, 14:16 
Аватара пользователя
Алексей К писал(а):
Ну разбейте её на отрезочки и используйте решение предыдущей задачи.


Да, но вот бить 100 кривых на 1000 отрезочков и решать для каждого кубическое уравнение дороже обойдётся, т.к придётся решать 100000 кубических уравнений, вместо скажем 100 шестичных.
Алексей К писал(а):

И поскольку Вам, вроде, не формулы нужны, а нечто программное --- так и уравнение 6-й степени порешать не проблема вроде на компутере


А вот порешать может и не проблема, был бы код на C++ :)
Да вот, не нахожу никак...

 
 
 
 Счастливого (мне) полёта в Москву!
Сообщение21.12.2007, 17:11 
Виталий писал(а):
А вот порешать может и не проблема, был бы код на C++ :)
Да вот, не нахожу никак...


После отпуска подсказать только смогу, через 2++ недели. Головой и одной ногой уже в самолёте. А то, что старательно писал полчаса --- опять пропало. Зато теперь знаю эту мерзкую кнопку, от которой всё пропадает --- escape, зараза.

Рекурсивная программка пишется легко. Полином нечётной степени методом деления пополам --- один корень находим гарантированно, понижаем порядок (отрезок, который делим пополам, легко находится). Полином четной степени $p(x)$ разбиваем на участки монотонности (для чего решаем уравнение нечётной степени $p'(x)=0$) и каждый участок смотрим методом деления пополам. Рекурсией доходим до квадратного уравнения. Спросите в Computer Science --- может подскажут знаменитую книгу, которой уже название забыл --- что-то вроде все нужные по жизни алгоритмы на Фортране и все нужные по жизни алгоритмы на C (C++?)

 
 
 
 
Сообщение21.12.2007, 19:12 
Аватара пользователя
:evil:
Виталий писал(а):
А вот порешать может и не проблема, был бы код на C++ Smile
Да вот, не нахожу никак...

Метод Ньютона не найти?! А где Гугл на компе знаете?! гугл, шестая ссылка:

http://alglib.sources.ru/equations/feq0newton.php

 
 
 
 
Сообщение21.12.2007, 20:32 
Аватара пользователя
Для нахождения всех (в т.ч. комплексных) корней можно попробовать во эти ссылки:

http://www.srcc.msu.su/num_anal/lib_na/cat/cat41.htm
http://alglib.sources.ru/equations/eigenpolyroots.php

Или можно попробовать сначала найти все отрезки, в пределах которых корень существует, используя метод Штурма:

http://www.srcc.msu.su/num_anal/lib_na/cat/zp/zp18r.htm

а потом уже решать на каждом отрезке Ньютоном.

Идеально было бы реализовать несколько методов на Ваших примерах, пороверить их на точность и производительность и выбрать лучший.

 
 
 
 
Сообщение21.12.2007, 21:12 
Аватара пользователя
:evil:
worm2 писал(а):
Или можно попробовать сначала найти все отрезки, в пределах которых корень существует, используя метод Штурма:


Я не очень понимаю источник задачи. В принципе, речь идёт, судя по всему, о конкретных (не глобальных) свойствах к.Б. Это означает, что мы ограничены отрезком $[0, 1]$ для значений параметра.

Теоретически, быть может, существует к.Б. с шестью точками пересечения с окружностью. Практически — вряд ли. Кривые с точкой перегиба встречаются редко, с двумя — это экзотика, Т.е., я к тому, что программа не должна ломаться в таких случаях, но и не должна быть сверх эффективной. Чаще всего мы имеем дело с 1-2 корнями.

Практически есть два подхода к оценке количества корней. Первый — алгебраический — метод Штурма и иже с ним. Второй — геометрический — основан на том, что к.Б, находится внутри своего охватывающего многоугольника. А значит, если многоугольник не пересекается с окружностью, то и к.Б. Не пересекается. Тут есть ловушка: проверять пересечение отрезка с окружностью тоже не очень приятно (вычислительно). Но — вполне возможно. А наличие алгоритма деления к.Б. пополам делает возможным разделение корней и дихотомию. Впрочем, тоже относится и к методу Штурма, после того как мы посчитали коэффициенты полинома.


Виталий, простите, но Вам всё-таки нужно почитать что-нибудь по вычислительным методам и аналитической геометрии. Не потому, что никто не хочет Вам помочь. А потому, что Ваша работа требует от Вас более глубокого понимания этих вопросов. Вам не нужно идти далеко, но решение алгебраических уравнений, уравнение прямой — это, обычно, самое начало.

 
 
 [ Сообщений: 13 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group