Решение кубических уравнений на си

Решение кубического уравнения / Методы решения нелинейных уравнений и их систем / Алгоритмы
Решение кубических уравнений на си

Видео:Математика | Кубические уравнения по методу СталлонеСкачать

Математика | Кубические уравнения по методу Сталлоне

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

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

Кубическое уравнение записывается в виде: 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,
x1=-2*sqrt(Q)cos(t)-a/3,
x2=-2*sqrt(Q)cos(t+(2*pi/3))-a/3,
x3=-2*sqrt(Q)cos(t-(2*pi/3))-a/3.

В том случае, когда R 2 >=Q 3 , то действительных корней один (общий случай) или два (вырожденные случаи). Кроме действительного корня, имеется два комплексно-сопряженных. Для их нахождения вычисляются (формула Кардано):
A=-sign(R)[|R|+sqrt(R 2 -Q 3 )] 1/3 ,
B=Q/A
при A!=0 или B=0 при A=0.
Действительный корень будет:
x1=(A+B)-a/3.
Комплексно-сопряженные корни: x2,3=-(A+B)/2-a/3 + i*sqrt(3)*(A-B)/2
В том случае, когда A=B, то комплексно-сопряженные корни вырождаются в действительный:
x2=-A-a/3.

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

Видео:КАК РЕШАТЬ КУБИЧЕСКИЕ УРАВНЕНИЯ | Разбираем на конкретном примереСкачать

КАК РЕШАТЬ КУБИЧЕСКИЕ УРАВНЕНИЯ | Разбираем на конкретном примере

Решение кубических уравнений на си

Модуль состоит из двух файлов, poly34.h, poly34.cpp.
Для его работы не требуются никакие дополнительные библиотеки.
Из стандартных include-файлов подключается только math.h.
Динамическое выделение памяти также не используется.

poly34.h — заголовочный файл
poly34.cpp — реализация.

Уравнения степени 3

Линейные и квадратные уравнения с действительными коэффициентами решаются просто. Для решения кубических уравнений можно взять триногометрическую формулу Виета, код программы занимает около двух десятков строк. Корни уравнения x 3 + ax 2 + bx + c = 0 находятся с помощью функции Здесь x должен быть маccивом длины 3.

В случае трех действительных корней функция возвращает число 3, сами корни возвращаются в x[0],x[1],x[2].

Замечание 1. Корни не обязательно упорядочены!
Если два корня совпадают, то функция возвращает число 2, а в массиве x по-прежнему лежат три числа.

Если функция возвращает 1, то x[0] — действительный корень и x[1]±i*x[2] — пара комплексно сопряженных.

Замечание 2. Из-за погрешностей округления пара комплексно сопряженных корней с очень малой мнимой частью иногда может оказаться действительным корнем кратности 2. Например, для уравнения x 3 — 5x 2 + 8x — 4 = 0 с корнями 1,2,2 получаются корни 1.0, 2.0±i*9.6e-17. Если мнимая часть корня по модулю не превышает 1e-14, то функция SolveP3 сама заменяет такую пару на один действительный двукратный корень, но пользователь должен все равно иметь в виду возможность такой ситуации.

Уравнения степени 4

Для решения уравнений 4-й степени лучше взять решение Декарта — Эйлера. Корни уравнения x 4 + ax 3 + bx 2 + cx + d = 0 находятся с помощью функции Здесь x должен быть маccивом длины 4.

В случае 4-х действительных корней функция возвращает число 4, сами корни возвращаются в x[0],x[1],x[2],x[3].

В случае 2-х действительных и пары комплексно сопряженных корней функция возвращает число 2, x[0],x[1] — действительные корни и x[2]±i*x[3] — пара комплексно сопряженных.

Если уравнение имеет две пары пары комплексно сопряженных корней, то функция возвращает 0, x[0]±i*x[1] и x[2]±i*x[3] — сами корни.
Замечание 3. Численные эксперименты показывают, что в отдельных случаях получающаяся погрешность, довольно велика, до 10 -12 . Поэтому в конце найденные действительные корни уточняются с помощью одного шага метода Ньютона.
Например, для уравнения x*(x-1)*(x-0.0001)*(x-0.0002) без уточнения погрешность будет порядка 0.25*10 -9 , с уточнением порядка 10 -16 .

Уравнения степени 5

Все корни уравнения 5-й степени f(x) = x 5 + ax 4 + bx 3 + cx 2 + dx + e = 0 не превосходят по модулю величины brd = 1 + max( |a|, |b|, |c|, |d|, |e| ).

