Написать компьютерную программу для решения кубических уравнений
Модуль состоит из двух файлов, 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 или пара очень близких действительных корней может быть показана в виде пары комплексно сопряженных корней с малой мнимой частью.
Выражение вида f(x)=0 называется уравнением. Число х называется корнем уравнения, если при его подстановке уравнение обращается в верное равенство. В статье рассмотрим методы решения уравнений - как точных, так и численных (приближенных).
Решение квадратных уравнений
Квадратным уравнением называется уравнение вида
Классическая формула для нахождения его корней (действительных и комплексных):
- Если D>0, то корней уравнения будет два и оба они будут действительными числами;
- Если D=0, то будет лишь один дейсвительный корень уравнения;
- Если D<0, то действительных решений уравнения нет, а корни будут комплексными.
Для нахождения действительных корней напишем метод SolveQuadraticEquation, входными параметрами которого будут значения при коэффициентах a, b и c, а на выходе – набор значений – решений уравнения:
Нужно заметить, что в данном случае возвращаться будет набор значений типа Complex.
Для тестирования написанных функций возьмем следующие три квадратных уравнения:
- 5x 2 +10x+200=0; данное уравнение не имеет действительных корней, но имеет пару сопряженных комплексных корней: x1 = -1-6,2449979983984i, x2 = -1+6,2449979983984i;
- x 2 -8x+16=0; данное уравнение имеет один двукратный корень x1=x2=4;
- x 2 -5x+6=0; данное уравнение имеет два различных корня x1=2, x2=3.
Напишем программу для решения этих уравнений:
На выходе получим:
5x^2 - 10x + 200 = 0
x0 = (-1, -6,2449979983984)
x1 = (-1, 6,2449979983984)
x^2 - 8x + 16 = 0
x0 = (4, 0)
x1 = (4, 0)
x^2 - 5x + 6 = 0
x0 = (3, 0)
x1 = (2, 0)
Воспользуемся WolframAlpha для проверки значений:
Решение кубических уравнений
Кубическим уравнением называется уравнение третьего порядка, которое имеет вид
Кубическое уравнение всегда имеет 3 корня, которые могут быть как вещественными, так и комплексными. Для решения кубических уравнений используется метод Виета-Кардано.
Формулы Кардано и Виета требуют применения специальных функций, и в том случае, когда требуется провести большую серию вычислений корней кубического уравнения с не слишком сильно меняющимися коэффициентами, более быстрым алгоритмом является использование метода Ньютона или других итерационных методов (с нахождением начального приближения по формулам Кардано-Виета), о которых мы поговорим дальше.
Рассмотрим в качестве примера следующие кубические уравнения:
- x^3 - 6x^2 + 11x - 6 = 0
- x^3 - 6x^2 + 11x + 6 = 0
Напишем программу для решения кубических уравнений с помощью метода Виета-Кардано:
Напишем программу для тестирования метода:
x^3 - 6x^2 + 11x - 6 = 0
x0 = (1, 0)
x1 = (3, 0)
x2 = (2, 0)
x^3 - 6x^2 + 11x + 6 = 0
x0 = (-0,434841368216901, 0)
x1 = (3,21742068410845, 1,85643189109788)
x2 = (3,21742068410845, -1,85643189109788)
Решим эти же уравнения с помощью WolframAlpha.
Решение биквадратных уравнений
Биквадратное уравнение - уравнение четвёртой степени вида
ax 4 + bx 2 + c = 0
где a,b,c — заданные комплексные числа и a != 0. Подстановкой y = x 2 сводится к квадратному уравнению относительно y. Такой переход от одной неизвестной величины к другой называется методом замены неизвестных.
Рассмотрим в качестве примера кубические уравнения:
- 5x^4 - 10x^2 + 200 = 0
- x^4 - 8x^2 + 16 = 0
- x^4 - 5x^2 + 6 = 0
Таким образом немного модифицируем первую функцию для решения биквадратных уравнений:
Напшем программу для тестирования метода:
На выходе получим такие результаты:
5x^4 - 10x^2 + 200 = 0
x0 = (1,63164875514566, -1,91370783040891)
x1 = (-1,63164875514566, 1,91370783040891)
x2 = (1,63164875514566, 1,91370783040891)
x3 = (-1,63164875514566, -1,91370783040891)
x^4 - 8x^2 + 16 = 0
x0 = (2, 0)
x1 = (-2, 0)
x2 = (2, 0)
x3 = (-2, 0)
x^4 - 5x^2 + 6 = 0
x0 = (1,73205080756888, 0)
x1 = (-1,73205080756888, 0)
x2 = (1,4142135623731, 0)
x3 = (-1,4142135623731, 0)
Создание программы решения уравнений второй и выше степени в системе Pascal ABC
1 Муниципальное общеобразовательное учреждение "Гимназия № 7 Красноармейского района Волгограда" 1 Муниципальное общеобразовательное учреждение "Гимназия № 7 Красноармейского района Волгограда"Автор работы награжден дипломом победителя II степени
Текст работы размещён без изображений и формул.Полная версия работы доступна во вкладке "Файлы работы" в формате PDF
Таким образом, актуальность исследования объясняется тем, что проблемы проверки решения уравнения порядка второго и выше остро стоят перед обучающимися, а решиться такие проблемы могут через совершенствования математических знаний и составления прикладных программ. В свою очередь эти знания могут применяться на практике для решения уравнений, что улучшит проверку знаний обучающихся и значительно сократит время на их решение.
Объектом исследования является схема Горнера, и система программирования Pascal ABC.
Предметом исследования выступают алгоритм Горнера для решения уравнений второго порядка и выше в системе программирования Pascal ABC.
Цель исследования – реализация решения уравнений второго и выше порядка, основываясь на схеме Горнера в среде программирования Pascal ABC.
Цель и предмет исследования обусловили необходимость решения следующих задач:
Исследовать важность данной проблемы у обучающихся 9 – 11 классов и выявить эффективность взаимосвязи математического алгоритма и системы программирования Pascal ABC.
Определить эффективность создания программы решения уравнений.
Оценить перспективы от создания программы.
Основу гипотезы исследования составили предположения о том, что если изучить схему Горнера, то найти решение для автоматического определения корней уравнения второго и выше порядка будет проще.
В процессе исследования использовались методы системного, математического и информационного анализа. В качестве информационной базы были использованы материалы, научные труды специалистов в области программирования, и справочные материалы, концепции, представленные в современной математике.
В ходе исследования были использованы следующие группы методов:
теоретические: теоретический анализ литературы по проблеме; систематизация полученной информации; обобщение выводов.
эмпирические: опросно – диагностические методы (интервьюирование, беседы) и др.;
статистические: анализ статистических данных.
Исследована важность проблемы и сравнены способы решения уравнений второго и выше порядка в различных источниках.
Определена эффективность создания программы решения уравнений второго и выше порядка в системе программирования Pascal ABC.
Оценены перспективы от создания программы.
Теоретическая значимость исследования состоит в разработке алгоритма решения уравнений второго и выше порядка при составлении программы на языке программирования Pascal ABC.
Практическая значимость выводов и рекомендаций, содержащихся в работе, связана с тем, что выполненное исследование направлено на решение конкретной задачи. Работа может быть использована также учителями, проверяющими решение уравнений различных порядков.
Теоретические выводы и практические рекомендации, полученные в результате исследования, могут быть использованы школьниками и учителями различных регионов при решении уравнений второго и выше порядка, а также при составлении программы решения уравнений.
Подготовительный (Подборка и изучение материала по данной теме, выделение проблем. Подборка вопросов для анкетирования)
Анкетирование (Анкетирование учащихся школы по разработанным анкетам)
Обработка анкет и анализ полученных результатов (Работа включает в себя выбор программного обеспечения для обработки анкет. Обработка данных и анализ результатов.)
Разработка алгоритма решения уравнений второго и выше порядка (На этом этапе на основе изученной литературы разрабатывается алгоритм решения уравнений второго и выше порядка.)
Составление и тестирование программы.
Презентация проекта (Представление итогового проекта для обсуждения и оценивания.)
Методы исследования. Анализ информационных источников, статистическая обработка результатов.
Глава 1. Теоретическая часть «Описание математических методов решения уравнений второго и выше порядка»
В настоящее время решение уравнений второго порядка и выше на практике в связи с масштабными затратами времени, выполнение повторных действий заставляет задуматься о составлении программы. В целях обеспечения эффективного решения проблем в области работы с цифрами, когда на любом этапе можно допустить вычислительные ошибки, необходимо создание программы, находящей корни уравнения для проверки собственного решения.
Различные уравнения решали более 25 веков назад. Множество способов решения таких уравнений были созданы в Вавилоне, Индии. Потребность в уравнениях была и будет. Нами приведены способы решения (нахождения корней) квадратных уравнений и уравнений высших степеней. Целое уравнение третьей или более высокой степени в отдельных случаях удается решить, используя точечные приемы. Один из приемов решения уравнения вида Р(х)=), где Р(х) – многочлен, степень которого больше двух, состоит в разложении многочлена на множители. Вспомним, какие способы разложения многочлена на множители мы изучали в 7 классе.
Вынесение общего множителя за скобки
С помощью формул сокращенного умножения
С помощью корней квадратного трехчлена.
В основном это способы решения для уравнений частного характера, то есть в каждой группе уравнений, объединенных какими – либо общими свойствами, приведено особое правило, которое применяется только для этой группы уравнений. Этот способ (подбора к каждому уравнению собственной формулы) гораздо легче, чем нахождение корней через дискриминант. Для деления многочленов применяется правило «деления углом», или схема Горнера.
1.1. Схема Горнера. Возможности.
В этой части нами рассмотрено решения уравнений второго и выше порядка по схеме Горнера. Большинство этих формул решения уравнений частного характера. Эти свойства очень удобны так, как гораздо легче решать уравнения по отдельной формуле для этого уравнения, а не по общему принципу. К каждому из способов мы рассмотрели несколько примеров.
Уильям Джордж Горнер (1786 – 1837), известный по схеме Горнера. Опубликована теорема была в 1815г. в Англии.
Схема Горнера позволяет:
Найти значение многочлена в точке a;
Выяснить, является ли число a – корнем многочлена;
Найти новый многочлен от деления на двучлен (понизить степень);
Используя схему Горнера, мы одновременно проверяем, является ли числоa корнем многочлена и делим этот многочлен на двучлен . Это нам потребуется для понижения степени уравнения и мы сможем воспользоваться вспомогательным алгоритмом.
Выделим существенные правила, которые нам могут пригодиться при решении уравнений второго и выше порядка. Здесь нам помогут такие факты:
Если сумма всех коэффициентов многочлена равна нулю, то число 1 является корнем многочлена.
Если сумма коэффициентов многочлена при четных степеняхравна сумме коэффициентов при нечетных степенях, то число -1 является корнем многочлена.
Для приведенного многочлена степени (из теоремы Виета следует, что) если корни многочлена целые, то они являются делителями его свободного члена, который также является целым числом.
Вывод: Исходя из этого, нам надо разложить свободный член многочлена на множители, и последовательно, от меньшего к большему, проверять, какой из множителей является корнем многочлена. Рассмотрим виды уравнений и вычислим корни.
1.2. Виды уравнений. 1.2.1. Уравнения второй степени (квадратные)
Квадратное уравнение - алгебраическое уравнение 2 - й степени. Общий вид уравнения: . Корни уравнения : Формулы верны при любых коэффициентах.
1.2.2. Уравнения третьей степени (кубические)
Кубическое уравнение - алгебраическое уравнение третьей степени. Общий вид кубического уравнения: ax 3 + bx 2 + cx + d = 0, где а ≠ 0
Используя правила Горнера решим уравнение такого вида. (Приложение 2). Понизив степень многочлена мы продолжаем решение обычного квадратного уравнения, рассмотренного ранее.
1.2.3. Уравнения четвертой степени
Уравнение четвертой степени - алгебраическое уравнение четвертой степени. Общий вид кубического уравнения: аx 4 + bx 3 + cx 2 + dх+е = 0,где а ≠ 0.
Используя схему Горнера решим уравнение этого вида.(Приложение 3). Понизив степень многочлена мы продолжаем решение кубического уравнения, используя схему Горнера, поставив перед собой цель, понизить степень до квадратного уравнения.
В теоретической части нашей работы нами рассмотрены решение квадратных уравнений и уравнений третьей, четвертой степени методом Горнера, определена схема решения уравнений второго, третьего, четвертого порядка, выведены новые, ранее нам неизвестные формулы. Мы проработали много вариантов примеров перед тем, как сделать вывод: используя схему Горнера, мы решаем уравнения третьей, четвертой и выше степеней аналогично. Мы уже представляем себе, как составить программу , которая будет решать уравнения такого вида. Каждое решение пригодится нам в дальнейшей учебе. Эта работа помогла классифицировать старые знания и познать новые.
Глава 2. Экспериментальная часть «Реализация метода Горнера на практике» 2.1. Эксперимент 1. Выявление основных методов решения уравнений второй и выше степени.
Цель: проанализировать основные методы решения уравнений на практике; проанализировать время, которое тратится на решение уравнений второй и выше степени.
Для того чтобы грамотно реализовать собственную программу, необходимо не только ознакомится с мнением, решением, ошибками других, и понять причины, по которым они произошли, но и, возможно, применять особые приемы программирования и специализированные средства разработки.
По результатам анкетирования (приложение 1) учащихся 9 – 11 классов (всего 55 оппонентов) оценки правильного нахождения корней уравнений второго и выше порядка выделено:
Умеют решать квадратные уравнения через дискриминант 50 оппонентов; кубические уравнения делением «уголочком» подбором корней 10 оппонентов; 4 степени подбором корней 3 оппонента и заменой переменной; уравнения выше 4 степени не пробовал решать никто.
Время, которое затрачивается обучающимся на решение уравнений:
Из графика видно, что временные затраты на решение даже одного уравнения существенно. А если их надо решить несколько? Время увеличится в разы.
2.2. Эксперимент 2. Создание алгоритма решения уравнений второго порядка и выше.
Цель: проанализировать эффективность метода Горнера при составлении программы; выработать схему использования вспомогательного алгоритма.
Проанализировав анкеты, мы выяснили, что при решении уравнений второго и выше пличными методами: методом подбора корней, делением уголочком многочлена на многочлен, что довольно долгий процесс решения.
Рассмотренные теоретические вопросы дают возможность создания алгоритма решения поставленной цели. Этот алгоритми будем разрабатывать.
Обращаясь к вспомогательному алгоритму решения квадратного уравнения (приложение 3) и алгоритму «понижения степени» многочлена (нахождения делителей многочлена, разложение многочлена на множители), воспользуемся схемой Горнера. 2.3. Эксперимент 3 . Создание программы, реализующей схему Горнера при решении уравнений второй и выше степени.
Цель: составить программу, позволяющую решать уравнения второй и выше степени; проанализировать работу программы.
Для составления программы мы выбрали среду программирования Pascal ABC. Данная программная среда является языком высокого уровня и в последнее время пользуется не только профессиональными программистами, но и начинающим, а также на уроках информатике и ИКТ в гимназии.
В системе программирования четко реализованы принципы структурного программирования. Сначала мы написали программы отдельно для каждого вида уравнений. Затем воспользовались вспомогательным алгоритмом нахождения квадратного уравнения (приложение 3), кубического уравнения (приложение 4), решили объединить, составили программу с использованием процедуры. Рассмотренные теоретические вопросы дают возможность создания программы на Pascal ABC для решения.
Текст программы решения уравнений второй и выше степени, приведен в приложении 5.
В данной главе рассмотрен алгоритм решения уравнений с использованием схемы Горнера. Составленная программа решения уравнений второй и выше степени может быть использована в практической деятельности для помощи учащимся и учителям решать и проверять соответственно задания , где требуется нахождения корней уравнений второй, третьей, четвертой степени , значительно сократив время на проверку.
Математическая энциклопедия. — М.: Советская энциклопедия.И. М. Виноградов.1977—1985.
В.В. Фараонов «Турбо Паскаль». Издание 7-е переработанное
Приложение 1 Анкета для обучающихся
Умеете ли Вы решать уравнения вида ах 2 + вх+с=0 (уравнения второго порядка)?
а) да Если «ДА» каким способом _____________________
в) никогда не делал этого ( не встречал в своей жизни)
Сколько занимает времени решение одного уравнения второго порядка?
а) от 1 до 5 минут б) от 5до 10 минут
в) от 10 до 30 минут г) около часа
Умеете ли Вы решать уравнения вида ах 3 + вх 2 +сх+d=0 (уравнения третьего порядка)?
а) да Если «ДА» каким способом ______________________
в) никогда не делал этого ( не встречал в своей жизни)
Сколько занимает времени решение одного уравнения третьего порядка?
а) от 1 до 5 минут б) от 5до 10 минут
в) от 10 до 30 минут г) около часа
Умеете ли Вы решать уравнения вида ах 4 + вх 3 +сх 2 +dx+e=0 (уравнения четвертого порядка)?
а) да Если «ДА» каким способом ______________________
в) никогда не делал этого ( не встречал в своей жизни)
Сколько занимает времени решение одного уравнения четвертого порядка ?
а) от 1 до 5 минут б) от 5до 10 минут
в) от 10 до 30 минут г) около часа
Умеете ли Вы решать уравнения более высокого порядка ?
а) да Если «ДА» каким способом ______________________
в) никогда не делал этого ( не встречал в своей жизни)
Хотели бы Вы научиться решать уравнения второго порядка и выше?
а) да б) нет в) предпочитаю списать
Хотели бы Вы иметь у себя программу, решающую уравнения второго порядка и выше?
Приложение 2 Решение уравнения методом Горнера
Находим делители свободного члена ±1; ± 2; ± 3; ± 6.
Задача 3.6. Составить программу для решения кубического уравнения .
Кубическое уравнение имеет вид
( 3.1) |
После деления на a уравнение 3.1 принимает канонический вид:
( 3.2) |
.
и получим приведённое уравнение:
( 3.3) |
.
.
Корни приведённого уравнения могут быть рассчитаны по формулам Кардано:
( 3.4) |
.
При отрицательном дискриминанте уравнение (3.1) имеет три действительных корня, но они будут вычисляться через вспомогательные комплексные величины. Чтобы избавиться от этого, можно воспользоваться формулами:
( 3.5) |
.
Таким образом, при положительном дискриминанте кубического уравнения (3.3) расчёт корней будем вести по формулам (3.4), а при отрицательном — по формулам (3.5). После расчёта корней приведённого уравнения (3.3) по формулам (3.4) или (3.5), необходимо по формулам
перейти к корням заданного кубического уравнения (3.1).
Блок-схема решения кубического уравнения представлена на рис. 3.18.
Описание блок-схемы. В блоке 1 вводятся коэффициенты кубического уравнения, в блоках 2–3 рассчитываются коэффициенты канонического и приведённого уравнений. Блок 4 предназначен для вычисления дискриминанта. В блоке 5 проверяется знак дискриминанта кубического уравнения. Если он отрицателен, то корни вычисляются по формулам 3.5 (блоки 6–7). При положительном значении дискриминанта расчёт идёт по формулам 3.4 (блок 9, 10). Блоки 8 и 11 предназначены для вывода результатов на экран.
Текст программы с комментариями приведён ниже 3 При расчёте величин и в программе предусмотрена проверка значения подкоренного выражения. Если \mp\sqrt>0" />
, то ]+\sqrt>" />
, а ]-\sqrt>" />
.Если \mp\sqrt<0" />
, то ]<|\frac<-q>+\sqrt|>" />
, а ]<|\frac<-q>-\sqrt|>" />
. Соответственно, при нулевом значении подкоренного выражения u и v обращаются в ноль .
Читайте также: