Решение кубического уравнения в программирование

Методы решения кубических уравнений

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

· Если Δ > 0, тогда уравнение имеет три различных вещественных корня.

· Если Δ = 0, тогда хотя бы два корня совпадают. Это может быть, когда уравнение имеет двойной вещественный корень и ещё один отличный от них вещественный корень; либо, все три корня совпадают, образуя корень кратности 3.

Корни кубического уравнения связаны с коэффициентами следующим образом:

Исходя из основных свойств решения кубических уравнений, необходимо дать определение понятию «комплексное число». Комплексные числа — числа вида x + y , где x и y – вещественные числа, i – мнимая единица , то есть: i 2 = –1. Числа x = Â (z) ( или Re z ) и y = Á (z) ( или Im z ) называются соответственно вещественной и мнимой частями z . Множество всех комплексных чисел обозначается . Если комплексное число z = x + iy , то число называется сопряжённым к z . [1]

Наиболее распространенный метод решения кубических уравнений – метод перебора. [2] Сначала путём перебора находится один из корней уравнения (например, x 1 ). Вторая стадия решения – это деление многочлена ax 3 + bx 2 + cx + d на двучлен x – x 1 и решение полученного квадратного уравнения.

Алгоритм решения кубических уравнений с использованием формулы Кардано

В данном разделе статьи приведен подробный алгоритм решения уравнений третьей степени с помощи формулы Кардано. Данный алгоритм состоит из двух этапов. На первом этапе кубические уравнения приводятся к форме, в которой отсутствует член со второй степенью неизвестного. Такие кубические уравнения называют трёхчленными кубическими уравнениями. На втором этапе трёхчленные кубические уравнения решаются при помощи сведения их к квадратным уравнениям . [3]

Рассмотрим алгоритм нахождения всех корней кубического уравнения на основе описанной выше формулы, а также ее тригонометрической интерпретации. [3,4] Приведем исходное уравнение к каноническому виду. Для этого с делаем замену переменного по формуле : . Раскрыв скобки в левой части уравнения, получим: . Уравнение приведено к каноническому виду:

Дискриминантом уравнения называется число . Найдем решение полученного уравнения в виде:



Число удовлетворяет этому равенству, если числа m и n удовлетворяют системе из двух уравнений:

Находим числа m и n:

Дальнейшее решение зависит от знака дискриминанта S.

1. Пусть дискриминант меньше нуля. Тогда уравнение имеет три различных корня.

Найдём модуль комплексных чисел :

Аргумент числа равен (в зависимости от знака q):

· Если , то

· Если , то

· Если , то

Для k=0, k=1, k=2 получаем решение:

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

2. Пусть дискриминант больше нуля. Тогда уравнение имеет один действительный корень и два комплексно-сопряжённых.

При этом для любых комплексных значений корней необходимо выполнение условия: .

Примем аргумент F действительных чисел, стоящих под знаком кубического корня, равным нулю. При этом модули этих чисел могут принимать отрицательное значение. Аргумент кубического корня будет принимать 3 значения: 0, 2*π/3, 4*π/3. Каждое решение y=y1, y=y2, y=y3 будет состоять из суммы двух комплексных чисел .

Число z1 находится в группе из трёх чисел:

Число z2 находится в группе из трёх чисел:

Для действительных значений кубических корней выполняется обозначенное выше условие. Поэтому действительный корень уравнения . Учитывая равенство , получим два комплексно сопряжённых корня: , .

Итак, если дискриминант больше нуля, то уравнение имеет один действительный корень и два комплексно-сопряжённых корня:


3. Дискриминант равен нулю. В этом случае уравнение имеет три действительных корня, и два корня из трёх обязательно совпадают друг с другом. Рассуждая точно так же, как в случае с положительным дискриминантом, учитывая равенство , из формул корней уравнения с положительным дискриминантом получим:

Итак, если дискриминант равен нулю, то уравнение имеет три действительных корня, и два корня из трёх обязательно совпадают друг с другом: .

Теперь получим решение исходного кубического уравнения . Дискриминант этого уравнения равен:

