Программирование и исследование алгоритмов решения неленейных уравнений.
Метод секущихся (хорд)
Создадим первую форму. Она будет являться главным окном программы поэтому с помощью свойства Caption зададим название «Главная». Разместим на главном окне меню с помощью которого сможем переходить на другие формы. Для этого на панели Standard выберем MainMenu и щёлкнем по главной форме. В редакторе меню создадим три пункта: решение, об авторе, выход. В пункте решение создадим подменю состоящее… Читать ещё >
Программирование и исследование алгоритмов решения неленейных уравнений. Метод секущихся (хорд) (реферат, курсовая, диплом, контрольная)
Уфимский государственный авиационный технический университет
Филиал в городе Стерлитамак
Кафедра естественнонаучных и общепрофессиональных дисциплин
Пояснительная записка к курсовой работе
Программирование и исследование алгоритмов решения неленейных уравнений. Метод секущихся (хорд)
Студент
Харисов А.И.
Группа ЭЭ и ЭС-103д
Проверил
Консультант Карасева Л.М.
Стерлитамак 2013 г.
- Введение
- 1. Теоретическая часть
- 1.1 Математическая модель метода
- 1.2 Блок-схема алгоритма метода
- 2. Практическая часть
- 2.1 Создание интерфейса приложения
- 2.2 Кодирование метода
- 2.3 Визуализация
- 2.4 Вычислительный эксперимент
- 2.5 Сравнение результатов
- Заключение
- Список литературы
Актуальность: в связи с развитием новой вычислительной техники инженерная практика наших дней все чаще и чаще встречается с математическими задачами, точное решение которых получить весьма сложно или невозможно. В этих случаях обычно прибегают к тем или иным приближенным вычислениям. Вот почему приближенные и численные методы математического анализа получили за последние годы широкое развитие и приобрели исключительно важное значение.
Цель: реализация численных методов решения нелинейных уравнений на языке программирования в соответствии с заданным вариантом; графическая иллюстрация данного метода с последовательным уточнением корня; сравнение полученного результата с решением в математическом пакете.
Задача: создать в IDE Lazarus приложение, которое будет находить решение нелинейного уравнения 2ln2x+6lnx-5=0 на интервале [1;3]. Пользователь должен будет вводить исходный интервал и точность определения корня уравнения.
Для расчёта использовать метод секущихся (хорд). Результат вычисления сохранить в текстовый файл. Иллюстрировать данный метод графически с последовательным уточнение корня.
Выполнить решение в математическом пакете и сравнить полученный результат с результатом работы созданного приложения.
Приложение должно содержать не менее трёх окон, а также текстовое меню в главном окне, позволяющее выполнить основные действия.
1. Теоретическая часть
1.1 Математическая модель метода
Идея метода хорд состоит в том, что можно, с известным приближением, допустить, что функция f (x) на достаточно малом участке [a, b] изменяется линейно, т. е. кривую y=f (x) на этом участке можно заменить хордой.
Тогда начальное приближение корня x=c будет находиться в точке пересечения отрезка [a, b] хордой, проходящей через точки (a, f (a)) и (b, f (b)). Далее, применяя этот прием к тому из отрезков (a, c) или (c, b), на котором функция имеет разные знаки, получим следующее приближение корня (см. Рисунок 1).
Рисунок 1-Графическая интерпретация метода секущихся (хорд)
Уравнение хорды записывается как уравнение прямой проходящей через точки с координатами:
(a, f (a)) и (b, f (b)) имеет вид:
(1)
Прямая, заданная уравнением (1), пересекает ОХ при условии у=0. Тогда точка пересечения хорды с OX находится по формуле:
Отсюда
обозначим через с
(2)
Алгоритм, реализующий метод секущихся (хорд), можно представить так:
По формуле (2) найти точку c.
Если < 0, то корень лежит на участке [a, c], если нет, то корень лежит на участке [c, b].
Если абсолютное значение f© не превышает некоторое достаточное малое число e, то найден корень с точностью e, иначе возвращаемся в пункт 1.
1.2 Блок-схема алгоритма метода
Рисунок 2 — Блок-схема метода
2. Практическая часть
2.1 Создание интерфейса приложения
Создадим первую форму. Она будет являться главным окном программы поэтому с помощью свойства Caption зададим название «Главная». Разместим на главном окне меню с помощью которого сможем переходить на другие формы. Для этого на панели Standard выберем MainMenu и щёлкнем по главной форме. В редакторе меню создадим три пункта: решение, об авторе, выход. В пункте решение создадим подменю состоящее из: ввод данных, решение уравнения, иллюстрация. Для каждого пункта кроме «Выход», создадим формы с такими же названиями.
Для того, чтобы придать форме интересный фон, достаточно вставить картинку. Для этого нужно воспользоваться объектом Image. Заходим в свойства данного объектаPicture, и загружаем нужное нам изображение.
На форме «Главная» вводим информацию об авторе данной работы и, непосредственно, название темы, воспользовавшись объектом Label .
На рис. 3 представлено изображение первой формы «Главная» .
Рисунок 3 — Вид главной формы
На форме «Ввод данных» создадим три поля для ввода начала отрезка, конца отрезка и точность вычисления. Для этого воспользуемся объектом label: a, b, e и объектом edit, для ввода этих значений. Так же создадим две кнопки «ОК», при нажатии которой будет переход на форму «Решение уравнения», и кнопку «Закрыть» для закрытия формы «Ввод данных» .
Затем, в левый нижний угол помещаем еще один объект Label, чтобы ввести необходимую информацию о задании и об авторе.
На рис. 4 представлено изображение второй формы «Ввод данных» .
Рисунок 4 — Вид формы «Ввод данных»
На форме «Решение уравнения» создаём объект label «x=», объект edit для вывода ответа, три объекта Button «Решить», «Сохранить», «Закрыть» .
Затем, в левый нижний угол помещаем еще один объект Label, чтобы ввести необходимую информацию о задании и об авторе.
На рис. 5 представлено изображение третьей формы «Решение уравнения» .
Рисунок 5 — Вид формы «Решение уравнения»
На форме «Иллюстрация» помещаем объект Chart, для представления иллюстрации метода хорд, объект Edit для ввода шага табуляции (h), объект Label (h), и два объекта Button «Иллюстрировать» и BitBtn «Закрыть» .
Затем, в левый нижний угол помещаем еще один объект Label, чтобы ввести необходимую информацию о задании и об авторе.
На рис. 6 представлено изображение четвертой формы «Иллюстрация» .
Рисунок 6 — Вид формы «Иллюстрация»
На последней форме «Об авторе» пишем информацию о программе и о себе. Для этого используем объект Label. Добавляем объект BitBtn и создаем кнопку «Закрыть» .
Рисунок 7 — Вид формы «Об авторе»
Далее создаем связь между формами и пунктами меню, в инспекторе объектов в Unit1:
implementation
uses unit2, Unit3,unit4,unit5;
procedure TForm1. MenuItem6Click (Sender: TObject);
begin
form1.close;
end;
приложение нелинейный уравнение хорда
Нажатие на пункт меню «Выход» закрывает форму.
procedure TForm1. MenuItem2Click (Sender: TObject);
begin
form2.show;
end;
Щелкнув на пункт меню «Ввод данных», открывается форма «Ввод данных» ;
procedure TForm1. MenuItem3Click (Sender: TObject);
begin
form3.show;
end;
Нажатие на кнопку «Решение уравнения» вызывает форму «Решение уравнений» ;
procedure TForm1. MenuItem4Click (Sender: TObject);
begin
form4.show;
end;
При нажатии в главном меню на пункт «Иллюстрация» появляется окно «Иллюстрация» ;
procedure TForm1. MenuItem5Click (Sender: TObject);
begin
form5.show;
end;
Щелкнув на пункт меню «Об авторе», открывается форма «Об авторе» ;
procedure TForm2. Button1Click (Sender: TObject);
begin
form2.Close;
form3.show;
end;
При нажатии кнопки «ОК» во второй форме происходит закрытие формы «Ввод данных» и открытие формы «Решение уравнения» ;
Таким образом, нажав на один из пунктов меню, будет открываться определенная форма, а при нажатии на пункт меню «Выход», программа закроется.
2.2 Кодирование метода
Так как функция F=2ln2(x)+6ln (x)-5 будет использоваться в нескольких формах, опишем её глобально.
Подпрограмма функции:
{ TForm1 }
Function TForm1. F (x: real) :real;
begin
F:=2*sqr (ln (x))+6*ln (x)-5;
end;
В редакторе исходного кода в Unit 3 вводим текст программы для решения данного нелинейного уравнения.
procedure TForm3. Button2Click (Sender: TObject); var a, b, c, e: real; | В разделе var описываем переменные; | |
begin a:=StrToFloat (Form2.Edit1.Text); b:=StrToFloat (Form2.Edit2.Text); e:=StrToFloat (Form2.Edit3.Text); | Присваиваем переменным a, b, e значения, введенные во второй форме в Edit1, Edit2, Edit3; | |
repeat c:=a-((Form1.F (a))/(Form1.F (b)-Form1.F (a)))*(b-a); if Form1. F (c)=0 then break else begin if (Form1.F (c))*(Form1.F (a))<0 then b:=c else a:=c end; until abs (Form1.F (c)) | Начало цикла с постусловием. Вычисление приближенного значения. Form1. F (c)=0-условие для выхода из цикла, нахождение корня. Проверка условия, в результате которого выбирается иной промежуток приближения корня. Условие выхода из цикла: F© по модулю будет больше достаточно малого числа е. | |
edit1.text:=floattostr (c); end; | Полученный ответ выводим в Edit1 на третьей форме. | |
Далее, вводим программу для создания текстового файла 'Kharisov.txt' и сохранения в него полученного результата.
procedure TForm3. Button3Click (Sender: TObject); var F: TextFile | ||
begin AssignFile (F,'Kharisov.txt'); | Название файла; | |
Rewrite (F); | Команда создает новый файл F и открывает его; | |
Writeln (F, Edit1. Text); CloseFile (F); end; | Запись результата; Закрытие файла. | |
2.3 Визуализация
В Unit4 в подразделе uses подключаем математический модуль Math. В подразделе uses вводим unit2.
var H, a, b, c, x: real; | В разделе var описываем переменные; | |
begin a:=StrToFloat (Form2.Edit1.Text); b:=StrToFloat (Form2.Edit2.Text); x:=a; H:=strtofloat (form4.edit1.text); chart1lineSeries1.Clear; chart1lineSeries2.Clear; chart1lineSeries3.Clear; chart1lineSeries4.Clear; | Присваиваем переменным a и b значения, введенные во второй форме в Edit1 и Edit2. Для каждой серии вводим Chart1LineSeries1.Clear., чтобы при введении последующего значения h, предыдущие очищались, т. е. строился новый график; | |
while x<=b do begin chart1lineseries1.addxy (x, Form1. F (x)); x:=x+H; end; | Цикл с предусловием, для построения графика функции; | |
chart1lineseries2.addxy (a, Form1. F (a)); chart1lineseries2.addxy (b, Form1. F (b)); c:= a-((Form1.F (a))/(Form1.F (b)-Form1.F (a)))*(b-a); if (Form1.F (a))*(Form1.F (c))<0 then b:=c else a:=c; chart1lineseries3.addxy (a, Form1. F (a)); chart1lineseries3.addxy (b, Form1. F (b)); c:= a-((Form1.F (a))/(Form1.F (b)-Form1.F (a)))*(b-a); if (Form1.F (a))*(Form1.F (c))<0 then b:=c else a:=c; chart1lineseries4.addxy (a, Form1. F (a)); chart1lineseries4.addxy (b, Form1. F (b)); end; | Построение первой хорды; Вычисление приближенного значения. Проверка условия для выбора промежутка; Построение второй хорды для нахождения приближенного значения. Проверка условия для выбора промежутка; Построение третьей хорды для нахождения приближенного значения. | |
2.4 Вычислительный эксперимент
Запускаем созданное приложение. На главном окне щелкаем по пункту меню «Ввод данных», открывается соответствующая форма.
Рисунок 8 — «Главная»
На форме «Ввод данных» вводим значения начала (a) и конца (b) промежутка, точность (e).
Рисунок 9 — «Ввод данных»
Затем, щелкнув на кнопку «ОК» мы переходим на следующую форму «Решение уравнения». В открывшейся форме нажимаем на кнопку «Решить», в окне появляется ответ. При нажатии на кнопку «Сохранить», данное решение будет сохранено в текстовом документе.
Рисунок 10 — «Решение уравнения»
Щелкаем по пункту меню «Иллюстрация», открывается нужное нам окно. Вводим определенный шаг табуляции (H) и нажимаем на кнопку «Иллюстрировать». Выполняется построение графика и три соответствующие хорды.
Рисунок 11 — «Иллюстрация»
Щелкаем по следующему пункту меню, открывается окно «Об авторе», где дана информация о курсовой работе.
Рисунок 12 — «Об авторе»
Щелкнув по пункту меню «Выход», закрывается главное окно и все приложение целиком.
2.5 Сравнение результатов
При решение данного уравнения в математическом пакете Maxima получили следующий результат:
Рисунок 13 — Решение в Maxima
Рисунок 14 — Решение в приложении при е=0,01
Рисунок 15 — Решение в приложении при е =0,0001
Вывод: Таким образом, с помощью данного приложения мы можем получить решение уравнения. Точность решения тем больше, чем меньше число е.
Заключение
Закрепили и углубили теоретические и практические навыки работы на компьютере, умения решать инженерные задачи в изучаемой среде программирования, реализовали численные методы решения нелинейных уравнений на языке программирования в соответствии с заданным вариантом.
Изучили метод хорд, и решили нелинейное уравнение 2ln2x+6lnx-5=0 с его помощью. Создали приложение в IDE Lazarus, которое находит решение данного нелинейного уравнения, сохраняет результат в текстовый документ, а также иллюстрирует метод решения с последовательным уточнением корня. Выполнили решение в математическом пакете Maxima и сравнили полученный результат с результатом работы созданного приложения.
1. Голицина О. Л., Партыка Т. Л., Попов И. И. Языки программирования. — М.: Инфра-М, 2008.
2. Макарова Н. В., Волков В. Б. Информатика. — М.: Питер, 2011.
3. Постовалов С. Н., Постовалова А. Ю. Уроки программирования. Москва, БХВ-Петербург, 2006.
4. Кашаев С. М. Учимся программировать на примерах. — Санкт-Петербург, БХВ-Петербург, 2010.
5. Степанов А. Информатика: базовый курс. — М.: Питер, 2010.
6. Филимонова Е. В. Практический самоучитель. — Санкт-Петербург, Феникс, 2007.
7. Острейковский В. А. Информатика. — М.: Высшая школа, 2007. — 512 с.