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

Оглавление

	

	Введение

	1. Теоретическая часть

	2. Практическая реализация

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

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

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

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

	Заключение

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

		


Введение



Данный проект разработан для вычисления коней нелинейного уравнения методом итераций. Программа написана на языке высокого уровня Delphi.

Пояснительная записка состоит из следующих разделов:

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

2 Практическая реализация:

2.1 Проектирование интерфейса – создание и описание элементов (частей) из которых состоит данная программа.

2.2 Программирование вычисления – конечный результата работы.

2.3 Визуализация метода – последовательный показ работы проекта на вычисление корней уравнения методом итераций

2.4 Вычислительный эксперимент – сравнение результатов программы с решением в математическом пакете Mathcad 14.

3 Заключение о проделанной работе.


1. Теоретическая часть



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

Если f(x) представляет собой многочлен, то уравнение  - алгебраическое, если в функцию входят функции типа: тригонометрических, логарифмических, показательных и т.п., то уравнение называется трансцендентным.

Решение уравнения вида  разбивается на два этапа:

		отделение корней, т.е. отыскание достаточно малых областей, в каждой из которых заключен один и только один корень уравнения;

		вычисление выделенного корня с заданной точностью.

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

Для вычисления выделенного корня существует множество методов, например:

метод итераций;

метод половинного деления;

метод Ньютона.

На рисунке 1 представлен график функции y=x-2+sin(1/x) 



Рис. 1



В данной курсовой работе будет рассмотрено нахождение корней уравнения x-2+sin(1/x)=0 методом итераций.

Уравнение  можно представить в виде: . То есть 



x-2+sin(1/x)=0→ x=2-sin(1/x)



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







Процесс вычисления значений xk называется итерационным процессом.

Если на отрезке [a,b] выполнено условие |φ΄(x)| ≤ q <1, то итерационный процесс сходится к корню уравнения .

Если необходимо вычислить корень с точностью ε, то процесс итераций продолжается до тех пор, пока для двух последовательных приближений xn и xn-1 не будет выполнено:



,



где ε задается погрешностью корня x*.



Соответственно описанной выше методике составим блок–схему решения уравнения методом итераций[2].



Начало

a,b,e

f’(x1)<1

x1=a

y=f(x1)

d=|y-x1|

x1=y

d<=eps или x1>=b

Задайте другой промежуток

Конец

y


2 Практическая реализация



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



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





Рис. 2. Form1

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

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





Рис. 3. Form2



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



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





Рис.3. Form3

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





Рис.4. Form4



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

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

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

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



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



Для вычисления корней уравнения используется подпрограмма – функция 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. В первом случае результат значение функции, во втором значение производной функции.



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



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

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

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



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.4 Вычислительный эксперимент



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





Рис.5. Заставка



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





Рис.6. Главное окно

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

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





Рис. 7 Титульный лист.



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

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





Рис.16. Исследование



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

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





Рис. 8 Визуализация.


Заключение



Разработан проект по вычислению корней нелинейных уравнений методом итераций, в среде программирования Delphi.

Спроектирован интерфейс программы и написан программный код на языке высокого уровня.

Проведена визуализация метода.

Также произведен вычислительный эксперимент и сравнение результатов решения полученных в математическом пакете Mathcad 14 и методом итераций. При подстановке в уравнение полученных корней значения функции более близки к нулю у корня, полученного в Mathcad 14, но стоит отметить, что значения корня совпадают до заданной точности.




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



	Бобровский С.И. Delphi7. Учебный курс. – СПб.: Питер, 2003. – 736 с.

	Информатика. Базовый курс. 2-е издание/Под ред. С.В. Симоновича. – СПб.: Питер, 2005. – 640 с.

	Пискунов Н.С. Дифференциальное и интегральное исчисления: Учебник для втузов. В 2-х т. Т.1: - М.: Интеграл – Пресс, 2001. – 416 с.

	Фаронов В.В. Delphi. Программирование на языке высокого уровня. Учебник для вузов. – СПб.: Питер, 2003. – 640 с.

1