Cоздание приложения, при помощи которого пользователь сможет аппроксимировать экспериментальные данные полиномиальной функции

Автор: Пользователь скрыл имя, 07 Апреля 2013 в 12:08, курсовая работа

Описание работы

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

Содержание

Введение 2
Описание теории 3
Блок схема 4
Программирование 5
Разработка интерфейса приложения. 5
Результаты работы программы 9
Листинг программы 11
Код Unit1 11
Код Unit2 17
Код Unit3 19
Код Unit4 20
Выводы 22
Список литературы. 23

Работа содержит 1 файл

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

— 1.14 Мб (Скачать)



Оглавление

 

 

 

Введение

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

 

Задачи:

 

    1. Используя метод наименьших квадратов подобрать параметры эмпирической формулы.
    2. Сравнить полином, полученный в приложении, с полиномом, построенным в MS Excel по исходным данным.
    3. Сравнить график функции, полученный в приложении, графиком функции, построенным в MS Excel по исходным данным.

 

Средства:

 

    1. Lazarus 0.9.30.4 для создания приложения.
    2. Электронная таблица MS Excel.
    3. Текстовой редактор MS Word.

Описание теории

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

Геометрическое представление  аппроксимации

Блок схема

Укрупненная блок схема алгоритма аппроксимации методом наименьших квадратов

Программирование

Разработка интерфейса приложения.

Для создания приложения средствами Lazarus открываем среду разработки, создаем новый проект.

Интерфейс приложения будет  состоять из 4 форм.

Форма 2

Форма 2 предварительное  окно, на котором отображена тема курсовой. Кнопка Button1  предоставляет нам переход к главному окну. Форма 2 содержит компоненты:

    Button1: TButton;

    Label1: TLabel;

    Label2: TLabel;

    Label3: TLabel; 

 

Форма 1

Форма 1 является основной формой приложения, где пользователь может аппроксимировать экспериментальные данные полиномиальной функции посредством загрузки экспериментальных данных из файла. А также пользователь может сравнить график, полученный в программе, с графиком, построенным в программе в MS Excel.

Форма 1 содержит компоненты:

Button1: TButton;

Button2: TButton;

Button3: TButton;

Button5: TButton;

Button6: TButton;

Button7: TButton;

Chart1: TChart;

grafic1: TLineSeries;

    grafic2: TLineSeries;

    Edit1: TEdit;

    MainMenu1: TMainMenu;

    MenuItem1: TMenuItem;

    MenuItem2: TMenuItem;

    MenuItem3: TMenuItem;

    MenuItem4: TMenuItem;

    MenuItem5: TMenuItem;

    MenuItem7: TMenuItem;

    MenuItem8: TMenuItem;

    MenuItem9: TMenuItem;

    OpenDialog1: TOpenDialog;

    StringGrid1: TStringGrid;   

 

Форма 3

Форма 3 позволяет пользователю сравнить полином, полученный в приложении, с полиномом, построенным в MS Excel по исходным данным.

Форма 4

Форма 4 содержит краткую  информацию об авторе, т.е. обо мне :)

Компоненты:

Button1: TButton;

Label1: TLabel; 

 

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

 

Data.txt

Для того чтобы программа работала нужны экспериментальные данные.

Программа будет загружать  их из файла. Создадим текстовой файл, назовем его data.txt.

Содержание текстового файла:

0.0    3.2965

0.2     4.999

0.4    5.9161

0.6     6.1762

0.8     5.2279

1.0     4.794

1.2     1.9072

1.4    0.8723

1.6    -0.414

1.8     -2.4468

2.0    -3.197

2.2    -3.9492

2.4    -4.1532

2.6    -3.1484

2.8    -1.5528

Результаты работы программы

При запуске программы откроется  такое окно

При нажатии кнопки “Далее” будет выполнен переход к окну, где выполняются все вычисления и построения графика.

 

Выбираем файл с исходными  данными и жмем «Открыть».

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

