99019

Разработка приложения, осуществляющее решение уравнения вида exp(x)-exp(-x)-2=0 в среде Delphi

Курсовая

Информатика, кибернетика и программирование

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

Русский

2016-07-22

3.78 MB

0 чел.

Разработка программы в среде Delphi.

Содержание

Введение 3

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

1.1 Методы решения нелинейного уравнения. 4

1.2 Описание среды программирования  Delphi. 7

1.2.1 Создание  многооконного приложения. 8

1.2.2 Построение графиков. 8

1.2.3 Работа с текстовыми файлами. 9

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

2.1 Реализация поиска экстремума. 10

2.2 Использование нескольких форм. 12

2.3 Графическое представление решения. 15

2.4 Сохранение результатов в файл. 16

2.5 Смена графического фона. 16

2.6 Проверка программы. 17

Заключение 24

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

Приложение 26


    Введение

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

 Метод Хорд.

 Метод Ньютона.

Целью данной курсовой работы является разработка приложения, осуществляющее решение уравнения вида exp(x)-exp(-x)-2=0 . Для достижения поставленной цели требуется решить следующие задачи:

  1. Предоставить пользователю выбирать метод решения.
  2. Представить решение графически.
  3. Возможность выгрузки представленных данных в файл.
  4. Возможность задания всех исходных данных задачи.

Разработка приложения будет производится в среде Delphi.

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

         1.1 Методы решения нелинейного уравнения

        

           Метод Ньютона

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

.

Этот метод называется методом касательных, или методом Ньютона. Действительно, последовательные приближения метода Ньютона сходятся гораздо быстрее, чем в общем методе итераций.

Геометрический смысл метода Ньютона состоит в том, что на каждом шаге мы строим касательную к графику y=f(x) в точке очередного последовательного приближения xi , а за следующее приближение xi+1 берём точку пересечения этой касательной с осью Ox. Тем самым наклон прямой подстраивается на каждом шаге наилучшим образом (ведь кривизну графика, связанную с второй производной, мы не учитываем, и поэтому неизвестно, в какую сторону от касательной отклонится график).

Рис. 1

            Метод Хорд

Идея метода состоит в том, что по двум точкам   и  построить прямую  (то есть хорду, соединяющую две точки графика ) и взять в качестве следующего приближения  абсциссу точки пересечения этой прямой с осью . Иными словами, приближённо заменить на этом шаге функцию  её линейной интерполяцией, найденной по двум значениям  и . (Линейной интерполяцией функции  назовём такую линейную функцию , значения которой совпадают со значениями  в двух фиксированных точках, в данном случае -- в точках  и .)

В зависимости от того, лежат ли точки  и  по разные стороны от корня  или же по одну и ту же сторону, получаем такие чертежи: 

Рис.2. Построение последовательного приближения по методу хорд: два случая



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

Интерполяционную линейную функцию  будем искать как функцию с угловым коэффициентом, равным разностному отношению

построенному для отрезка между  и , график которой проходит через точку :

Решая уравнение , находим

то есть

(2)


Заметим, что величина  может рассматриваться как разностное приближение для производной  в точке . Тем самым полученная формула (2)  - это разностный аналог итерационной формулы метода Ньютона.

Вычисление по формуле (2) гораздо предпочтительнее вычисления по другой полученной нами формуле

хотя эти две формулы математически тождественны, поскольку при использовании формулы (2) в случае вычислений с округлениями (например, на компьютере) достигается меньшая потеря значащих цифр.

Имеются две разновидности применения формулы (2).

Первая разновидность: вычисления ведутся непосредственно по формуле (2) при , начиная с двух приближений  и , взятых, по возможности, поближе к корню . При этом не предполагается, что  лежит между  и  (и что значения функции  в точках  и  имеют разные знаки). При этом не гарантируется, что корень попадёт на отрезок между  и на каком-либо следующем шаге (хотя это и не исключено). В таком случае затруднительно дать оценку погрешности, с которой  приближает истинное значение корня , и поэтому довольствуются таким эмпирическим правилом: вычисления прекращают, когда будет выполнено неравенство , где  -- желаемая точность нахождения корня. При этом полагают приближённое значение корня равным .

1.2  Описание среды программирования  Delphi

Delphi интегрированная среда разработки ПО для Microsoft Windows на языке Delphi, созданная первоначально фирмой Borland и на данный момент принадлежащая и разрабатываемая Embarcadero Technologies. Среда Delphi обеспечивает визуальное проектирование пользовательского интерфейса, имеет развитый объектно-ориентированный язык Object Pascal (позже переименованный в Delphi) и уникальные по своей простоте и мощи средства доступа к базам данных. Язык Delphi по возможностям значительно превзошел язык Basic и даже в чем-то язык C++, но при этом он оказался весьма надежным и легким в изучении (особенно в сравнении с языком C++). В результате, среда Delphi позволяет программистам легко создавать собственные компоненты и строить из них профессиональные программы.

  1.  Создание  многооконного приложения

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

