Решение нелинейных уравнений методом Ньютона

Обзор существующих методов решения нелинейных уравнений. Алгебраические и трансцендентные уравнения. Методы локализации корней. Алгоритм метода Ньютона. Численные методы решения нелинейных уравнений. Разработка и тестирование программного продукта.

Рубрика Математика
Вид курсовая работа
Язык русский
Дата добавления 14.05.2014
Размер файла 3,9 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Описание процедуры BSaveAsClick

Эта процедура является обработчиком события onClick для объектa NSaveAs, то есть запускается при щелчке на указанном объекте. В теле этого вызывается стандартный диалог сохранения файла, в случае, если диалог был завершен успешно, имя файла сохраняется в переменной FName, производится сохранение содержимого массива AComp в файл с указанным именем. Алгоритм процедуры приведен на рисунке А.3.

Процедура NSaveClick является обработчиком события onClick для объектa NSave. В ней тоже происходит сохранение содержимого массива AComp в файл на жестком диске, однако в этой процедуре не выполняется запуск диалога сохранения файла, а производится сохранение в текущий файл, имя которого занесено в FName.

Процедуры навигации и редактирования

Процедура BBPrevClick является обработчиком события onClick для объектa BBPrev. Предназначена для перехода не предыдущую запись, для чего номер текущей записи CurK уменьшается на 1 и выводится на форму запись AComp[CurK] при помощи ShowComp. Следует заметить, что если текущая запись первая, то нажатие на кнопку переводит указатель на последнюю запись массива.

Процедура BBNextClick является обработчиком события onClick для объектa BBNext. Предназначена для перехода не следующую запись, для чего номер текущей записи CurK увеличивается на 1, а на форму выводится запись AComp[CurK] при помощи ShowComp. Следует заметить, что если текущая запись последняя, то нажатие на кнопку переводит указатель на первую запись массива.

Процедура BBDeleteClick является обработчиком события onClick для объектa BBDelete. Предназначена для удаления записи, для чего все записи после позиции CurK сдвигаются на одну позицию влево, а размерность массива уменьшается на 1.

Процедура BBUpdateClick является обработчиком события onClick для объектa BBUpdate. Предназначена для изменения данных о компьютере. В процедуре содержимое из полей ввода формы переносится в соответствующие поля текущего компьютера под номером CurK.

Процедура BBAddClick является обработчиком события onClick для объектa BBAdd. Предназначена для добавления данных о новом компьютере. В процедуре содержимое из полей ввода формы переносится в соответствующие поля компьютера, размер массива AComp увеличивается на 1 и новая запись добавляется в конец массива.

Процедура BBSearchClick является обработчиком события onClick для объектa BBSearch. Предназначена для поиска компьютеров по какому-либо критерию. В процедуре анализируется содержимое из полей ввода формы, если содержимое пустое, то в поиске это поле не учитывается, если же нет, то происходит поиск записей с указанным значением соответствующего поля. Условия по всем полям объединяются условием И. Содержимое выборки заносится в массив Ares и выводится на форму. Следует заметить, что по текстовым полям «Наименование компьютера», «Тип монитора» выполняется сравнение не на полное соответствие строк, а на наличие указанной подстроки. То есть, если поле содержит искомый фрагмент и еще какую-то информацию, то такой компьютер тоже будет выведен.

Разработанная программа представляет собой исполняемый файл Nuton.exe размером 493 568 байт. В программе выполняется обработка типизированных файлов.

Проектирование интерфейса

Сначала создадим главное окно программы, без которой нам никак нельзя обойтись [1]. Сделаем в нем главное меню, состоящее из пунктов «Визуализация», «Исследование», «Титульный лист», «Выход». Далее нам будет необходимы поля для ввода и вывода данных, создадим поля «Начало промежутка», «Конец промежутка», «Точность», а так же поле «Корень», в которое после нажатия кнопки «Решение» будет выводиться ответ. Это окно будет являться опорным пунктом для наших дальнейших действий. Обозначим его как Form1.

Далее, создадим другие «формы» для последующей работы, на которые в дальнейшем просто будем ссылаться:

окно для визуализации метода итераций - Form2. Выводится при выборе пункта меню «Визуализация»:

При нажатии на кнопку «Итерации» появится график, отражающий итерационный процесс

окно заставки, появляющееся при запуске программы - Form3:

окно титульного листа - Form4:

Теперь, после того как мы создали все необходимые формы, можем приступать к создании программного кода, в котором будем ссылаться на каждую из них [4]. В этом коде нам необходимо будет:

для Form1 - обеспечить безошибочное подключение ко всем остальным формам.

для Form2 -обеспечить вывод графика и визуализацию итерационного процесса.

для Form3, Form4- включить в программу.

Программирование вычисления

Для вычисления корней уравнения используется подпрограмма - функция iter(x0,xk,eps:real): real. Она составлена по блок схеме представленной выше (1 теоритическая часть). Функции нужно сообщить начало и конец промежутка, результат функции корень уравнения;

function iter(x0,xk,eps:real): real;

var

x1,y,d,j:real;

begin

x1:=x0;

repeat

if (fnsh(x1)<1)then begin

y:=form1.fn(x1);

d:=abs(y-x1);

x1:=y;

end else begin

j:=messagedlg('Задайте другое начало промежутка',mtinformation,[mbok],0);

break;

end;

until (d<=eps)or (x1>=xk);

if x1>=xk then

j:=messagedlg('На заданном промежутке корней нет!',mtinformation,[mbok],0)

else

iter:=y;

end;

Уравнение задано подпрограммой - функцией tform1.fn(x:real): real

function tform1.fn(x:real): real;

begin

fn:=2-sin(1/x);

end;

Производная задана подпрограммрй - функцией fnsh(x:real): real;

function fnsh(x:real): real;

begin

fnsh:=cos(1/x)/sqr(x);

end;

В обоих случаях начальные данные это значение переменной x. В первом случае результат значение функции, во втором значение производной функции.

Визуализация метода

В главном окне выберем пункт меню «Визуализация»;

Перед нами появляется окно, где демонстрируется график функции, изоброженного красным цветом, при этом предусмотрена возможность визуализации итерационного процесса, зеленым цветом, посредством нажатия кнопки «Итерации».

Построение графика осуществляется в ниже следующем программном коде:

procedure TForm2.FormCreate(Sender: TObject);

var

i:real;

begin

series1.Clear;

Series2.Clear;

i:=1;

While i<=1.5 do begin

if i<>0 then

series1.AddXY(i,i-2+sin(1/i),'',clred);

i:=i+0.0001;

end;

end

График строится в момент создания Form2. Построение ведется на промежутке от 1 до 1,5. В цикле переменная i меняется в этих пределах с шагом 0,0001, и строится график от значения переменной i.

При нажатии кнопки итерации выполнятся следующий код:

procedure TForm2.Button1Click(Sender: TObject);

begin

x1:=strtofloat(form1.labelededit1.text);

xk :=strtofloat(form1.labelededit2.text);

eps:=strtofloat(form1.labelededit3.text);

series2.Clear;

Timer1.Enabled:=true;

end

После чего запускается таймер, который повторяет свои действия через определенный промежуток времени.

procedure TForm2.Timer1Timer(Sender: TObject);

begin

y:=form1.fn(x1);

series2.AddXY(x1,y-x1,'',clgreen);

d:=abs(y-x1);

x1:=y;

if d<eps then timer1.Enabled:=false;

end

Здесь строится итерационная кривая, показывающая последовательное приближение к корню уравнения до определенной точности. Основой кода построения итерационной кривой является блок - схема из теоретической части.

Вычислительный эксперимент

Запуская программу, появляется заставка:

Спустя 2 секунды окно заставки закрывается и появляется главное окно программы:

На нем, как и задумывалось, обозначены: главное меню состоящее из пунктов «Визуализация», «Титульный лист», «Выход», а также поля «Начало промежутка», «Конец промежутка», «Точность», а также поле «Корень», в которое после нажатия кнопки «Решение» будет выводится ответ.

Выбирая «Титульный лист», открывается окно, из которого узнаем о назначении программы, ее разработчике, а так же о проверяющем преподавателе.

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

Выбирая пункт меню «Исследование», мы открываем окно, где приведены результаты решения уравнения в математическом пакете Mathcad 14 и в созданной мной программе, а также разность этих значений:

Результаты записываются в текстовый Файл «issled.txt»

Выбирая пункт меню «Визуализация», отображается график уравнения и при нажатии кнопки итнрации отображается итерационная кривая:

Главное меню содержит пункты:

- «Информация» (при нажатии запускается диалог с информацией о задании и разработчике, изображенный на рисунке 4.2);

- «Открыть файл» (при нажатии запускается диалог открытия файла, изображенный на рисунке 4.3)

- «Перенос» (при нажатии выполняются действия согласно заданию)

- «Сохранить результат» (при нажатии запускается диалог сохранения файла, изображенный на рисунке 4.4);

- «Выход» (закрывает программу)

Следует обратить внимание, что размер формы не соответствует размеру игрового поля. Нужный размер формы будет установлен во время работы программы. Делает это процедура обработки события OnFormActivate, которая на основе информации о размере игрового поля (количестве клеток по вертикали и горизонтали) и клеток устанавливает значение свойств ClientHeight и ClientWidth, определяющих размер клиентской области главного окна программы.

Основное окно программы содержит компонент MainMenu1, который представляет собой главное меню программы. Значок компонента MainMenu находится на вкладке Standard.

Значок компонента MainMenu можно поместить в любое место формы, так как во время работы программы он не виден. Пункты меню появляются в верхней части формы в результате настройки меню. Для настройки меню используется редактор меню, который запускается двойным щелчком левой кнопкой мыши на значке компонента или выбором из контекстного меню компонента команды Menu Designer. В начале работы над новым меню, сразу после добавления компонента к форме, в окне редактора находится один-единственный прямоугольник - заготовка пункта меню. Чтобы превратить эту заготовку в меню, нужно в окне Object Inspector в поле Caption ввести название меню.

Если перед какой-либо буквой в названии меню ввести знак &, то во время работы программы можно будет активизировать этот пункт меню путем нажатия комбинации клавиши <Аlt> и клавиши, соответствующей символу, перед которым стоит знак &. В названии меню эта буква будет подчеркнута. Чтобы добавить в главное меню элемент, необходимо в окне редактора меню выбрать последний (пустой) элемент меню и ввести название нового пункта.

Чтобы добавить в меню команду, необходимо выбрать пункт меню, в который нужно добавить команду, переместить указатель активного элемента меню в конец списка команд меню и ввести название команды.

После того как будет сформирована структура меню, нужно, используя окно Object Inspector, выполнить настройку элементов меню (выбрать настраиваемый пункт меню можно в окне формы приложения или из списка объектов в верхней части окна Object Inspector). Каждый элемент меню (пункты и команды) - это объект типа TMenuitem. Свойства объектов TMenuitem (табл.1) определяют вид меню во время работы программы.

Таблица Свойства объекта TMenuItem

Свойство

Определяет

Name

Имя элемента меню. Используется для доступа к свойствам

Caption

Название меню или команды

Bitmap

Значок, который отображается слева от названия элемента меню

Enabled

Признак доступности элемента меню. Если значение свойства равно False, то элемент меню недоступен, при этом название меню отображается серым цветом

При выборе во время работы программы элемента меню происходит событие Click. Чтобы создать процедуру обработки этого события, нужно в окне формы выбрать пункт меню и щелкнуть левой кнопкой мыши - Delphi создаст шаблон процедуры обработки этого события. В качестве примера ниже приведена процедура обработки события, которое возникает в результате выбора из меню команды Справка. N3 - это имя элемента меню, соответствующего этой команде.

4. Отчет о результатах вычисления приближенного значения корня уравнения в MS Excel

MS Excel был проведен расчет приближенного значения корня уравнения с помощью встроенных возможностей «Подбор параметров» и «Поиск решений». Для выбора начального приближения предварительно мной была построена диаграмма.

Результаты расчета с использованием Побора Параметра

В качестве начального приближения был выбран x=-9 (исходя из диаграммы)

В результате использования Подбора Параметра был найден корень x=-8,01.

Результаты расчета с использованием Поиска Решений

В качестве начального приближения был выбран x=-9 (исходя из диаграммы)

После выполнения был получен следующий результат:

Поиск решения дал мне значение x= -8,00002

Описание приложения созданного в среде Delphi.

При создании приложения в среде Delphi в интерфейсе был предусмотрен вывод вида функции и графика. Нахождение корня нелинейного уравнения было реализовано с использование трех методов: Метод дихотомии, Метод Хорд и Метод Ньютона. В отличии от расчета в Excel, где корни находились с помощью подбора параметров и поиска решения, в программе предусмотрен ввод точности вычисления пользователем. Результаты расчета выводятся как в окно приложения так и в текстовый файл.

5. Блок - схемы реализующие численные методы

Блок-схема для метода дихотомии:

Блок-схема для метода хорд:

Блок-схема для метода Ньютона:

6. Результат работы программы

