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

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

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

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

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

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

Кубическое уравнение записывается в виде: 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

💡 Видео

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Теорема Безу

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Математика это не Ислам
Поделиться или сохранить к себе: