В этой главе рассматривается задача отыскания корней нелинейных уравнений и излагаются методы ее решения. Это делается несколько подробнее, чем обычно принято в учебниках по численным методам. Дело в том, что нелинейное уравнение представляет собой редкий пример задачи, которая может быть сравнительно полно исследована элементарными средствами и допускает наглядные геометрические иллюстрации. В то же время многие проблемы, возникающие при отыскании корней нелинейных уравнений, типичны, а некоторые методы их решения (в особенности метод простой итерации и метод Ньютона) допускают широкие обобщения и играют в вычислительной математике фундаментальную роль.
§ 4.1. Постановка задачи. Основные этапы решения
1. Постановка задачи.
Задача отыскания корней нелинейного уравнения с одним неизвестным вида
имеет многовековую историю, но не потеряла свою актуальность и в наши дни. Она часто возникает как элементарный шаг при решении различных научных и технических проблем. Напомним, что корнем (или решением) уравнения (4.1) называется значение х, при котором
Для справедливости большинства рассуждений данной главы достаточно предположить, что в окрестности каждого из искомых корней функция дважды непрерывно дифференцируема.
Корень х уравнения (4.1) называется простым, если противном случае (т. е. в случае корень х называется кратным. Целое число назовем кратностью корня х, если для Геометрически корень х соответствует точке пересечения графика функции с осью Корень х является простым, если график пересекает ось под ненулевым углом, и кратным, если пересечение происходит под нулевым углом. Функция график который изображен на рис. 4.1, имеет четыре корня. Корни простые, кратные.
Задача отыскания простых корней является существенно более простой (и чаще встречающейся), чем задача отыскания кратных корней. В действительности большинство методов решения уравнения (4.1) ориентировано именно на вычисление простых корней.
2. Уточнение постановки задачи.
В конкретной задаче часто интерес представляют не все корни уравнения, а лишь некоторые из них. Тогда постановку задачи уточняют, указывая на то, какие из корней подлежат определению (положительные корни, корни из заданного интервала, максимальный из корней и т.д.).
В подавляющем большинстве случаев представить решение уравнения (4.1) в виде конечной формулы оказывается невозможным. Даже для простейшего алгебраического уравнения степени
явные формулы, выражающие его корни через коэффициенты с помощью конечного числа арифметических операций и извлечения корней степени не выше найдены лишь при Однако уже для
уравнений пятой и более высоких степеней таких формул не существует. Этот замечательный факт, известный как теорема Абеля, был установлен в 30-е годы XIX в. Н. Абелем и Э. Галуа.
Невозможность найти точное решение нелинейного уравнения кажется огорчительной. Однако нужно признать, что желание найти точное числовое значение решения вряд ли следует считать разумным. Во-первых, в реальных исследованиях зависимость является лишь приближенным описанием, моделирующим истинную связь между параметрами у их. Поэтому точное решение х уравнения (4.1) все равно является лишь приближенным значением того параметра х, который в действительности соответствует значению . Во-вторых, даже если уравнение (4.1) допускает возможность нахождения решения в виде конечной формулы, то результат вычислений по этой формуле почти с неизбежностью содержит вычислительную погрешность и поэтому является приближенным.
Пример 4.1. Предположим, что исследование некоторого явления привело к необходимости решить уравнение
Воспользовавшись формулами (3.2) для корней квадратного уравнения, получим значения Найдены ли нами точные значения параметра Очевидно, нет. Скорее всего коэффициенты уравнения (4.3) известны приближенно и в лучшем случае они представляют округленные значения "истинных" коэффициентов. В действительности можно лишь утверждать, что
Предположим теперь, что "истинный" вид уравнения (4.3) таков: Тогда точные значения параметра можно вычислить по формуле Однако она лишь указывает на то, какие операции и в каком порядке следует выполнить. В данном случае точное вычисление по формуле невозможно, так как она содержит операцию извлечения квадратного корня. Вычисленные по ней значения неизбежно окажутся приближенными.
В дальнейшем мы откажемся от попыток найти точные значения корней уравнения (4.1) и сосредоточим внимание на методах решения более реалистичной задачи приближенного вычисления корней с заданной точностью
В данной главе под задачей отыскания решений уравнения (4.1) будем понимать задачу вычисления с заданной точностью конечного числа подлежащих определению корней этого уравнения.
3. Основные этапы решения.
Решение задачи отыскания корней нелинейного уравнения осуществляют в два этапа. Первый этап называется этапом локализации (или отделения) корней, второй - этапом итерационного уточнения корней.
Локализация корней. Отрезок содержащий только один корень х уравнения (4.1), называют отрезком локализации корня х. Цель этапа локализации считают достигнутой, если для каждого из подлежащих определению корней удалось указать отрезок локализации (его длину стараются по возможности сделать минимальной).
Прежде чем переходить непосредственно к отысканию отрезков локализации, имеет смысл провести предварительное исследование задачи для выяснения того, существуют ли вообще корни уравнения (4.1), сколько их и как они расположены на числовой оси.
Способы локализации корней многообразны, и указать универсальный метод не представляется возможным. Иногда отрезок локализации известен либо он определяется из физических соображений. В простых ситуациях хороший результат может давать графический метод (см. пример 4.2). Широко применяют построение таблиц значений функций вида При этом способе локализации о наличии на отрезке корня судят по перемене знака функции на концах отрезка (см. пример 4.3). Основанием для применения указанного способа служит следующая хорошо известная теорема математического анализа.
Теорема 4.1. Пусть функция непрерывна на отрезке и принимает на ею концах значения разных знаков, т. е. Тогда отрезок содержит по крайней мере один корень уравнения
К сожалению, корень четной кратности не удается локализовать на основании перемены знака с помощью даже очень подробной таблицы.
Дело в том, что в малой окрестности такого корня (например, корня на рис. 4.1) функция имеет постоянный знак.
Важно подчеркнуть, что далеко не всегда для успешного отыскания
корня х уравнения (4.1) необходимо полное решение задачи локализации. Часто вместо отрезка локализации достаточно найти хорошее начальное приближение к корню х. Пример 4.2. Локализуем корни уравнения
Для этого преобразуем уравнение к виду и построим графики функций (рис. 4.2). Абсциссы точек пересечения этих графиков являются корнями данного уравнения. Из рис. 4.2 видно, что уравнение имеет два корня и расположенные на отрезках и . Убедимся, что функция принимает на концах указанных отрезков значения разных знаков. Действительно, Следовательно, в силу теоремы 4.1 на каждом из отрезков и находится по крайней мере один корень.
Пример 4.3. Локализуем корни уравнения
Для этого составим таблицу значений функции на отрезке с шагом 0.4.
Таблица 4.1 (см. скан)
Из табл. 4.1 видно, что функция меняет знак на концах отрезков Теорема 4.1 дает основание утверждать, что каждый из этих отрезков содержит по крайней мере один корень. Учитывая, что в силу основной теоремы алгебры многочлен третьей степени не может иметь более трех корней, заключаем, что полученные три отрезка содержат ровно по одному корню. Таким образом, корни локализованы.
Итерационное уточнение корней. На этом этапе для вычисления каждого из корней с точностью используют тот или иной итерационный метод, позволяющий построить последовательность приближений к корню
Общее представление об итерационных методах и основные определения были даны в § 3.3. Введем дополнительно некоторые определения.
Итерационный метод называют одношаговым, если для вычисления очередного приближения используется только одно предыдущее приближение и к шаговым, если для вычисления используются к предыдущих приближений Заметим, что для построения итерационной последовательности одношаговым методом требуется задание только одного начального приближения в то время как при использовании -шагового метода - к начальных приближений
Скорость сходимости - одна из важнейших характеристик итерационных методов. Говорят, что метод сходится со скоростью геометрической прогрессии, знаменатель которой если для всех справедлива следующая оценка:
Как нетрудно видеть, из оценки (4.5) действительно вытекает сходимость метода.
Пусть одношаговый итерационный метод обладает следующим свойством: существует -окрестность корня х такая, что если приближение принадлежит этой окрестности, то справедлива оценка
где постоянные. В этом случае число называют порядком сходимости метода. Если то говорят, что метод обладает линейной скоростью сходимости в указанной -окрестности корня. Если то принято говорить о сверхлинейной скорости сходимости. При скорость сходимости называют
Уравнения, в которых содержатся неизвестные функции, произведенные в степень больше единицы, называются нелинейными.
Например, y=ax+b – линейное уравнение, х^3 – 0,2x^2 + 0,5x + 1,5 = 0 – нелинейное (в общем виде записывается как F(x)=0).
Системой нелинейных уравнений считается одновременное решение нескольких нелинейных уравнений с одной или несколькими переменными.
Существует множество методов решения нелинейных уравнений
и систем нелинейных уравнений, которые принято относить в 3 группы: численные, графические и аналитические. Аналитические методы позволяют определить точные значения решения уравнений. Графические методы наименее точны, но позволяют в сложных уравнениях определить наиболее приближенные значения, с которых в дальнейшем можно начинать находить более точные решения уравнений. Численное решение нелинейных уравнений предполагает прохождения двух этапов: отделение корня и его уточнение до определенно заданной точности.
Отделение корней осуществляется различными способами: графически, при помощи различных специализированных компьютерных программ и др.
Рассмотрим несколько методов уточнения корней с определенно заданной точностью.
Методы численного решения нелинейных уравнений
Метод половинного деления.
Суть метода половинного деления заключается в делении интервала пополам (с=(a+b)/2) и отбрасывании той части интервала, в которой отсутствует корень, т.е. условие F(a)xF(b)
Рис.1. Использование метода половинного деления при решении нелинейных уравнений.
Рассмотрим пример.
Разделим отрезок на 2 части: (a-b)/2 = (-1+0)/2=-0,5.
Если произведение F(a)*F(x)>0, то начала отрезка a переносится в x (a=x), иначе, конец отрезка b переносится в точку x (b=x). Полученный отрезок делим опять пополам и т.д. Весь произведенный расчет отражен ниже в таблице.
Рис.2. Таблица результатов вычислений
В результате вычислений получаем значение с учетом требуемой точности, равной x=-0,946
Метод хорд.
При использовании метода хорд, задается отрезок , в котором есть только один корень с установленной точностью e. Через точки в отрезке a и b, которые имеют координаты (x(F(a);y(F(b)), проводится линия (хорда). Далее определяются точки пересечения этой линии с осью абсцисс (точка z).
Если F(a)xF(z)
Рис.3. Использование метода хорд при решении нелинейных уравнений.
Рассмотрим пример. Необходимо решить уравнение х^3 – 0,2x^2 + 0,5x + 1,5 = 0 с точностью до e
В общем виде уравнение имеет вид: F(x)= х^3 – 0,2x^2 + 0,5x + 1,5
Найдем значения F(x) на концах отрезка :
F(-1) = - 0,2>0;
Определим вторую производную F’’(x) = 6x-0,4.
F’’(-1)=-6,4
F’’(0)=-0,4
На концах отрезка условие F(-1)F’’(-1)>0 соблюдается, поэтому для определения корня уравнения воспользуемся формулой:
Весь произведенный расчет отражен ниже в таблице.
Рис.4. Таблица результатов вычислений
В результате вычислений получаем значение с учетом требуемой точности, равной x=-0,946
Метод касательных (Ньютона)
Данный метод основывается на построении касательных к графику, которые проводятся на одном из концов интервала . В точке пересечения с осью X (z1) строится новая касательная. Данная процедура продолжается до тех пор, пока полученное значение не будет сравним с нужным параметром точности e (F(zi)
Рис.5. Использование метода касательных (Ньютона) при решении нелинейных уравнений.
Рассмотрим пример. Необходимо решить уравнение х^3 – 0,2x^2 + 0,5x + 1,5 = 0 с точностью до e
В общем виде уравнение имеет вид: F(x)= х^3 – 0,2x^2 + 0,5x + 1,5
Определим первую и вторую производные: F’(x)=3x^2-0,4x+0,5, F’’(x)=6x-0,4;
F’’(-1)=-6-0,4=-6,4
F’’(0)=-0,4
Условие F(-1)F’’(-1)>0 выполняется, поэтому расчеты производим по формуле:
Где x0=b, F(a)=F(-1)=-0,2
Весь произведенный расчет отражен ниже в таблице.
Рис.6. Таблица результатов вычислений
В результате вычислений получаем значение с учетом требуемой точности, равной x=-0,946
Уравнение типа F(x)=0 или x=f(x) называется нелинейным. Решить уравнение это значит найти такое x, при котором уравнение превращается в тождество. В общем случае уравнение может иметь 0; 1; 2; ...∞ корней. Рассмотренные ниже численные методы решения нелинейных уравнений позволяют находить один корень на заданном интервале . При этом на интервале должен существовать только один корень. Рассмотрим несколько методов решения нелинейных уравнений .
- Метод перебора
. При решении нелинейного уравнения
методом перебора задаются начальное значение аргумента x=a и шаг h, который при
этом определяет и точность нахождения корней нелинейного уравнения. Пока
выполняется условие F(x)*F(x+h)>0 аргумент x увеличиваем на шаг h (x=x+h). Если произведение
F(x)*F(x+h) становится отрицательным, то на интервале существует
решение уравнения. Структограмма метода приведена на рисунке.
- Метод половинного деления
. При решении нелинейного
уравнения методом половинного деления задаются интервал , на котором
существует только одно решение, и желаемая точность ε. Затем
определяется середина интервала с=(а+b)/2 и проверяется условие F(a)∙F(c)<0.
Если указанное условие выполняется, то правую границу интервала b
переносим в среднюю точку с (b=c). Если условие не выполняется, то в
среднюю точку переносим левую границу(a=c).
Деление отрезка пополам продолжается пока |b-a|>ε. Структограмма
решения нелинейных уравнений методом половинного деления приведена на
рисунке.
Пока |b-a|>ε
F(a)∙F(c)<0
Рис. Структограмма для метода половинного деления
- Метод хорд
. При решении нелинейного уравнения
методом хорд задаются интервал , на котором существует только одно
решение, и точность ε. Затем через две точки с координатами (a,F(a)) и
(b,F(b)) проводим отрезок прямой линии (хорду) и определяем точку пересечения
этой линии с осью абсцисс (точка c).
Если при этом F(a)∙F(c)<0, то правую границу интервала переносим в
точку с (b=c). Если указанное условие не выполняется, то в точку c
переносится левая граница интервала
(а=с). Поиск решения прекращается при достижении заданной точности |F(c)|< ε.
Для определения точки пересечения хорды с осью абсцисс воспользуемся следующей
формулой (попытайтесь получить формулу
самостоятельно).Структограмма метода хорд показана на рисунке.
Пока |F(c)|>ε
F(a)∙F(c)<0
Рис. Структограмма для метода хорд
- Метод касательных
. При решении нелинейного уравнения методом касательных
задаются начальное значение аргумента x 0 и точность ε. Затем в точке(x 0 ,F(x 0))
проводим касательную к графику F(x) и определяем точку пересечения
касательной с осью абсцисс x 1 . В точке (x 1 ,F(x 1))
снова строим касательную, находим следующее приближение искомого решения x 2
и т.д. Указанную процедуру повторяем пока |F(x i)| >
ε. Для определения точки пересечения (i+1) касательной
с осью абсцисс воспользуемся следующей формулой (получите формулу
самостоятельно). Условие сходимости метода касательных F(x 0)∙F""(x 0)>0. Структограмма
решения нелинейных уравнений методом касательных показана на рис.
- Метод хорд-касательных . Если в методе касательных производную функции F"(x i) заменить отношением конечных приращений, то получаем расчетную формулу для метода хорд-касательных . Порядок выполнения вычислений в данном методе аналогичен рассмотренному ранее.
- Метод итераций
. При решении нелинейного уравнения методом итераций
воспользуемся записью уравнения в виде x=f(x)
. Задаются начальное
значение аргумента x 0 и точность ε. Первое приближение
решения x 1 находим из выражения x 1 =f(x 0),
второе - x 2 =f(x 1) и т.д. В общем случае i+1
приближение найдем по формуле x i +1 =f(x i).
Указанную процедуру повторяем пока |f(x i)|>ε.
Условие сходимости метода итераций |f"(x)|<1.
Структограмма метода итераций показана на рис.
Контрольное задание. Лабораторная работа 4.
Решение нелинейных уравнений.
Задание . Решить нелинейное уравнениеуказанными в табл. методами, предварительно определив интервал , на котором существует решение уравнения. Сделать проверку решения.
Варианты уравнений и методов их решения приведены в таблице.
Варианты уравнений и методов их решения
Уравнение |
Методы решения |
|
перебора и хорд |
||
Перебора и касательных |
||
Перебора и хорд-касательных |
||
Перебора и половинного деления |
||
перебора и хорд |
||
Перебора и касательных |
||
Перебора и хорд-касательных |
||
Перебора и половинного деления |
||
перебора и хорд |
||
Перебора и касательных |
||
Перебора и хорд-касательных |
||
Перебора и половинного деления |
||
перебора и хорд |
||
Перебора и касательных |
||
Перебора и хорд-касательных |
||
Перебора и половинного деления |
||
перебора и хорд |
||
Перебора и касательных |
||
x 2 =exp(-x 2)-1 |
Перебора и хорд-касательных |
|
Перебора и половинного деления |
||
перебора и хорд |
||
Перебора и касательных |
||
Перебора и хорд-касательных |
||
Перебора и половинного деления |
- Название, цель работы и задание.
- Математическое описание, алгоритм (структограмма) и текст программы.
- Результаты расчета, проверка и выводы по работе.
Нахождение корней нелинейного уравнения
Курсовая
Информатика, кибернетика и программирование
Блок-схемы реализующие численные методы -для метода дихотомии: Блок-схема для метода хорд: Блок-схема для метода Ньютона: Листинг программы unit Unit1; interfce uses Windows Messges SysUtils Vrints Clsses Grphics Controls Forms Dilogs TeEngine Series ExtCtrls TeeProcs Chrt Menus OleCtnrs StdCtrls xCtrls OleCtrls VCF1 Mth; type TForm1 = clssTForm GroupBox1: TGroupBox; OleContiner2: TOleContiner; MinMenu1: TMinMenu; N1: TMenuItem; Chrt1: TChrt; Series1:...
РОССИЙСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ НЕФТИ И ГАЗА им. И.М. ГУБКИНА
Кафедра информатики
Курсовая работа
по дисциплине «Информатика».
Тема: « Нахождение корней нелинейного уравнения»
Выполнил: студентка
Манепова А. М
группы: ГИ-12-05
Проверил:
Москва, 2013
1. Метод половинного деления (дихотомии) 2.Метод хорд 3. Метод Ньютона Расчеты в математическом пакете Mat lab Результаты расчета с использованием Побора Параметра Листинг программы |
Задание на выполнение курсовой работы.
- расчет , выполненный в математическом пакете Matlab (Mathematica 5 .) (файл-функция для описания нелинейного уравнения, график, решение в символьном и численном виде).
- Нахождение корней нелинейного уравнения в электронных таблицах MS Excel (вид нелинейного уравнения, график нахождения корней нелинейного уравнения, найти корень нелинейного уравнения, используя средства условного анализа: «Побор параметра», «Поиск решения»).
- Создание приложения для нахождения корней нелинейного уравнения в среде Delphi (вид нелинейного уравнения, график на заданном интервале, для каждого метода: результаты табулирования функции на заданном интервале с заданным шагом, для каждого метода численного метода пользовательскую подпрограмму с передачей параметров). Результаты отобразить на форме в виде таблицы и в файле. Предусмотреть изменение точности значения (Е <= 0 , 001).
- вид уравнения
Теория нахождения корней нелинейного уравнения. Описание используемых численных методов.
Пусть задана функция , непрерывная вместе со своими несколькими производными. Требуется найти все или некоторые вещественные корни уравнения
.
Данная задача распадается на несколько подзадач. Во-первых, необходимо определить количество корней, исследовать их
характер
и расположение. Во-вторых, найти приближенные значения корней. В-третьих, выбрать из них интересующие нас корни и вычислить их с требуемой точностью e. Первая и вторая задачи решаются, как правило, аналитическими или графическими методами. В случае, когда ищутся только вещественные корни уравнения, полезно составить таблицу значений
функции
. Если в двух соседних узлах
таблицы
функция имеет разные знаки, то между этими узлами лежит нечетное число корней уравнения (по меньшей мере, один). Если эти узлы близки, то, скорее всего, корень между ними только один.
Найденные приближенные значения корней можно уточнить с помощью различных итерационных методов.
Рассмотрим три метода: 1) метод дихотомии (или деление отрезка пополам); 2) метод простой итерации и 3) метод Ньютона .
1. Метод половинного деления (дихотомии)
Пусть на отрезке задана непрерывная функция
Если значения функции на концах отрезка имеют разные знаки, т.е.
то это означает, что внутри данного отрезка находится нечетное число корней. Пусть для определенности корень один. Суть метода состоит в сокращении на каждой итерации вдвое длины отрезка. Находим середину отрезка по фомуле:
Вычисляем значение функции
и выбираем тот отрезок, на котором функция
меняет свой
знак
. Новый отрезок вновь делим пополам. И этот
процесс
продолжаем до тех пор, пока длина отрезка не сравняется с наперед заданной погрешностью вычисления корня Е.
2.Метод хорд
При решении нелинейного уравнения методом хорд задаются интервалы , на котором существует только одно решение, и точность Ɛ. Затем через две точки с координатами (a,F(a)) и (b,F(b)) проводим отрезок прямой линии (хорду) и определяем точку пересечения этой линии с осью абцисс. Ели при этом F(a)*F(b) <0, то праву границу интервала пееносиим в точку x (b=x). Если указанное условие не выполняется, то в точку x переносится левая граница интервала (a=x). Поиск решения пекращается при достижении заданной точности |F(x)|>Ɛ. Вычисления ведутся до тех пор, пока не выполнится неравенство: . Итерационная формула метода хорд имеет вид:
3. Метод Ньютона
Чтобы численно решить уравнение методом простой итерации , его необходимо привести к следующей форме: , где сжимающее отображение .
Для наилучшей сходимости метода в точке очередного приближения должно выполняться условие . Решение данного уравнения ищут в виде , тогда:
В предположении, что точка приближения «достаточно близка» к корню , и что заданная функция непрерывна , окончательная формула для такова:
С учётом этого функция определяется выражением:
Эта функция в окрестности корня осуществляет сжимающее отображение , и алгоритм нахождения численного решения уравнения сводится к итерационной процедуре вычисления:
Расчеты в математическом пакете Mat lab
В математическом пакете по условию задания был построен график функции и найден корень уравнения с использование символьного решения(solve ) и в численном виде используя встроенные функции: fzero и fsolve . Для описания моей функции использовала файл-функцию.
На следующем рисунке представлен графи функции:
Для записи команд использовала
M
-файл:
В командном окне были получены следующие результаты:
r 1 =
r 2 =
r 3 =
r 4 =
8.0000
r5 =
7.9979 -8.0000
Отчет о результатах вычисления приближенного значения корня уравнения в MS Excel.
MS Excel был проведен расчет приближенного значения корня уравнения с помощью встроенных возможностей «Подбор параметров» и «Поиск решений». Для выбора начального приближения предварительно мной была построена диаграмма.
Результаты расчета с использованием Побора Параметра
x =-9 (исходя из диаграммы)
В результате использования Подбора Параметра был найден корень x =-8,01.
Результаты расчета с использованием Поиска Решений
В качестве начального приближения был выбран x =-9 (исходя из диаграммы)
После выполнения был получен следующий результат:
Поиск решения дал мне значение x = -8,00002
Описание приложения созданного в среде Delphi.
При создании приложения в среде Delphi в интерфейсе был предусмотрен вывод вида функции и графика. Нахождение корня нелинейного уравнения было реализовано с использование трех методов: Метод дихотомии, Метод Хорд и Метод Ньютона. В отличии от расчета в Excel , где корни находились с помощью подбора параметров и поиска решения, в программе предусмотрен ввод точности вычисления пользователем. Результаты расчета выводятся как в окно приложения так и в текстовый файл.
Блок схемы реализующие численные методы
Блок-схема для метода дихотомии:
Блок-схема для метода хорд:
Блок-схема для метода Ньютона:
Листинг программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, TeEngine, Series, ExtCtrls, TeeProcs, Chart, Menus, OleCtnrs,
StdCtrls, AxCtrls, OleCtrls, VCF1, Math;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
OleContainer2: TOleContainer;
MainMenu1: TMainMenu;
N1: TMenuItem;
Chart1: TChart;
Series1: TPointSeries;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
Label1: TLabel;
Edit1: TEdit;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
GroupBox4: TGroupBox;
Label2: TLabel;
Label3: TLabel;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Label4: TLabel;
Edit5: TEdit;
Label5: TLabel;
Edit7: TEdit;
Label7: TLabel;
F1Book1: TF1Book;
F1Book2: TF1Book;
F1Book3: TF1Book;
F1Book4: TF1Book;
Procedure N1Click(Sender: TObject);
Procedure N3Click(Sender: TObject);
Procedure FormCreate(Sender: TObject);
Procedure N4Click(Sender: TObject);
Procedure N5Click(Sender: TObject);
Private
{ Private declarations }
Public
{ Public declarations }
End;
const
xmin:real=-20;
xmax:real=20;
Form1: TForm1;
X,y,t,a,b,cor:real;
I,n:integer;
Fail:textfile;
implementation
{$R *.dfm}
function f(x:real):real;
begin
f:=(8+x)/(x*sqrt(sqr(x)-4));
end;
function f1(x:real):real;
begin
f1:=(-power(x,3)-16*x*x+32)/(x*X*sqrt(power(x*x-4,3)));
end;
procedure metoddix(ta,tb,eps:real;var xk:real;var kolvo: integer);
begin
kolvo:=0;
repeat
xk:=(ta+tb)/2;
kolvo:=kolvo+1;
Form1.F1book1.NumberRC:=xk;
Form1.F1book1.NumberRC:=f(xk);
if f(ta)*f(xk)<0 then tb:=xk
else ta:=xk;
until (abs(f(xk))<=eps);
end;
procedure metodhord(ta,tb,eps:real;var xk:real;var kolvo: integer);
begin
kolvo:=0;
repeat
xk:= ta-f(ta)*(ta-tb)/(f(ta)-f(tb));
kolvo:=kolvo+1;
Form1.F1book2.NumberRC:=xk;
Form1.F1book2.NumberRC:=f(xk);
if f(ta)*f(xk)<0 then tb:=xk
else ta:=xk;
until (abs(f(xk))<=eps);
end;
procedure metodnyutona(ta,eps:real;var xk:real;var kolvo: integer);
begin
kolvo:=0;
repeat
xk:= ta-f(ta)/f1(ta);
ta:=xk;
kolvo:=kolvo+1;
Form1.F1book3.NumberRC:=xk;
Form1.F1book3.NumberRC:=f(xk);
until (abs(f(xk))<=eps);
end;
procedure TForm1.N1Click(Sender: TObject);
begin
x:=xmin;
i:=0;
while x<=xmax do
begin
if abs(x)>5 then
Begin
I:=i+1;
Y:=f(x);
Series1.Addxy(x,y);
F1book4.NumberRC:=x;
F1book4.NumberRC:=y;
End;
x:=x+0.5;
end;
end;
procedure TForm1.N3Click(Sender: TObject); // Вычисление корня методом половинного деления
begin
F1book1.ClearRange(1,1,100,2,3);
t:=strtofloat(Edit1.Text);
a:=strtofloat(Edit2.Text);
b:=strtofloat(Edit3.Text);
metoddix(a,b,t,cor,n);
F1book4.TextRC:=" дихотомия ";
F1book4.TextRC:=" корень =";
F1book4.NumberRC:=cor;
F1book4.TextRC:="y=";
F1book4.NumberRC:=f(cor);
F1book4.TextRC:=" количество итераций =";
F1book4.NumberRC:=n;
Append(fail);
Writeln(fail);
Writeln(fail," Расчет методом дихотомии ");
closefile(fail);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Assignfile(fail," отчет .txt");
Rewrite(fail);
Closefile(fail);
end;
procedure TForm1.N4Click(Sender: TObject); // Вычисление корня методом хорд
begin
F1book2.ClearRange(1,1,100,2,3);
t:=strtofloat(Edit1.Text);
a:=strtofloat(Edit5.Text);
b:=strtofloat(Edit4.Text);
metodhord(a,b,t,cor,n);
F1book4.TextRC:=" хорды ";
F1book4.TextRC:=" корень =";
F1book4.NumberRC:=cor;
F1book4.TextRC:="y=";
F1book4.NumberRC:=f(cor);
F1book4.TextRC:=" количество итераций =";
F1book4.NumberRC:=n;
Assignfile(fail," отчет .txt");
Append(fail);
Writeln(fail);
Writeln(fail," Расчет методом хорд ");
writeln(fail,"Точность расчета = ",t:10:7);
Writeln(fail,"Начальное приближение:a = ",a:8:3," b = ",b:8:3);
writeln(fail, " Найден корень : x = ",cor:8:3, " y=f(x)= ",f(cor):8:6);
writeln(fail, "Количество итераций = ",n);
closefile(fail);
end;
procedure TForm1.N5Click(Sender: TObject); // Вычисление корня методом Ньютона
begin
F1book3.ClearRange(1,1,100,2,3);
t:=strtofloat(Edit1.Text);
a:=strtofloat(Edit7.Text);
metodnyutona(a,t,cor,n);
F1book4.TextRC:=" Ньютона ";
F1book4.TextRC:=" корень =";
F1book4.NumberRC:=cor;
F1book4.TextRC:="y=";
F1book4.NumberRC:=f(cor);
F1book4.TextRC:=" количество итераций =";
F1book4.NumberRC:=n;
Assignfile(fail," отчет .txt");
Append(fail);
Writeln(fail);
Writeln(fail," Расчет методом Ньютона ");
writeln(fail,"Точность расчета = ",t:10:7);
Writeln(fail,"Начальное приближение:a = ",a:8:3," b = ",b:8:3);
writeln(fail, " Найден корень : x = ",cor:8:3, " y=f(x)= ",f(cor):8:6);
writeln(fail, "Количество итераций = ",n);
Closefile(fail);
end;
end.
Изображение окна приложения
Первоначальный интерфейс имеет следующий вид:
После выполнения расчетов при E <= 0,001:
В качестве отчета был сформирован файл «Отчет. txt .»:
Анализ полученных результатов
В соответствии с заданием на курсовую работу в математическом пакете мною был найден корень нелинейного уравнения (x =-8) и построен график.
В электронных таблицах был найден корень уравнения с помощью двух встроенных возможностей «Подбор параметра» и «Поиск решения» , при этом «Поиск решения» все же дал более точное значение. Результаты практически совпали с результатами в Matlab .
Для поиска корня в среде Delphi пользователь имеет возможность ввести точность вычисления с клавиатуры. Тестирование программы показало, что при одной и той же заданной точности вычисления метод Ньютона находит искомое значение при меньшем числе итераций.
Таким образом, расчеты показали, что решить нелинейное уравнение можно в разных средах. Наиболее трудоемким расчет оказался в среде Delphi.
Литература.
- Амосов А.А. и др. вычислительные методы для инженеров М., Высшая школа, 1994.
- Фаронов В.В. Delphi. Программирование на зыке высокого уровня
3 . Уокенбах Д . Microsoft Office Excel 2007. Библия пользователя
Волков В.Б. Понятный самоучитель Excel 2010
Пусть задана функция, непрерывная вместе со своими несколькими производными. Требуется найти все или некоторые вещественные корни уравнения
Данная задача распадается на несколько подзадач. Во-первых, необходимо определить количество корней, исследовать их характер и расположение. Во-вторых, найти приближенные значения корней. В-третьих, выбрать из них интересующие нас корни и вычислить их с требуемой точностью. Первая и вторая задачи решаются, как правило, аналитическими или графическими методами. В случае, когда ищутся только вещественные корни уравнения (1), полезно составить таблицу значений функции. Если в двух соседних узлах таблицы функция имеет разные знаки, то между этими узлами лежит нечетное число корней уравнения (по меньшей мере, один). Если эти узлы близки, то, скорее всего, корень между ними только один.
Найденные приближенные значения корней можно уточнить с помощью различных итерационных методов. Рассмотрим три метода: 1) метод дихотомиии (или деление отрезка пополам); 2) метод простой итерации и 3) метод Ньютона.
Методы решения задачи
Метод деления отpезка пополам
Наиболее простым методом, позволяющим найти корень нелинейного уравнения (1), является метод половинного деления.
Пусть на отрезке задана непрерывная функция Если значения функции на концах отрезка имеют разные знаки, т.е. то это означает, что внутри данного отрезка находится нечетное число корней. Пусть для определенности корень один. Суть метода состоит в сокращении на каждой итерации вдвое длины отрезка. Находим середину отрезка (см. рис. 1) Вычисляем значение функции и выбираем тот отрезок, на котором функция меняет свой знак. Новый отрезок вновь делим пополам. И этот процесс продолжаем до тех пор, пока длина отрезка не сравняется с наперед заданной погрешностью вычисления корня. Построение нескольких последовательных приближений по формуле (3) приведено на рисунке 1.
Итак, алгоритм метода дихотомии:
1. Задать отрезок и погрешность.
2. Если f(a) и f(b) имеют одинаковые знаки, выдать сообщение о невозможности отыскания корня и остановиться.
Рис.1.
3. В противном случае вычислить c=(a+b)/2
4. Если f(a) и f(c) имеют разные знаки, положить b=c, в противном случае a=c.
5. Если длина нового отрезка, то вычислить значение корня c=(a+b)/2 и остановиться, в противном случае перейти к шагу 3.
Так как за N шагов длина отрезка сокращается в 2 N раз, то заданная погрешность отыскания корня будет достигнута за итераций.
Как видно, скорость сходимости мала, но к достоинствам метода относятся простота и безусловная сходимость итерационного процесса. Если отрезок содержит больше одного корня (но нечетное число), то всегда будет найден какой-нибудь один.
Замечание. Для определения интервала, в котором лежит корень, необходим дополнительный анализ функции, основанный либо на аналитических оценках, либо на использование графического способа решения. Можно также организовать перебор значений функции в различных точках, пока не встретится условие знакопеременности функции