Программирование и исследование алгоритмов решения неленейных уравнений. Метод секущихся (хорд)

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    2,64 Мб
  • Опубликовано:
    2015-06-09
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Программирование и исследование алгоритмов решения неленейных уравнений. Метод секущихся (хорд)

Уфимский государственный авиационный технический университет

Филиал в городе Стерлитамак

Кафедра естественнонаучных и общепрофессиональных дисциплин









Пояснительная записка к курсовой работе

Программирование и исследование алгоритмов решения неленейных уравнений. Метод секущихся (хорд)


Студент

Харисов А.И.

Группа ЭЭ и ЭС-103д

Проверил

Консультант Карасева Л.М.




Стерлитамак 2013 г.

Содержание

Введение

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

.1 Математическая модель метода

1.2 Блок-схема алгоритма метода

. Практическая часть

.1 Создание интерфейса приложения

.2 Кодирование метода

.3 Визуализация

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

.5 Сравнение результатов

Заключение

Список литературы

Введение


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

Цель: реализация численных методов решения нелинейных уравнений на языке программирования в соответствии с заданным вариантом; графическая иллюстрация данного метода с последовательным уточнением корня; сравнение полученного результата с решением в математическом пакете.

Задача: создать в IDE Lazarus приложение, которое будет находить решение нелинейного уравнения 2ln2x+6lnx-5=0 на интервале [1;3]. Пользователь должен будет вводить исходный интервал и точность определения корня уравнения.

Для расчёта использовать метод секущихся (хорд). Результат вычисления сохранить в текстовый файл. Иллюстрировать данный метод графически с последовательным уточнение корня.

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

Приложение должно содержать не менее трёх окон, а также текстовое меню в главном окне, позволяющее выполнить основные действия.

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. Практическая часть

 

.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 - Вид формы "Иллюстрация"


Рисунок 7 - Вид формы "Об авторе"

Далее создаем связь между формами и пунктами меню, в инспекторе объектов в Unit1:

implementationunit2,Unit3,unit4,unit5;TForm1.MenuItem6Click(Sender: TObject);

form1.close;

end;

приложение нелинейный уравнение хорда

Нажатие на пункт меню "Выход" закрывает форму.

TForm1.MenuItem2Click(Sender: TObject);.show;;

Щелкнув на пункт меню "Ввод данных", открывается форма "Ввод данных";

procedure TForm1.MenuItem3Click(Sender: TObject);

begin.show;;

Нажатие на кнопку "Решение уравнения" вызывает форму "Решение уравнений";

procedure TForm1.MenuItem4Click(Sender: TObject);

begin.show;;

При нажатии в главном меню на пункт "Иллюстрация" появляется окно "Иллюстрация";

procedure TForm1.MenuItem5Click(Sender: TObject);.show;;

Щелкнув на пункт меню "Об авторе", открывается форма "Об авторе";

procedure TForm2.Button1Click(Sender: TObject);.Close;.show;

end;

При нажатии кнопки "ОК" во второй форме происходит закрытие формы "Ввод данных" и открытие формы "Решение уравнения";

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

2.2 Кодирование метода


Так как функция F=2ln2(x)+6ln(x)-5 будет использоваться в нескольких формах, опишем её глобально.

Подпрограмма функции:

{ TForm1 }TForm1.F(x: real) :real;:=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))<e ;

Начало цикла с постусловием. Вычисление приближенного значения. Form1.F(c)=0-условие для выхода из цикла, нахождение корня.  Проверка условия, в результате которого выбирается иной промежуток приближения корня. Условие выхода из цикла: F(c) по модулю будет больше достаточно малого числа е.

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 получили следующий результат:


Рисунок 14 - Решение в приложении при е=0,01

Рисунок 15 - Решение в приложении при е =0,0001

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

Заключение


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

Изучили метод хорд, и решили нелинейное уравнение 2ln2x+6lnx-5=0 с его помощью. Создали приложение в IDE Lazarus, которое находит решение данного нелинейного уравнения, сохраняет результат в текстовый документ, а также иллюстрирует метод решения с последовательным уточнением корня. Выполнили решение в математическом пакете Maxima и сравнили полученный результат с результатом работы созданного приложения.

 

Список литературы


1.       Голицина О.Л., Партыка Т.Л., Попов И.И. Языки программирования. - М.: Инфра-М, 2008.

.        Макарова Н.В., Волков В.Б. Информатика. - М.: Питер, 2011.

.        Постовалов С.Н., Постовалова А.Ю. Уроки программирования. Москва, БХВ-Петербург, 2006.

.        Кашаев С.М. Учимся программировать на примерах. - Санкт-Петербург, БХВ-Петербург, 2010.

.        Степанов А. Информатика: базовый курс. - М.: Питер, 2010.

.        Филимонова Е.В. Практический самоучитель. - Санкт-Петербург, Феникс, 2007.

.        Острейковский В.А. Информатика. - М.: Высшая школа, 2007. - 512 с.

Похожие работы на - Программирование и исследование алгоритмов решения неленейных уравнений. Метод секущихся (хорд)

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!