Для создания новой формы необходимо нажать кнопку «New Form».
Форма создаётся вместе с новым модулем, описывающим её работу.

Для  того чтобы форма открывалась (закрывалась) при какой-либо процедуре необходимо прописать Form(№ формы).visible:= true (false).

  1.  Построение графиков

С помощью компонента Chart, который расположен в additional в Delphi, можно выводить различные графики, диаграммы.

Для этого необходимо расположить Chart на форме, два раз щелкнуть по нему и в открывшемся окне настроек, необходимо создать Series, выбрав вид диаграммы. Дальше в процедуре выполнить цикл от начальной координаты до конечной с заданным шагом: Chart1.Series[0].AddXY(x,f(x),'',cl(цвет)), где f(x) функция, которую требуется построить.

Одновременно в одном Chart можно построить несколько графиков.

Для этого необходимо создать для каждого графика свою Series, с определенными настройками.

  1.  Работа с текстовыми файлами

Технология работы с файлами в системе Delphi требует определённого порядка действий:

Прежде всего файл должен быть открыт. Процедура AssignFile(). Система следит, чтобы другие приложения не мешали работе с файлом.

При этом определяется, в каком режиме открывается файл - для изменения или только считывания информации. Reset() - эта процедура открывает существующий файл на диске, Rewrite() - эта процедура создаёт новый файл а также очищает уже существующий файл. После открытия файла в программу возвращается его идентификатор, который будет использоваться для указания на этот файл во всех процедурах обработки.

Начинается работа с файлом. Это могут быть запись, считывание, поиск и другие операции. Процедуры Writen(переменная, выражения), Read()

В конце файл закрывается. Процедура CloseFile().

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

  1.  Практическая часть
  2.  Реализация поиска экстремума

Метод Ньютона

          Для решения Нелинейного уравнения методом Ньютона выполняется следующий алгоритм (рис 2.1)

Ниже расположен программный код, реализующий Решение нелинейного уравнения методом Ньютона:

     

     while(abs(f(x))>eps) do

       begin

         x:=x-(f(x)/df(x));

       end;

      Метод Хорд

        Для решения Нелинейного уравнения методом хорд выполняется следующий алгоритм (рис 2.2)

Ниже расположен программный код, реализующий Решение нелинейного уравнения методом хорд:

       while(abs(f(x))>eps) do

      begin

         x:=x-(f(x)*(x-x0))/(f(x)-f(x0));

      end;

  1.  Использование нескольких форм

В данной программе используется 5 форм.

Форма №1 (рис.2.3)  Представляет собой рабочее поле которое включает в себя выбор метода решения, задание отрезка, точности. Включает в себя следующие компоненты: RadioButton1, RadioButton2, Edit1, Edit2, Edit3, Edit4, Edit5, Button1, Button2, Button3, Button4, Button5, Button6, Button7.

рис.2.3 «Form №1»

Форма №2 (рис.2.4) Включает в себя построение графика функции, и включает в себя такие элементы как: Chart1, Button1

рисунок.2.4 «Form №2»

Форма №3 (рис.2.5) Служит для отображения детализации решения , или вывода итераций. включает в себя: Memo1, Button1, Button2

рисунок 2.5 «Form №3»

      Форма №4 (рис.2.6)  Включает в себя титульный лист, содержит элемент Button1

                                  

рисунок 2.6 Form №4.

Форма №5 (рис.2.7) служит для справочного материала.

                  

рисунок 2.7 «Form №5»

  1.  Графическое представление решения

Графическое представление решения осуществляется с помощью компонента Chart.

Располагаем Chart на форуме и создаем Series1.

В настройках Series выбираем цвет графика  и включаем изображение точек.

Ниже расположены коды для построения графика заданной функции:

begin

 a:=strtofloat(Edit1.Text);

 b:=strtofloat(Edit2.Text);

 x:=a;

while x<=b do

begin

 y:=f(x);

 Form2.Chart1.Series[0].AddXY(x,y,'',clRed);

 x:=x+0.1;

end;

 Form2.Show;

  1.  Сохранение результатов в файл

Данная программа позволяет выгрузить в файл итерации обеих методов и результат сравнения методов.

Ниже расположены программные коды, осуществляющие сохранение:

begin

Assignfile(f,'input.txt');

Rewrite(f);

write(f,Memo1.text);

closeFile(f);

end;

  1. Смена графического фона

Для улучшения интерфейса программы была реализована функция смены фона:Form№1,

Ниже расположен код реализации смены фона:

begin

Image1.visible:=true;

Image2.visible:=false;

Image3.visible:=false;

end;

begin

Image1.visible:=false;

Image2.visible:=true;

Image3.visible:=false;

end;

begin

Image1.visible:=false;

Image2.visible:=false;

Image3.visible:=true;

end;

  1.  Проверка программы

1) Запускаем программу. Открывается окно «Титульный лист» (рис.2.8). Выбираем метод перебора и нажимаем кнопку «Выполнить».

       

рисунок 2.8 «Титульный лист»

После нажатия кнопки «Начать» происходит следующие:

2)Открывается окно «Рабочее поле».(рис.2.9).

      

рисунок 2.9 «Рабочее поле»

3) Нажимаем кнопку «Решить уравнение».  И в поле «Ответ» получаем значение (рис.2.10).

рисунок 2.10 «Рабочее поле с методом ньютона»

4) Нажимаем кнопку «Детализация решения». (рис.2.11).

                            Рисунок 2.11 «Детализация решения»

5) Нажимаем кнопку «Сохранить в файл». После чего заходим в директорию программного продукта и находим файл с названием «input.txt» В нём отображены все итерации.

6) Выбираем метод хорд и нажимаем кнопку «Решить уравнение»

рисунок 2.11 «Рабочее поле с методом хорд»

Проделываем пункты 4-5 с методом хорд. Возвращаемся к окну «Рабочее поле».

7) В случае если пользователь случайно забудет заполнить одно из 3 полей в «рабочем поле» то программа выведет сообщение (рис 2.12)

8) Нажимаем кнопку «Показать график». Появляется окошко с графиком функции .(рис.2.12).

рисунок 2.12 «График»

9)Реализацию смены фона смотреть в пункте «2.5»

10По выбору меню «справка», появляется подпункт «о программе».

После открытия подпункта «о программе» (рис 2.13).

  

рисунок 2.13 «О программе»

9) Нажимаем на пункт меню «файл», в нём выбираем подпункт «выход». Программа закрывается.

Заключение

Приложение для решения нелинейного уравнения вида exp(x)-exp(-x)-2=0. В нём пользователю предоставляется на выбор два метода  решения: метод Ньютона и метод хорд. Программа предоставляет графическое решение и дает возможность просмотра итераций для каждого метода.

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

Приложение разработано в среде Delphi 7.

Поставленные задачи решены, цель курсовой работы  достигнута.

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

  1.  Разработка приложений в среде Delphi. Часть 1. Общие примеры программ. Соколова Ю.С.,  Жилева С.Ю. – 2011, – 144 с.
  2.  Delphi. Готовые алгоритмы. Стивенс. Р. – 2007, – 384 с.
  3.  Интерактивный практикум по компьютерной схемотехнике на Delphi. Авдеев В.А. – 2011, – 360 с.
  4.  Программирование графики в Delphi. Тюкачев Н., Илларионов И., Хлебостроев В. – 2008, – 784 с.
  5.  Delphi. Теория и практика. Осипов Д.Л. – 2011, – 578 с.

Приложение

Unit 1

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, StdCtrls, jpeg, ExtCtrls, Menus;

type

 TForm1 = class(TForm)

   RadioButton1: TRadioButton;

   RadioButton2: TRadioButton;

   Edit1: TEdit;

   Edit2: TEdit;

   Edit3: TEdit;

   Button1: TButton;

   Edit4: TEdit;

   Button2: TButton;

   Button3: TButton;

   Label2: TLabel;

   Label3: TLabel;

   Label4: TLabel;

   Label5: TLabel;

   Label7: TLabel;

   Button4: TButton;

   Image1: TImage;

   Image2: TImage;

   Image3: TImage;

   Button5: TButton;

   Button6: TButton;

   Button7: TButton;

   Label8: TLabel;

   Label1: TLabel;

   Label9: TLabel;

   Label10: TLabel;

   Label11: TLabel;

   Label12: TLabel;

   Label13: TLabel;

   Edit5: TEdit;

   MainMenu1: TMainMenu;

   N1: TMenuItem;

   N2: TMenuItem;

   N3: TMenuItem;

   N4: TMenuItem;

   N5: TMenuItem;

   N6: TMenuItem;

   N7: TMenuItem;

   Label6: TLabel;

   Label14: TLabel;

   procedure Button1Click(Sender: TObject);

   procedure Button2Click(Sender: TObject);

   procedure Button4Click(Sender: TObject);

   procedure Button3Click(Sender: TObject);

   procedure FormClose(Sender: TObject; var Action: TCloseAction);

   procedure Button5Click(Sender: TObject);

   procedure Button6Click(Sender: TObject);

   procedure Button7Click(Sender: TObject);

   procedure N3Click(Sender: TObject);

   procedure N4Click(Sender: TObject);

   procedure N5Click(Sender: TObject);

   procedure N6Click(Sender: TObject);

   procedure N7Click(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form1: TForm1;

implementation

  uses Unit2,Unit3,Unit5;

{$R *.dfm}

function f(x:real):real;

begin

 f:=exp(x)-exp(-x)-2;

end;

function df(x:real):real;

begin

  df:=exp(x)+exp(-x);

end;

procedure TForm1.Button1Click(Sender: TObject);

 var a,b,eps,x,x0:real;

     t1,t2:Cardinal;

begin

 if (Edit1.Text='') or  (Edit2.Text='') or (Edit3.text='') then

   begin

    ShowMessage('Введите исходные данные');

    Exit;

   end;

 Button4.Enabled:=true;

 a:=strtofloat(Edit1.Text);

 b:=strtofloat(Edit2.Text);

 eps:=strtofloat(Edit3.Text);

 if RadioButton1.Checked then

   begin

     //метод Ньютона

    t1:=GetTickCount;

     x:=a;

     Form3.Memo1.Text := FloatToStr(x)+#13#10;

     while(abs(f(x))>eps) do

       begin

         x:=x-(f(x)/df(x));

         Form3.Memo1.Text:=Form3.Memo1.Text+FloatToStr(x)+#13#10;

       end;

    t2:=GetTickCount;

   end;

if RadioButton2.Checked then

  begin

  //метод Хорд

   t1:=GetTickCount;

    x0:=a;

    x:=b;

    Form3.Memo1.Text := FloatToStr(x)+#13#10;

    while(abs(f(x))>eps) do

      begin

         x:=x-(f(x)*(x-x0))/(f(x)-f(x0));

         Form3.Memo1.Text:=Form3.Memo1.Text+FloatToStr(x)+#13#10;

      end;

    t2:=GetTickCount;

  end;

 edit4.text:=floattostr(x);

 edit5.text:=inttostr(t2-t1);

end;

procedure TForm1.Button2Click(Sender: TObject);

var a,b,x,y:Real;

begin

 a:=strtofloat(Edit1.Text);

 b:=strtofloat(Edit2.Text);

 x:=a;

while x<=b do

begin

 y:=f(x);

 Form2.Chart1.Series[0].AddXY(x,y,'',clRed);

 x:=x+0.1;

end;

 Form2.Show;

end;

procedure TForm1.Button4Click(Sender: TObject);

begin

 Form3.Show;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

Form2.close;

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

 Application.Terminate;

end;

procedure TForm1.Button5Click(Sender: TObject);

begin

Image1.visible:=true;

Image2.visible:=false;

Image3.visible:=false;

end;

procedure TForm1.Button6Click(Sender: TObject);

begin

Image1.visible:=false;

Image2.visible:=true;

Image3.visible:=false;

end;

procedure TForm1.Button7Click(Sender: TObject);

begin

Image1.visible:=false;

Image2.visible:=false;

Image3.visible:=true;

end;

procedure TForm1.N3Click(Sender: TObject);

begin

 Button1.Click;

end;

procedure TForm1.N4Click(Sender: TObject);

begin

 Button2.Click;

end;

procedure TForm1.N5Click(Sender: TObject);

begin

 Button4.Click;

end;

procedure TForm1.N6Click(Sender: TObject);

begin

 Application.Terminate;

end;

procedure TForm1.N7Click(Sender: TObject);

begin

Form5.show;

end;

end.

Unit 2

Var

 Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);

begin

Form2.close;

end;

end.

Unit 3

procedure TForm3.Button1Click(Sender: TObject);

var f:textfile;

begin

Assignfile(f,'input.txt');

Rewrite(f);

write(f,Memo1.text);

closeFile(f);

end;

procedure TForm3.Button2Click(Sender: TObject);

begin

Form3.Close;

end;

end.

Unit 4

procedure TForm4.Button1Click(Sender: TObject);

begin

 Form1.Show;

 Form4.Hide;

end;

end.

Unit 5

var

 Form5: TForm5;

implementation

{$R *.dfm}

end.


 

А также другие работы, которые могут Вас заинтересовать

38021. ПРЕДСТАВЛЕНИЕ И РЕАЛИЗАЦИЯ АТД «СТЕК», «ОЧЕРЕДЬ», «ДВУСВЯЗНЫЙ СПИСОК» 606.5 KB
  Реализация «стека» посредством указателей. Обычно ячейка стека состоит из двух полей. Первое поле информационное, т.е. хранит сам элемент списка, отсюда название – element, а второе содержит указатель на следующую ячейку, поэтому имеет название next. Для формирования структуры АТД «стек» используется составной тип и описывается в разделе описания типов type.
38022. Лабораторная работа № 3 ПРЕДСТАВЛЕНИЕ И РЕАЛИЗАЦИЯ АТД ДЕРЕВО Цель работы: исследовать и изучить АТД. 1.59 MB
  n] of integer; vr :tree; Реализация деревьев с использованием списков сыновей. Списки сыновей составляются для каждого узла.1 можно составить соответствующие списки сыновей рис.5 Тип для реализации АТД дерево через списки сыновей рис.
38023. ПРЕДСТАВЛЕНИЕ И РЕАЛИЗАЦИЯ «БИНАРНОГО ДЕРЕВА» 197.5 KB
  нет копий одного и того же элемента. Дерево бинарного поиска – это так же бинарное дерево узлы которого помечены элементами множеств. Свойство данного дерева заключено в том что все элементы левого поддерева любого узла x меньше элемента узла x а элементы правого поддерева больше чем x. Первое поле element – это поле в котором храниться значение самого элемента множества.
38024. ИЗУЧЕНИЕ АТД «СЛОВАРЬ», «ФАЙЛ» И «НАГРУЖЕННОЕ ДЕРЕВО» 341 KB
  Временами так же возникает необходимость проверки присутствия элемента в этом множестве. Словарь можно реализовать тремя способами: 1посредством сортированных или не сортированных связанных списков; 2при помощи двоичных векторов если элементы данного множества целые числа; 3используя массив фиксированной длины с указателем на последнюю заполненную ячейку этого массива если размер множества не превышает заданную длину массива в противном случае используются связанные списки. Начальное значение сегмента всегда меньше значений элементов его...
38025. Карты изображений 1.45 MB
  подробное описание областей нанесенных на контурную карту: mp nme= Mp re shpe= rect coords= 226074 href= ссылка на Google.ru re shpe= rect coords= 61411276 href= ссылка на мой сайт mp Примечание: жирным выделено то что должно присутствовать обязательно обычным текстом переменные параметры. mp nme= Mp2 re shpe= circle coords= 842826 href= http: google.ru re shpe= poly coords= 65351417858109481107177546345 href= http: srez.
38026. Элементарные таблицы 60 KB
  Если значение ноль то рамка не требуется; cellpdding= cellspcing= добавляют свободное пространство между данными ячейки и ее границами и между ячейками таблицы соответственно. th т th контейнер ячейки Заголовок : заголовок столбца или строки. Значения: left заголовок прижать к левому краю ячейки center заголовок расположить по центру ячейки right заголовок прижать к правому краю ячейки; vlign= задает положение данных в ячейке Заголовок по вертикали. Значения: bottom заголовок прижать к нижнему краю ячейки middle заголовок...
38027. Продолжение разговора о ссылках 63.5 KB
  Способ первый с помощью атрибута nme имя закладки тэга : Заголовки стих первый стих второй стих третий в нашем примере мы сделали закладками использовав атрибут тэга nme: Заметьте href= stih3 символ решетки перед именем закладки на которую мы ссылаемся обязателен.
38028. Создание форм 45.5 KB
  Помимо атрибута type большинство элементов управления требуют указания атрибутов nme и vlue для идентификации имени и исходного значения если таковое имеется. Вот пример кода создающего текстовое поле: input type=â€text†nme=â€usernme†vlue=â€â€ Этот код может пригодиться при создании текстового поля для ввода имени пользователя при подключении к Webузлу. Для полноты картины можно дополнить его полем пароля: input type=â€pssword†nme =“userpss†vlue=â€â€ обратите внимание что атрибуту vlue в обоих случаях присвоено...
38029. Создание фреймов 729 KB
  HTML программа имеющая структуру кадров не должна содержать контейнеры body и наоборот. Обычно это файл HTML программы из того же каталога папки что и сам контейнер но может быть и абсолютный адрес файла с любого компьютера. nofrmes т nofrmes контейнер HTML текста для броузеров которые не поддерживают аппарат кадров. Левый фрейм Верхний правый фрейм Нижний правый фрейм Листинг: главный файл html hed title фреймы title hed frmeset cols= 4 frme frmeborder=yes src= left.