В зависимости от знака дискриминанта S возможны три случая:

· Если , то:

· Если , то:

· Если , то:

При этом: . Аргумент F вычисляется по формулам, рассмотренным выше, исходя из знака q.

Реализация алгоритма в объектно-ориентированной среде программирования Delphi

Авторами статьи была создана программа в среде Delphi для решения кубических уравнений с использованием формулы Кардано по разработанному алгоритму, описанному выше.

Рис. 1 . Интерфейс программы для решения кубических уравнений.

Для решения уравнения пользователю необходимо ввести коэффициенты уравнения. Результат работы программы – коэффициенты уравнения в канонической форме (p и q), дискриминант (Q) и корни уравнения. Для создания интерфейса использовались следующие компоненты среды Delphi [5]:

· Label – для информирования пользователя о назначении программы, обозначения предназначения полей ввода – вывода;

· Button – для реализации основных действий программы (решения уравнения, очистки полей ввода-вывода, закрытия программы);

· Edit – для организации ввода-вывода данных;

· Panel и GroupBox – для группировки элементов на форме программы.

Рассмотрим код основных процедур программы.

Для решения уравнения необходимо объявить следующие переменные:

· A,B,C,D – коэффициенты исходного уравнения;

· p,q – коэффициенты преобразованного уравнения;

· F – аргумент комплексного корня;

· Re, Im – действительная и мнимая части комплексного корня;

· x1,x2,x3,y1,y2 – корни уравнения.

В программе предусмотрен контроль корректности ввода данных:

if (edit1.Text=») or (edit2.Text=») or (edit3.Text=») or (edit4.Text=») then

Showmessage(‘Введите все коэффициенты уравнения’);

Процедуры Clear_Koeffs и Clear_Results осуществляют очистку полей ввода-вывода.

Процедура вычисления коэффициентов и дискриминанта преобразованного уравнения имеет следующий вид:

edit5.Text := FloatToStr(p); edit6.Text := FloatToStr(q);

Вычисление корней уравнения происходит в зависимости от знака дискриминанта:

· Если дискриминант меньше нуля:

if q>0 then F:=Arctan(-2*Sqrt(-QQ)/q)+Pi;

if q=0 then F:=Pi/2;

if q=0 then x3:=-B/A/3;

Edit8.Text := FloatToStr(x1); Edit9.Text := FloatToStr(x2);

· Если дискриминант больше нуля:

if QQ>0 then begin

if -q/2+Sqrt(QQ)>0 then y1:=exp(ln(abs(-q/2+Sqrt(QQ)))/3);

if -q/2+Sqrt(QQ)=0 then y1:=0;

if -q/2-Sqrt(QQ)>0 then y2:=exp(ln(abs(-q/2-Sqrt(QQ)))/3);

if -q/2-Sqrt(QQ)=0 then y2:=0;

x1:=y1+y2-B/A/3; Re:=-(y1+y2)/2-B/A/3; Im:=(y1-y2)*Sqrt(3)/2;

Edit9.Text := FloatToStr(Re)+’ + i * ‘+FloatToStr(Im);

Edit10.Text:= FloatToStr(Re)+’ — i * ‘+FloatToStr(Im);

· Если дискриминант равен нулю:

if QQ=0 then begin

if q>0 then y1:=-exp(ln(abs(-q/2))/3);

Edit8.Text := FloatToStr(x1); Edit9.Text := FloatToStr(x2);

В программе также организован программный контроль ввода коэффициентов. Для этого создан обработчик события KeyPress для соответствующих элементов типа Edit [6]:

if not (Key in [‘-‘, ‘1’..’9′, #8]) then Key := #0.

В рамках проведенного исследования было рассмотрено несколько способов решения кубических уравнений, в том числе, с использованием формулы Кардано. Были изучены различные нюансы применения этого метода, а также проведено исследование зависимости получаемых результатов от знака кубического дискриминанта. В статье также приведен подробный алгоритм, разработанный авторами статьи, на основе тригонометрической интерпретации формулы Кардано, а также рассмотрены основные процедуры созданного программного обеспечения в объектно-ориентированной среде Delphi.

Существует довольно много проблем в различных научных областях, решение которых сводится к изучению методов решения уравнений третьей и выше степеней. Таким образом, можно сделать вывод, что актуальность проведенного исследования заключается в практическом применении рассмотренных методов, а также созданного программного обеспечения как при изучении некоторых тем математики, физики в школе и ВУЗах, так и при решении прикладных задач из различных областей.

1. Бронштейн И.Н., Семендяев К.А. Справочник по математике для инженеров и учащихся ВТУЗов. – М.: Наука, 1986.

2. Омельченко В.П., Э.В.Курбатова. Математика: учебное пособие. – Ростов н/Д.: Феникс, 2005.

3. Пичурин Л.Ф. За страницами учебника алгебры. – М.: Просвещение, 1990.

4. Корн Г., Корн Т. Справочник по математики для научных работников и инженеров. – М.: Наука, 1973.

5. Фленов М.Е. Библия Delphi. – С-Пб: БХВ-Петербург, 2011.

6. Архангельский А.Я. Delphi 7. Справочное пособие. – М.: Бином, 2004.

Поступила в редакцию 07.04.2014 г.

Полное решение кубического уравнения (формула Кардано)

Необходимо решить кубическое уравнение с действительными коэффициентами: ax 3 + bx 2 + cx + d = 0 .

По основной теореме алгебры оно имеет три корня (4 различных типа).

Формула была украдена у Тартальи и опубликована Джероламо Кардано (тем самым изобретателем карданного вала) в книге «Великое искусство» в 1545 году. Описание алгоритма доступно в Интернете, однако программная реализация имеет некоторые нюансы, связанные с необходимостью анализа исходных данных. Вот что получилось:

Входными параметрами метода являются коэффициенты a, b, c, d; по ссылке возвращается тип корней (tip=1,2,3,4) и их значения (p1,p2,p3):

Для типа 1 (tip=1) имеется один действительный и два комплексных корня: x1=p1; x2=p2+i*p3; x3=p2-i*p3, где i — мнимая единица.
Тип 2 — три различных действительных корня, тип 3 — один отличающийся и два кратных действительных корня, тип 4 — три кратных действительных корня, для всех типов (tip=2,3,4) x1=p1, x2=p2, x3=p3.
Если кубическое уравнение является характеристическим уравнением исходного линейного дифференциального уравнения 3 степени, то для его решения важно знать именно тип решения (tip).

Для тестирования метода используйте следующую программу:

Минимальный набор тестов:
a, b, c, d:
187.5, 50, 10, 1 -> тип 1
1, 6, 3, -10 -> тип 2
1, 12, 36, 32 -> тип 3
3, -9, 9, -3 -> тип 4

Решение кубического уравнения в программирование

З десь представлен алгоритм для решения кубического уравнения методом Виета-Кардано. Программа написана для случая действительных коэффициентов (корни могут быть комплексными).

К убическое уравнение записывается в виде:

x 3 +a*x 2 +b*x+c=0.

Д ля нахождения его корней, в случае действительных коэффициентов, вначале вычисляются:

Q=(a 2 -3b)/9,
R=(2a 3 -9ab+27c)/54.

Д алее, если R 2 3 , то уравнение имеет три действительных корня, вычисляющихся по формулам (Виета):

t=acos(R/sqrt(Q 3 ))/3,

В том случае, когда R 2 >=Q 3 , то действительных корней один (общий случай) или два (вырожденные случаи). Кроме действительного корня, имеется два комплексно-сопряженных. Для их нахождения вычисляются (формула Кардано):

Д ействительный корень будет:

К омплексно-сопряженные корни:

В том случае, когда A=B, то комплексно-сопряженные корни вырождаются в действительный:
x2=-A-a/3.

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

Н иже расположена программа для нахождения корней кубического уравнения с действительными коэффициентами.


источники:

http://c-sharp.pro/%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D0%B5-%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BA%D1%83%D0%B1%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE-%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8/

http://program.rin.ru/razdel/html/757.html