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

Рассмотрение основ создания в 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 описываем переменные;

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

Рисунок 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


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.