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

Автор работы: Пользователь скрыл имя, 04 Ноября 2013 в 19:32, курсовая работа

Краткое описание

В настоящей курсовой работе необходимо создать приложение, которое будет находить решение нелинейного уравнения 2xsinx - cosx= 0 на интервале [0,4;1]. Нахождение корня нелинейного уравнения 2xsinx - cosx= 0 осуществляется методом секущихся (хорд). Метод секущихся (хорд) включает большое количество повторяющихся аналогичных расчетов, которые целесообразно производить с использованием средств вычислительной техники. Для осуществления этой цели необходимо создать приложение, которое позволит найти корень уравнения при ручном задании числового интервала функции и точности определения корня уравнения. Приложение должно позволить иллюстрировать метод графически.

Содержание

Введение 5
1 Теоретическая часть. 6
1.1 Метод половинного деления 6
1.2 Блок-схема метода половинного деления……………………………………… 7
2 Практическая часть………………………………………………………………... 8
2.1 Создание интерфейса приложения 8
2.2 Кодирование метода 25
2.3 Визуализация 27
2.4 Вычислительный эксперимент 28
2.5 Сравнение результатов выполнения приложения с результатом, полученным в математическом пакете. 31
Заключение 33
Список литературы 34

Прикрепленные файлы: 1 файл

Пояснительная записка 1.docx

— 3.98 Мб (Скачать документ)


Группа КТОС -101з, Яковлев Юрий Николаевич, вариант 12

Содержание

Введение 5

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

1.1 Метод половинного деления   6

1.2 Блок-схема метода половинного  деления………………………………………  7

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

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

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

2.3 Визуализация  27

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

2.5  Сравнение результатов выполнения приложения с результатом, полученным в математическом пакете.   31

Заключение 33

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

 

 

 

 

 

 

 

 

 

 

 

 

 

         Введение

В настоящей курсовой работе необходимо создать приложение, которое будет находить решение нелинейного уравнения 2xsinx - cosx= 0 на интервале [0,4;1]. Нахождение корня нелинейного уравнения 2xsinx - cosx= 0 осуществляется методом секущихся (хорд). Метод секущихся (хорд) включает большое количество повторяющихся аналогичных расчетов, которые целесообразно производить с использованием средств вычислительной техники. Для осуществления этой цели необходимо создать приложение, которое позволит найти корень уравнения при ручном задании числового интервала функции и точности определения корня уравнения. Приложение должно позволить иллюстрировать метод графически.

                      

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

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

Если  мы имеем уравнение , то решением является пересечение графика с осью OX.

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

Если  функция  непрерывна и монотонна на отрезке и принимает различные значения на ее концах, то корень единственный.

    1. Метод секущихся (хорд).

Алгоритм метода состоит  из следующих операций. Отрезок делит точка , и находят значение функции в точке . Если , то корень уравнения соответствует точке . Если , то можно сузить диапазон поиска корня: перейти от отрезка к отрезку или в зависимости от знака . Если , то корень находится на отрезке , и точку будем считать точкой ; а если , то корень находится на отрезке , и точку с будем считать точкой a. [7, c 29]

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

 

 

 

 

    1. Блок схема метода половинного деления

 




 


 




 да 



                                              нет 


нет

 

да

 

 

 

                                                   |f(q)|<с


 

 

 

 

Рисунок 1 - Блок-схема метода половинного деления

 

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

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

Для реализации приложения необходимо наличие 3 форм. По умолчанию при запуске программы Lasarus автоматически создается первая форма - компонент TForm1. Для создания дополнительных форм приложения необходимо выполнить следующие команды.

 

 

Рисунок 2 - Автоматическое создание первой формы Tform1 при запуске программы

 

В главном меню в меню Файл выбираем команду Создать форму. Программа автоматически создает новую форму - компонент Tform2. Проводим аналогичные действия для создания третьей формы - компонента Тform3.

 

 

 

 

Рисунок 3 - Этапы создания второй формы Tform2

 

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

На  панели инструментов во вкладке Standart выбираем компонент TmainMenu. Пункты главного меню создаются при нажатии правой кнопки мыши по области пиктограммы компонента TmainMenu. Выбираем пункт Редактор меню. В открывшемся окне Редактор меню при нажатии правой кнопкой мыши выбираем пункт Вставить новый пункт (после). Программа создает компонент TmenuItem - пункт главного меню. Названия пунктов главного меню определяются свойством Caption компонента TmenuItem.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рисунок 4 - Создание главного меню приложения

 

 

 

 

 

Рисунок 5 - Создание пунктов главного меню приложения

 

На  первой форме Tform1 размещаем компоненты Label1, Label2 и Label3 для данных о разработчике курсового проекта, которые будут появляться после выбора пункта главного меню Информация об авторе. На первой форме Tform1 размещаем  компоненты Timage1 для отображения рисунка.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рисунок 6 - Создание надписи, содержащей информацию об авторе

 

Для отображения информации об авторе в Событии OnClick объекта TMenuItem4 записываем процедуру   для компонентов Label1, Label2, Label3:

Label1.Caption:='Тема курсового проекта: "Решение нелинейного уравнения методом секущихся (хорд)"';

 Label2.Caption:='Проект выполнил: Яковлев Юрий Николаевич';

 Label3.Caption:='Группа: КТОС - 101з';  

 

 

Рисунок 7 - Создание процедуры для заполнения информацию об авторе

 

 

 

 

 

 

 

 

 

Рисунок 8 - Создание изображения на форме

 

На  второй форме будет осуществляться решение нелинейного уравнения.

На  второй форме TForm2 размещаем 4 компонента для ввода числовых данных и вывода результата решения нелинейного уравнения TEdit, который находится на вкладке Standart панели инструментов. Поясняющие метки для компонента TEdit делаем с помощью 6 компонентов TLabel, который находится на вкладке Standart панели инструментов. Подсчет результатов решения нелинейного уравнения будет осуществляться при нажатии на кнопку Решить - компонент TButton1, который находится на вкладке Standart панели инструментов. На форме также помещаем дополнительную кнопку TButton2 для  закрытия активного окна.

 

 

 

 

 

 

Рисунок 9 - Создание компонентов TEdit для ввода и вывода данных

 

 

 

 

Рисунок 10 - Создание компонентов TLabel для поясняющих надписей

 

 

Рисунок 11 - Создание компонентов TButton для запуска приложения и                          закрытия активного окна

 

На  третьей форме будет осуществляться иллюстрация метода, а именно построение графика функции.

На третьей форме TForm3 размещаем компонент для построения графика функции TChart, который находится на вкладке Chart панели инструментов. Построение графика на компоненте TChart происходит при нажатии кнопки - компонент TButton1. На форме также помещаем дополнительную кнопку TButton2 для  закрытия активного окна.

 

 

Рисунок 12 - Создание компонентов TСhart для иллюстрации метода

 

 

 

 

 

Рисунок 13 - Создание компонентов TButton для запуска иллюстрации метода и закрытия активного окна

 

Для связи реализации приложения необходима взаимосвязь между формами - компонентами TForm1, TForm2, TForm3. С этой целью в окне редактора исходного кода во вкладке Unit1 в разделе Implementation указываем uses Unit2 , Uses3 - модуль Unit1 будет связан с модулями Unit2 и Unit3, TForm1 будет связан с TForm2 и TForm3. Аналогичным образом связаны TForm2 и TForm3.

 

 

 

 

 

 

 

Рисунок 14 - Создание связи модулей между собой

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

В поле редактора исходного кода компонента TButton1 записываем:

procedure TForm2.Button1Click(Sender: TObject);

  var a,b,c,q: real; // описание используемых переменных: принимаем вещественный тип переменных, т.к. используемый метод предполагает b(целочисленное по условию)=q(вещественное) и a(целочисленное по условию)=q(вещественное)//

  begin

  a:=strtofloat(edit1.Text); // команда трансляции текстовой записи начального значения области определения функции в вещественное число

  b:=strtofloat(edit2.Text); // команда трансляции текстовой записи конечного значения области определения функции в вещественное число

  c:=strtofloat(edit3.Text); // команда трансляции текстовой записи точности определения корня  в вещественное число

  repeat // начало цикла с постусловием

  q:=a-(2*a*sin(a)-cos(a))/((2*b*sin(b)-cos(b))-(2*a*sin(a)-cos(a)))*(b-a); //задание функции, определяющей точку пересечения хорды с осью x

  if 2*q*sin(q)-cos(q) = 0 = 0 then // проверка условия, является ли точку пересечения хорды с осью x исследуемого числового промежутка (абсцисса) корнем уравнения. Если  выполняется условие f(q)=0, то q - корень уравнения и тогда цикл прерывается.

  Break;// прерывание цикла

  if (2*q*sin(q)-cos(q))*(2*a*sin(a)-cos(a))<0 then then // проверка условия, существуют ли в исследуемом числовом промежутке корни уравнения. Если выполняется условие f(а)* f(q)<0, то конечным значением области определения функции становится точка пересечения хорды с осью x первоначального числового промежутка.

  b:=q // конечным значением области определения функции становится точка пересечения хорды с осью x в первоначальном числовом промежутке и область определения функции станет D[a;q]

  else // иначе начальным значением области определения функции становится точка пересечения хорды с осью x первоначального числового промежутка и область определения функции станет D[q;b]

  a:=q;

  until (abs(2*q*sin(q)-cos(q))<c); // цикл с постусловием будет осуществляться до тех пор, пока значение функции в точке пересечения хорды с осью x не станет меньшим или равным определенного значения (величины точности определения функции)

  edit4.Text:=floattostr(q);// вывод корня уравнения на форму

  end; 

2.3 Визуализация

В поле редактора исходного кода компонента TButton1 записываем:

procedure TForm2.Button1Click(Sender: TObject);

  var a,b,c,q: real; // описание используемых переменных: принимаем вещественный тип переменных, т.к. используемый метод предполагает b(целочисленное по условию)=q(вещественное) и a(целочисленное по условию)=q(вещественное)//

  begin

  a:=strtofloat(Form2.edit1.Text); // команда трансляции текстовой записи начального значения области определения функции в вещественное число

  b:=strtofloat(Form2.edit2.Text); // команда трансляции текстовой записи конечного значения области определения функции в вещественное число

  c:=strtofloat(Form3.edit3.Text); // команда трансляции текстовой записи точности определения корня  в вещественное число

  repeat // начало цикла с постусловием

  q:=a-(2*a*sin(a)-cos(a))/((2*b*sin(b)-cos(b))-(2*a*sin(a)-cos(a)))*(b-a);// задание функции, определяющей точку пересечения хорды с осью x

  if 2*q*sin(q)-cos(q) = 0 then // проверка условия, является ли точку пересечения хорды с осью x исследуемого числового промежутка (абсцисса) корнем уравнения. Если  выполняется условие f(q)=0, то q - корень уравнения и тогда цикл прерывается.

  Break;// прерывание цикла

  if (2*q*sin(q)-cos(q))*(2*a*sin(a)-cos(a)) <0 then // проверка условия, существуют ли в исследуемом числовом промежутке корни уравнения. Если выполняется условие f(а)* f(q)<0, то конечным значением области определения функции становится точка пересечения хорды с осью x первоначального числового промежутка.

  b:=q // конечным значением области  определения функции становится  точка пересечения хорды с  осью x в первоначальном числовом промежутке и область определения функции станет D[a;q]

  else // иначе начальным значением области определения функции становится точка пересечения хорды с осью x первоначального числового промежутка и область определения функции станет D[q;b]

  a:=q;

Chart1lineseries2.AddXY(q, 2*q*sin(q)-cos(q));//  построение графика функции                 

Chart1lineseries1.AddXY(q,0); // иллюстрация середин отрезков  на графике функции

until (abs(2*q*sin(q)-cos(q))<c); // цикл с постусловием будет осуществляться до тех пор, пока значение функции в точке пересечения хорды с осью x не станет меньшим или равным определенного значения (величины точности определения функции)

end; 

Для визуализации точки пересечения  графика с осью абсцисс в свойстве объекта Chart1lineseries2 выбираем свойство объекта ShowPointer - True.

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

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

 

 

Рисунок 15 - Внешний вид окна Меню приложения

 

При выборе пункта меню Информация об авторе появляется метка на поле формы.

 

Рисунок 16 - Внешний вид окна Меню приложения с содержанием информации об авторе

 

При выборе пункта меню Нахождение корня  нелинейного уравнения открывается  новое окно. Для решения нелинейного  уравнения заполняем значения области  определения функции и указываем  точность определения корня уравнения.  При нажатии на кнопку Решить в окне Корень уравнения появляется результат вычислений, выполненных приложением. При нажатии на кнопку Выход окно закрывается.

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