Чтобы начать решение задачи, необходимо запустить приложение Nuton.exe.

Пример окна программы приведен на рис.

Первоначальный интерфейс имеет следующий вид:

После выполнения расчетов при E<= 0,001:

В качестве отчета был сформирован файл «Отчет.txt.»:

Данная программа создана для работы в текстовом и графическом режиме. Она состоит из модуля Graph, Crt, трёх функций и трёх процедур.

1. модуль Crt предназначен для обеспечения контроля над текстовыми режимами экрана, расширенными кодами клавиатуры, цветами, окнами и звуком;

2. модуль Graph предназначен для обеспечения контроля над графическими объектами;

3. procedure GrafInit - инициализирует графический режим;

4. function VF - вычисляет значение функции;

5. function f1 - вычисляет значение первой производной функции;

6. function X_Newt - реализует алгоритм решения уравнения методом Ньютона.

7. procedure FGraf - реализует построение графика заданной функции f(x);

Ots=35 - константа, определяющая количество точек для отступа от границ монитора;

fmin, fmax - максимальные и минимальные значения функции;

SetColor(4) - процедура, которая устанавливает текущий цвет графического объекта, используя палитру, в данном случае это красный цвет;

SetBkColor(9) - процедура, которая устанавливает текущий цвет фона, используя палитру, в данном случае - это светло-синий цвет.

8. Procedure MaxMinF - вычислят максимальные и минимальные значения функции f(x).

Line - процедура, которая рисует линию из точки с координатами (x1, у1) в точку с координатами (х2, у2);

MoveTo - процедура, перемещающая указатель (СР) в точку с координатами (х, у);

TextColor(5) - процедура, устанавливающая текущий цвет символов, в данном случае - это розовый;

