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.


 

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

10187. Трудовая биография и изобретательская деятельность И.И. Ползунова 33.5 KB
  Трудовая биография и изобретательская деятельность И. И. Ползунова Первый в мире универсальный паровой двигатель изобрел русский механик И. И. Ползунов 1728-1766 гг.. Он родился в Екатеринбурге в семье рядового солдата. Окончив горнозаводскую школу. Ползунов стал трудитьс
10188. Стефенсон Д. - основатель мирового локомотивостроения и железнодорожного дела 32 KB
  Д. Стефенсон основатель мирового локомотивостроения и железнодорожного дела Основоположником железнодорожного транспорта принято считать английскою инженера Джорджа Стефенсона 1781-1848 гг.. Он родился в семье потомственных рабочих угольных копи Ньюкасла где и сам на...
10189. Механики Черепановы и их роль в создании первого российского паровоза 34 KB
  Механики Черепановы и их роль в создании первого российского паровоза Первый российский паровоз был создан отцом и сыном Черепановыми Ефимом Алексеевичем 1774-1842 гг. и Мироном Ефимовичем 1803-1849 гг.. Они происходили из крепостных крестьян Выйского завода на Урале. Отец
10190. Технические достижения XIX в. Изобретение радио и двигателя внутреннего сгорания 40 KB
  Технические достижения XIX в. Изобретение радио и двигателя внутреннего сгорания Применение паровой машины на производстве и транспорте обусловило подлинную промышленную революцию XIX в. Механизмом которому было суждено коренным образом изменить жизнедеятельность люд
10191. Развитие средств транспорта в XX – начале XXI вв. Состояние и перспективы железнодорожного дела в современной России 36.5 KB
  Развитие средств транспорта в XX – начале XXI вв. Состояние и перспективы железнодорожного дела в современной России Двигатель внутреннего сгорания помог человеку твердо обосноваться в воздушном пространстве. Использование в этих целях паровой машины оказалось неудачн...
10192. Основные этапы освоения космоса. Жизненный путь и научная деятельность К.Э. Циолковского 34 KB
  Основные этапы освоения космоса. Жизненный путь и научная деятельность К.Э. Циолковского Крупные успехи современной тяжелой авиации всецело связаны с использованием реактивного двигателя. Он основан на принципе движения ракеты т.е. противодействии силе термической р
10193. Создание и совершенствование ЭВМ. Роль электроники и компьютерных технологий в современном мире 47.5 KB
  Создание и совершенствование ЭВМ. Роль электроники и компьютерных технологий в современном мире Логическим результатом эволюции радиоэлектронных технологий стало создание ЭВМ. Назвать точную дату изобретения и автора первой электронной вычислительной машины достат
10194. Формирование и развитие системы наука - техника во второй половине ХХ - начале ХХI вв. Задачи гуманитаризации технических наук на современном этапе 30 KB
  Формирование и развитие системы наука – техника во второй половине ХХ начале ХХI вв. Задачи гуманитаризации технических наук на современном этапе На современном этапе задачи гуманитаризации науки все более и более актуально встают перед всем человечеством. Это связ...
10195. Образ и его представление, место и метод. Психический аспект образа 60.5 KB
  Образ и его представление место и метод Метод в отношении природы Психический аспект образа. Образ и его представление место и метод По утверждению русского философа В.Ф. Эрна в книге Верховное постижение Платона образ пещеры выдуман сами