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

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

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

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

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

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

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

Студент

Харисов А.И.

Группа ЭЭ и ЭС-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))<e;

Начало цикла с постусловием.

Вычисление приближенного значения. 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 с.

ПоказатьСвернуть
Заполнить форму текущей работой