Outtexty(х, у, `строка') - процедура, которая выводит строку, начиная с позиции (х, у)

CloseGraph - процедура, закрывающая графическую систему.

Тестирование программы

Для тестирования программы возьмем те примеры, которые решали в практической части работы, чтобы сверить результаты и проверить правильность работы программы.

1) sin x2 + cos x2 - 10x. = 0.

Тест: Данная программа вычисляет корни нелинейного уравнения методом Ньютона с точностью eps и чертит приблизительный график функции на отрезке [a, b].

Введите а = -1

Введите b=1

[a, b] = [-1, 1]

Введите точность вычисления eps=0. 01

{вывод графика функции}

Корень уравнения, найденный методом Ньютона: x = 0.101.

сделаем проверку, подставив полученный ответ в уравнение.

Получим: х=0, 0000002

2) cos x - e-x2/2 + x - 1 = 0.

Тест:

Данная программа вычисляет корни нелинейного уравнения методом Ньютона с точностью eps и чертит приблизительный график функции на отрезке [a, b].

Введите а = -3

Введите b=3

[a, b] = [-3, 3]

Введите точность вычисления eps=0. 001

{вывод графика функции}

Корень уравнения, найденный методом Ньютона:

x = 1.089.

сделаем проверку, подставив полученный ответ в уравнение.

Получим : х=-0, 0000000

3) x2 - e-x = 0.

Тест:

Данная программа вычисляет корни нелинейного уравнения методом Ньютона с точностью eps и чертит приблизительный график функции на отрезке [a, b].

Введите а = -1

Введите b=1

[a, b] = [-1, 1]

Введите точность вычисления eps=0. 01

{вывод графика функции}

Корень уравнения, найденный методом Ньютона:

x = 0.703.

сделаем проверку, подставив полученный ответ в уравнение.

Получим : х=0, 0000000

4) cos x -e-x/2+x-1=0.

Тест:

Данная программа вычисляет корни нелинейного уравнения методом Ньютона с точностью eps и чертит приблизительный график функции на отрезке [a, b].

Введите а = -1,5

Введите b=1,5

[a, b] = [-1,5, 1,5 ]

Введите точность вычисления eps=0. 001

{вывод графика функции}

Корень уравнения, найденный методом Ньютона: x = 1,164.

сделаем проверку, подставив полученный ответ в уравнение.

Получим: х=0, 0008180

5) -2+ex- e-x =0.

Тест:

Данная программа вычисляет корни нелинейного уравнения методом Ньютона с точностью eps и чертит приблизительный график функции на отрезке [a, b].

Введите а = -0,9

Введите b=0,9

[a, b] = [-0,9, 0,9]

Введите точность вычисления eps=0. 001

{вывод графика функции}

Корень уравнения, найденный методом Ньютона: x = 0.881.

Сделаем проверку, подставив полученный ответ в уравнение.

Получим: х=0, 0000000

Заключение

Целью работы было создать программу, которая вычисляет нелинейные уравнения методом Ньютона. Исходя из этого, можно сделать вывод, что цель достигнута, так как для ее осуществления были решены следующие задачи:

1. Изучена необходимая литература.

2. Обзорно рассмотрены существующие методы по решению нелинейных уравнений.

3. Изучен метод Ньютона для решения нелинейных уравнений.

4. Рассмотрено решение нелинейных уравнений методом Ньютона на примере.

5. Проведены тестирование и отладка программы.

Список используемой литературы

1. Б.П. Демидович, И.А. Марон. Основы вычислительной математики. - Москва, изд. «Наука»; 1970.

2. В.М. Вержбицкий. Численные методы (линейная алгебра и нелинейные уравнения). - Москва, «Высшая школа»; 2000.

Н.С. Бахвалов, А.В. Лапин, Е.В. Чижонков. Численные методы в задачах и упражнениях. - Москва, «Высшая школа»; 2000.

3. Мэтьюз Джон, Г. Финк, Куртис Д. Численные методы MATLAB, 3-е издание.- Москва, «Вильяс»; 2001.

Размещено на Allbest.ru


Подобные документы

  • Методы решения нелинейных уравнений: касательных и хорд, результаты их вычислений. Алгоритм и блок схема метода секущих. Исследование характерных примеров для практического сравнения эффективности рассмотренных методов разрешения нелинейных уравнений.

    дипломная работа [793,2 K], добавлен 09.04.2015

  • Решение нелинейных уравнений методом касательных (Ньютона), особенности и этапы данного процесса. Механизм интерполирования функции и численное интегрирование. Приближенное решение обыкновенных дифференциальных уравнений первого порядка методом Эйлера.

    курсовая работа [508,1 K], добавлен 16.12.2015

  • Сравнение методов простой итерации и Ньютона для решения систем нелинейных уравнений по числу итераций, времени сходимости в зависимости от выбора начального приближения к решению и допустимой ошибки. Описание программного обеспечения и тестовых задач.

    курсовая работа [3,1 M], добавлен 26.02.2011

  • Векторная запись нелинейных систем. Метод Ньютона, его сущность, реализации и модификации. Метод Ньютона с последовательной аппроксимацией матриц. Обобщение полюсного метода Ньютона на многомерный случай. Пример реализации метода Ньютона в среде MATLAB.

    реферат [140,2 K], добавлен 27.03.2012

  • Исследование сущности и сфер применения метода итераций. Нелинейные уравнения. Разработка вычислительный алгоритм метода итераций. Геометрический смысл. Составление программы решения систем нелинейных уравнений методом итераций в среде Turbo Pascal.

    реферат [183,7 K], добавлен 11.04.2014

  • Анализ методов решения систем нелинейных уравнений. Простая итерация, преобразование Эйткена, метод Ньютона и его модификации, квазиньютоновские и другие итерационные методы решения. Реализация итерационных методов с помощью математического пакета Maple.

    курсовая работа [820,5 K], добавлен 22.08.2010

  • Приближенные значения корней. Метод дихотомии (или деление отрезка пополам), простой итерации и Ньютона. Метод деления отрезка пополам для решения уравнения. Исследование сходимости метода Ньютона. Построение нескольких последовательных приближений.

    лабораторная работа [151,3 K], добавлен 15.07.2009

  • Геометрическая интерпретация методов Ньютона, итерации и спуска. Определение корня уравнения с заданной степенью точности. Решение систем нелинейных алгебраических уравнений. Нахождение эквивалентного преобразования для выполнения условия сходимости.

    курсовая работа [371,6 K], добавлен 14.01.2015

  • Решение нелинейных уравнений. Отделения корней уравнения графически. Метод хорд и Ньютона. Система линейных уравнений, прямые и итерационные методы решения. Нормы векторов и матриц. Метод простых итераций, его модификация. Понятие про критерий Сильвестра.

    курсовая работа [911,6 K], добавлен 15.08.2012

  • Изучение численных методов приближенного решения нелинейных систем уравнений. Составление на базе вычислительных схем алгоритмов; программ на алгоритмическом языке Фортран - IV. Приобретение практических навыков отладки и решения задач с помощью ЭВМ.

    методичка [150,8 K], добавлен 27.11.2009

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.