Введение
1. Теоретическая часть
2. Практическая реализация
2.1 Проектирование интерфейса
2.2 Программирование вычисления
2.3 Визуализация метода
2.4 Вычислительный эксперимент
Заключение
Перечень используемой литературы
Данный проект разработан для вычисления коней нелинейного уравнения методом итераций. Программа написана на языке высокого уровня Delphi.
Пояснительная записка состоит из следующих разделов:
1 Теоретическая часть – теория, описывающая правила вычисления коней нелинейного уравнения методом итераций, а также блок-схема метода.
2 Практическая реализация:
2.1 Проектирование интерфейса – создание и описание элементов (частей) из которых состоит данная программа.
2.2 Программирование вычисления – конечный результата работы.
2.3 Визуализация метода – последовательный показ работы проекта на вычисление корней уравнения методом итераций
2.4 Вычислительный эксперимент – сравнение результатов программы с решением в математическом пакете Mathcad 14.
3 Заключение о проделанной работе.
Часто приходится находить корни уравнений вида , где f(x) определена и непрерывна на некотором интервале.
Если f(x) представляет собой многочлен, то уравнение - алгебраическое, если в функцию входят функции типа: тригонометрических, логарифмических, показательных и т.п., то уравнение называется трансцендентным.
Решение уравнения вида разбивается на два этапа:
1. отделение корней, т.е. отыскание достаточно малых областей, в каждой из которых заключен один и только один корень уравнения;
2. вычисление выделенного корня с заданной точностью.
Первый этап более сложный, в этом случае может помочь построение приближенного графика функции с анализом на монотонность, смену знака, выпуклость и т.д.
Для вычисления выделенного корня существует множество методов, например:
- метод итераций;
- метод половинного деления;
- метод Ньютона.
На рисунке 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].
Сначала создадим главное окно программы, без которой нам никак нельзя обойтись [1]. Сделаем в нем главное меню, состоящее из пунктов «Визуализация», «Исследование», «Титульный лист», «Выход». Далее нам будет необходимы поля для ввода и вывода данных, создадим поля «Начало промежутка», «Конец промежутка», «Точность», а так же поле «Корень», в которое после нажатия кнопки «Решение» будет выводиться ответ. Это окно будет являться опорным пунктом для наших дальнейших действий. Обозначим его как Form1.(Рис. 2)
Рис. 2. Form1
Далее, создадим другие «формы» для последующей работы, на которые в дальнейшем просто будем ссылаться:
· окно для визуализации метода итераций – Form2. Выводится при выборе пункта меню «Визуализация»:
Рис. 3. Form2
При нажатии на кнопку «Итерации» появится график, отражающий итерационный процесс
· окно заставки, появляющееся при запуске программы – Form3:
Рис.3. Form3
· окно титульного листа – Form4:
Рис.4. 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;
Здесь строится итерационная кривая, показывающая последовательное приближение к корню уравнения до определенной точности. Основой кода построения итерационной кривой является блок – схема из теоретической части.
Запуская программу, появляется заставка:
Рис.5. Заставка
Спустя 2 секунды окно заставки закрывается и появляется главное окно программы:
Рис.6. Главное окно
На нем, как и задумывалось, обозначены: главное меню состоящее из пунктов «Визуализация», «Титульный лист», «Выход», а также поля «Начало промежутка», «Конец промежутка», «Точность», а также поле «Корень», в которое после нажатия кнопки «Решение» будет выводится ответ.
Выбирая «Титульный лист», открывается окно, из которого узнаем о назначении программы, ее разработчике, а так же о проверяющем преподавателе.
Рис. 7 Титульный лист.
В поля, расположенные в главном окне вводим соответствующие их названию данные, после чего нажимаем кнопку «Решение» и получаем результат. В программном коде предусмотрена обработка исключительных ситуаций, при возникновении которых выводится информационное окно с рекомендациями по устранению возникших неполадок.
Выбирая пункт меню «Исследование», мы открываем окно, где приведены результаты решения уравнения в математическом пакете Mathcad 14 и в созданной мной программе, а также разность этих значений:
Рис.16. Исследование
Результаты записываются в текстовый Файл «issled.txt»
Выбирая пункт меню «Визуализация», отображается график уравнения и при нажатии кнопки итнрации отображается итерационная кривая:
Рис. 8 Визуализация.
Разработан проект по вычислению корней нелинейных уравнений методом итераций, в среде программирования Delphi.
Спроектирован интерфейс программы и написан программный код на языке высокого уровня.
Проведена визуализация метода.
Также произведен вычислительный эксперимент и сравнение результатов решения полученных в математическом пакете Mathcad 14 и методом итераций. При подстановке в уравнение полученных корней значения функции более близки к нулю у корня, полученного в Mathcad 14, но стоит отметить, что значения корня совпадают до заданной точности.
1. Бобровский С.И.
Delphi7. Учебный курс. – СПб.: Питер, 2003. – 736 с.
2. Информатика. Базовый курс. 2-е издание/Под ред. С.В. Симоновича. – СПб.: Питер, 2005. – 640 с.
3. Пискунов Н.С. Дифференциальное и интегральное исчисления: Учебник для втузов. В 2-х т. Т.1: - М.: Интеграл – Пресс, 2001. – 416 с.
4. Фаронов В.В.
Delphi. Программирование на языке высокого уровня. Учебник для вузов. – СПб.: Питер, 2003. – 640 с.
|