Для построения полинома нажмем “График”

 


             Белые квадратики  это ряд точек  экспериментальных данных.

Полиномиальная функция 

Листинг программы

Код Unit1

unit Unit1;

{$mode objfpc}{$H+}

interface

uses

  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,

  StdCtrls, ExtCtrls, Grids, Menus, TAGraph, TASeries, TAFuncSeries,math;

type

  { TForm1 }

  TForm1 = class(TForm)

    Button1: TButton;

    Button2: TButton;

    Button3: TButton;

    Button5: TButton;

    Button6: TButton;

    Button7: TButton;

    Chart1: TChart;

    grafic1: TLineSeries;

    grafic2: TLineSeries;

    Edit1: TEdit;

    MainMenu1: TMainMenu;

    MenuItem1: TMenuItem;

    MenuItem2: TMenuItem;

    MenuItem3: TMenuItem;

    MenuItem4: TMenuItem;

    MenuItem5: TMenuItem;

    MenuItem7: TMenuItem;

    MenuItem8: TMenuItem;

    MenuItem9: TMenuItem;

    OpenDialog1: TOpenDialog;

    StringGrid1: TStringGrid;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure Button3Click(Sender: TObject);

    procedure Button5Click(Sender: TObject);

    procedure Button6Click(Sender: TObject);

    procedure Button7Click(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    procedure Image1Click(Sender: TObject);

    procedure MenuItem1Click(Sender: TObject);

    procedure MenuItem3Click(Sender: TObject);

    procedure MenuItem6Click(Sender: TObject);

    procedure MenuItem9Click(Sender: TObject);

  private

    { private declarations }

  public

    { public declarations }

  end;

var

  Form1: TForm1;

  x,y:array[0..100] of double;

  nn:integer;

  c,b:array[1..4] of real;

  a,g:array[1..4,1..4] of real;

    i,k,n,m:integer;

    s:real;

implementation

{ TForm1 }

uses unit2,Unit3,Unit4;

 

procedure load(s:string);

var

inp:text;

begin

assign(inp,s);

reset(inp);

nn:=-1;

while not eof(inp) do

      begin

       inc(nn);

       readln(inp,x[nn],y[nn]);

      end;

close(inp);

end;

 

procedure TForm1.Button2Click(Sender: TObject);

var

i:integer;

begin

  if opendialog1.Execute then

  begin

     Edit1.Text:=opendialog1.FileName;

     load(opendialog1.FileName);

     stringgrid1.RowCount:=nn+1;

     for i:=1 to nn do

     begin

        stringgrid1.Cells[0,i]:=floattostr(x[i]);

        stringgrid1.Cells[1,i]:=floattostr(y[i]);

     end;

  end;

end;

 

procedure TForm1.Button1Click(Sender: TObject);

begin

   Form4.Show;

end;

 

procedure TForm1.Button3Click(Sender: TObject);

begin

  close;

end;

 

procedure TForm1.Button5Click(Sender: TObject);

var

i,j:integer;

begin

  grafic1.clear;

  grafic2.clear;

for i:=1 to nn do

  grafic1.AddXY(x[i],y[i]);

for m:=1 to 4 do

  begin

  for n:=1 to 4 do

    begin

    b[m]:=0;

    a[m,n]:=0;

    for i:=1 to nn do

      begin

      b[m]:=b[m]+y[i]*exp((m-1)*ln(x[i])) ;

      a[m,n]:=a[m,n]+x[i]*exp((n+m-3)*ln(x[i]));

      end;

    end;

  end;

 

for k:=1 to 3 do

  begin

  for m:=k+1 to 4 do

    begin

    g[m,k]:=a[m,k]/a[k,k];

    for n:=1 to 4 do

      begin

      a[m,n]:=a[m,n]-g[m,k]*a[k,n];

      end;

    b[m]:=b[m]-g[m,k]*b[k];

    end;

  end;

 

for m:=4 downto 1 do

  begin

  n:=4;

  s:=0;

  while n>m do

    begin

    s:=s+a[m,n]*c[n];

    n:=n-1;

    end;

  c[m]:=(b[m]-s)/a[m,m];

  end;

 

for i:=1 to nn do

  begin

  s:=0;

  for m:=1 to 4 do

  s:=s+c[m]*exp((m-1)*ln(x[i]));

  grafic2.AddXY(x[i],s);

  end;

  end;

 

procedure TForm1.Button6Click(Sender: TObject);

begin

  form3.Show;

end;

 

procedure TForm1.Button7Click(Sender: TObject);

begin

  form2.Show;

end;

 

procedure TForm1.FormCreate(Sender: TObject);

begin

end;

 

procedure TForm1.Image1Click(Sender: TObject);

begin

end;

 

procedure TForm1.MenuItem1Click(Sender: TObject);

begin

end;

 

procedure TForm1.MenuItem3Click(Sender: TObject);

begin

end;

 

procedure TForm1.MenuItem6Click(Sender: TObject);

begin

end;

 

procedure TForm1.MenuItem9Click(Sender: TObject);

begin

  close;

end;

 

initialization

  {$I Unit1.lrs}

end.

Код Unit2

unit Unit2;

{$mode objfpc}{$H+}

interface

 

uses

  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,

  StdCtrls, ExtCtrls;

type

  { TForm2 }

  TForm2 = class(TForm)

    Button1: TButton;

    Label1: TLabel;

    Label2: TLabel;

    Label3: TLabel;

    procedure Button1Click(Sender: TObject);

    procedure FormCreate(Sender: TObject);

  private

    { private declarations }

  public

    { public declarations }

  end;

var

  Form2: TForm2;

implementation

{ TForm2 }

uses unit1;

procedure TForm2.Button1Click(Sender: TObject);

begin

  Form2.Hide;

  Form1.Show;

end;

procedure TForm2.FormCreate(Sender: TObject);

begin

end;

initialization

  {$I unit2.lrs}

end.

Код Unit3

  unit Unit3;

{$mode objfpc}{$H+}

interface

uses

  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,

  StdCtrls, ExtCtrls;

type

  { TForm3 }

  TForm3 = class(TForm)

    Button1: TButton;

    Image1: TImage;

    procedure Button1Click(Sender: TObject);

    procedure Label1Click(Sender: TObject);

  private

    { private declarations }

  public

    { public declarations }

  end;

var

  Form3: TForm3;

implementation

{ TForm3 }

procedure TForm3.Button1Click(Sender: TObject);

begin

  Form3.Hide;

end;

procedure TForm3.Label1Click(Sender: TObject);

begin

end;

initialization

  {$I unit3.lrs}

end.     

Код Unit4             

unit Unit4;

{$mode objfpc}

interface

uses

  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,

  StdCtrls;

type

  { TForm4 }

  TForm4 = class(TForm)

    Button1: TButton;

    Label1: TLabel;

    procedure Button1Click(Sender: TObject);

    procedure Label1Click(Sender: TObject);

  private

    { private declarations }

  public

    { public declarations }

  end;

var

  Form4: TForm4;

implementation

{ TForm4 }

procedure TForm4.Label1Click(Sender: TObject);

begin

end;

procedure TForm4.Button1Click(Sender: TObject);

begin

  Form4.Hide;

end;

initialization

  {$I unit4.lrs}

end.

 

 

 

 

 

 

 

 

 

 

 

 

 

Выводы

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

  1. Основы программирования в среде Lazarus. Мансуров К.Т.
  2. http://Lazarus.su/
  3. Электронный учебник «Lazarus  с нуля» 2004г.
  4. Карчевская М.П., Рамбургер О.Л. Лекции по информатике
  5. http://www.cleverstudents.ru/mnk.html Метод наименьших квадратов (МНК).

 

 

 

 


$$$$



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