Автор: Пользователь скрыл имя, 07 Апреля 2013 в 12:08, курсовая работа
Аппроксимация, или приближение - научный метод, состоящий в замене одних объектов другими, в том или ином смысле близкими к исходным, но более простыми. Под аппроксимацией в математике обычно подразумевается описание некоторой, чаще не заданной явно, зависимости или совокупности представляющих ее данных с помощью другой, более простой или более единообразной зависимости. Часто данные представляются в виде отдельных точек, координаты которых задаются таблицей данных.
Введение 2
Описание теории 3
Блок схема 4
Программирование 5
Разработка интерфейса приложения. 5
Результаты работы программы 9
Листинг программы 11
Код Unit1 11
Код Unit2 17
Код Unit3 19
Код Unit4 20
Выводы 22
Список литературы. 23
Оглавление
Целью курсовой работы является создание приложения, при помощи которого пользователь сможет аппроксимировать экспериментальные данные полиномиальной функции.
Задачи:
Средства:
Аппроксимация, или приближение - научный метод, состоящий в замене одних объектов другими, в том или ином смысле близкими к исходным, но более простыми. Под аппроксимацией в математике обычно подразумевается описание некоторой, чаще не заданной явно, зависимости или совокупности представляющих ее данных с помощью другой, более простой или более единообразной зависимости. Часто данные представляются в виде отдельных точек, координаты которых задаются таблицей данных. Эти точки называются узловыми. В этом случае аппроксимацией является процесс подбора эмпирической формулы, значения которой возможно мало отличались бы от опытных данных. Результат аппроксимации (построенная функция) может не проходить через заданные точки.
Геометрическое представление аппроксимации
Укрупненная блок схема алгоритма аппроксимации методом наименьших квадратов
Для создания приложения средствами 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
При запуске программы откроется такое окно
При нажатии кнопки “Далее” будет выполнен переход к окну, где выполняются все вычисления и построения графика.
Выбираем файл с исходными данными и жмем «Открыть».
Программа автоматически заносит данные в таблицу.
Для построения полинома нажмем “График”
Белые квадратики это ряд точек экспериментальных данных.
Полиномиальная функция
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.
load(opendialog1.FileName);
stringgrid1.RowCount:=nn+1;
for i:=1 to nn do
begin
stringgrid1.Cells[0,i]:=
stringgrid1.Cells[1,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(
a[m,n]:=a[m,n]+x[i]*exp((n+m-
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.
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.
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.
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.
В ходе выполнения данной курсовой работы было реализовано приложение, которое выполняет считывание, обработку и визуализацию экспериментальных данных. Так же аппроксимирует экспериментальные данные полиномиальной функцией.
$$$$