Программирование и исследование алгоритмов решения неленейных уравнений. Метод секущихся (хорд)
Рассмотрение основ создания в IDE Lazarus приложения, которое будет находить решение нелинейного уравнения. Использование для расчетов метода секущихся (хорд). Выполнение решения в математическом пакете и сравнение результата с созданным приложением.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 28.01.2015 |
Размер файла | 4,2 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Уфимский государственный авиационный технический университет
Филиал в городе Стерлитамак
Кафедра естественнонаучных и общепрофессиональных дисциплин
Пояснительная записка к курсовой работе
Программирование и исследование алгоритмов решения неленейных уравнений. Метод секущихся (хорд)
Студент
Харисов А.И.
Группа ЭЭ и ЭС-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(c) не превышает некоторое достаточное малое число 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 описываем переменные; |
|
begina:=StrToFloat(Form2.Edit1.Text);b:=StrToFloat(Form2.Edit2.Text);e:=StrToFloat(Form2.Edit3.Text); |
Присваиваем переменным a,b,e значения, введенные во второй форме в Edit1, Edit2,Edit3; |
|
repeatc:=a-((Form1.F(a))/(Form1.F(b)-Form1.F(a)))*(b-a);if Form1.F(c)=0 then breakelsebeginif (Form1.F(c))*(Form1.F(a))<0 then b:=celse a:=cend;until abs(Form1.F(c))<e ; |
Начало цикла с постусловием.Вычисление приближенного значения. Form1.F(c)=0-условие для выхода из цикла, нахождение корня.Проверка условия, в результате которого выбирается иной промежуток приближения корня.Условие выхода из цикла: F(c) по модулю будет больше достаточно малого числа е. |
|
edit1.text:=floattostr(c);end; |
Полученный ответ выводим в Edit1 на третьей форме. |
Далее, вводим программу для создания текстового файла 'Kharisov.txt' и сохранения в него полученного результата.
procedure TForm3.Button3Click(Sender: TObject);var F:TextFile |
||
beginAssignFile(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 описываем переменные; |
|
begina:=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 beginchart1lineseries1.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 с.
Размещено на Allbest.ru
Подобные документы
Создание приложения, демонстрирующего решение нелинейного уравнения методом хорд, вычисление интеграла методом Симпсона. Характеристика системы программирования. Разработка мощных систем для работы с локальными и удаленными базами данных с помощью Delphi.
дипломная работа [846,0 K], добавлен 22.09.2012Разработка с использованием приложения Mathcad алгоритма и программы решения нелинейного уравнения методами касательных, половинного деления и хорд. Решение с помощью ее заданных нелинейных уравнений. Создание графической иллюстрации полученных решений.
курсовая работа [665,7 K], добавлен 22.08.2013Изучение методов решения нелинейных уравнений таких как: метод Ньютона, модифицированный метод Ньютона, метод Хорд, метод простых Итераций. Реализация программы для персонального компьютера, которая находит решение нелинейного уравнения разными способами.
практическая работа [321,9 K], добавлен 24.06.2012Особенности точных и итерационных методов решения нелинейных уравнений. Последовательность процесса нахождения корня уравнения. Разработка программы для проверки решения нелинейных функций с помощью метода дихотомии (половинного деления) и метода хорд.
курсовая работа [539,2 K], добавлен 15.06.2013Автоматизация решения системы уравнения методом Гаусса (классического метода решения системы линейных алгебраических уравнений, остоящего в постепенном понижении порядка системы и исключении неизвестных) и решения уравнения методами хорд и Ньютона.
курсовая работа [578,2 K], добавлен 10.02.2011Метод хорд решения нелинейных уравнений. Вычисление интеграла методом Симпсона. Процесс численного решения уравнения. Окно программы расчета корней уравнения методом хорд. Алгоритм вычисления интеграла в виде блок-схемы. Выбор алгоритма для вычислений.
курсовая работа [832,6 K], добавлен 24.07.2012Использование повторяющегося процесса. Нахождение решения за определенное количество шагов. Применение метода хорд и метода простой итерации. Методы нахождения приближенного корня уравнения и их применение. Построение последовательного приближения.
курсовая работа [849,1 K], добавлен 15.06.2013Обзор существующих методов по решению нелинейных уравнений. Решение нелинейных уравнений комбинированным методом и методом хорд на конкретных примерах. Разработка программы для решения нелинейных уравнений, блок-схемы алгоритма и листинг программы.
курсовая работа [435,8 K], добавлен 15.06.2013Исследование количества, характера и расположения корней. Определение их приближенных значений итерационными методами: половинного деления (дихотомии) и хорд. Тексты программ. Решение уравнений на языках программирования Borland Delfi и Turbo Pascal.
курсовая работа [500,3 K], добавлен 15.06.2013Методика реализации решения нелинейного уравнения в виде процедуры-подпрограммы следующими методами: хорд, касательных (Ньютона), простой итерации, половинного деления. Основные методы уточнения корней уравнения. Программное решение задачи, алгоритм.
курсовая работа [4,0 M], добавлен 27.03.2011