Уравнение 5-й степени всегда имеет по крайней мере один действительный корень. Для его нахождения, начиная с интервала [-brd,brd] сделаем 6 «делений отрезка пополам». После этого уточним корень методом Ньютона.

Найдя один действительный корень x0, поделим на него исходный многочлен f(x) и найдем корни полученного многочлена 4-й степени.

Корни многочлена f(x) находятся с помощью функции Здесь x должен быть маccивом длины 5.

В случае 5 действительных корней функция возвращает число 5, сами корни возвращаются в x[0],x[1],x[2],x[3],x[4].

В случае 3-х действительных и пары комплексно сопряженных корней функция возвращает число 3, x[0],x[1],x[2] — действительные корни и x[3]±i*x[4] — пара комплексно сопряженных.

Если уравнение имеет две пары пары комплексно сопряженных корней, то функция возвращает 1, x[0] — действительный корень и x[1]±i*x[2] , x[3]±i*x[4] — комплексные корни.

Вспомогательные функции

Решение кубических уравнений производится в одной-единственной функции SolveP3. Для решения уравнений 4-й степени используются три вспомогательных функции:

Первая служит для извлечения квадратного корня из комплексного числа: a+i*s = sqrt(x+i*y).

Вторая — для решения биквадратного уравнения, третья — для решения неполного уравнения.
Замечание 4. Как и в случае кубических уравнений, корень кратности 2 или пара очень близких действительных корней может быть показана в виде пары комплексно сопряженных корней с малой мнимой частью.

Для решения уравнений 5-й степени используются функции:

Видео:ОГЭ №21 Как решать кубическое уравнение x^3+4x^2-9x-36=0 Группировка Деление многочлена столбикомСкачать

ОГЭ №21 Как решать кубическое уравнение x^3+4x^2-9x-36=0 Группировка Деление многочлена столбиком

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

Необходимо решить кубическое уравнение с действительными коэффициентами: 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³-9x-12=0Скачать

Решение уравнения третьей степени x³-9x-12=0

КУБИЧЕСКИЕ УРАВНЕНИЯ 😉 #егэ #математика #профильныйегэ #shorts #огэСкачать

КУБИЧЕСКИЕ УРАВНЕНИЯ 😉 #егэ #математика #профильныйегэ #shorts #огэ

Разбор задачи 1131 acmp.ru Корень кубического уравнения. Решение на C++Скачать

Разбор задачи 1131 acmp.ru Корень кубического уравнения. Решение на C++

✓ Как решать кубические уравнения. Формула Кардано | Ботай со мной #025 | Борис ТрушинСкачать

✓ Как решать кубические уравнения. Формула Кардано | Ботай со мной #025 | Борис Трушин

Самый простой способ решить кубическое уравнениеСкачать

Самый простой способ решить кубическое уравнение

Решение кубических уравненийСкачать

Решение кубических уравнений

решение (поиск корней) квадратных уравнений c++Скачать

решение (поиск корней) квадратных уравнений c++

Как решать кубические уравнения Решите уравнение 3 степени 9 класс Разложить на множители ДелениеСкачать

Как решать кубические уравнения Решите уравнение 3 степени 9 класс Разложить на множители Деление

Теорема БезуСкачать

Теорема Безу

Решение кубического уравнения без формул графическим методом ЛиляСкачать

Решение кубического уравнения без формул графическим методом Лиля

Кубические уравнения. Деление столбиком. Схема Горнера.Скачать

Кубические уравнения. Деление столбиком. Схема Горнера.

Решение биквадратных уравнений. 8 класс.Скачать

Решение биквадратных уравнений. 8 класс.

Решение кубического уравнения преобразованием Чирнгауза! (Tscirnhaus transformation, solve cubic)Скачать

Решение кубического уравнения преобразованием Чирнгауза! (Tscirnhaus transformation, solve cubic)

ФОРМУЛА КАРДАНО-ТАРТАЛЬЯ + РЕКЛАМА МФТИ!!!Скачать

ФОРМУЛА КАРДАНО-ТАРТАЛЬЯ + РЕКЛАМА МФТИ!!!

Формула Кардано. Решение уравнений третьей степени.Скачать

Формула Кардано. Решение уравнений третьей степени.

Математика это не ИсламСкачать

Математика это не Ислам

Формула Кардано для решения кубических уравненийСкачать

Формула Кардано для решения кубических уравнений
Поделиться или сохранить к себе: