Автор: Пользователь скрыл имя, 23 Апреля 2012 в 09:50, курсовая работа
1. Разработать приложение в среде Delphi для сглаживания функции, заданной таблицей значений в равно отстоящих точках, с помощью многочлена 3- степени, построенного по последовательным точкам методом наименьших квадратов.
2. В программе необходимо предусмотреть:
задание произвольной табличной функции y(x);
вывод табличных значений сглаженной функции;
графическое отображение табличной функции y(x) для контроля задания табличных значений;
графическое отображение сглаженной функции y(x).
ЗАДАНИЕ НА КУРСОВУЮ РАБОТУ 3
ВВЕДЕНИЕ 4
2.Математические методы 5
2.1Основные понятия 5
2.2 Математические методы 8
3.Описание применения пакета программ 11
3.1 Основные понятия, цели и задачи 11
3.2 Описание диалоговых окон 12
3.3 Описание исходных данных 16
3.4 Описание результатов программы 16
3.5 Тестирование программы 17
ЗАКЛЮЧЕНИЕ 22
ЛИТЕРАТУРА 23
СПИСОК ИНТЕРНЕТ-ИСТОЧНИКОВ 24
Приложение 25
Рисунок 1.− Основное окно программы
Пользователь открывает нужную функцию нажатием на кнопку «Открыть функцию». При нажатии появляется диалоговое окно, предоставляющее выбор таблично заданной функции, записанной в текстовом файле (рисунок 2)
Рисунок 2. – Окно выбора функции
После выбора функции заполнится таблица значений функций в основном диалоговом окне, и появится график данной функции.
Рисунок 3.− Функция и её график
После
появления графика функции
Рисунок 5. – Значения аппроксимированной функции
После
того, как в таблице появились
значения аппроксимированной функции,
необходимо построить график этой функции.
Для этого нажимаем на кнопку «посмотреть
график сглаженной функции». В поле построения
исходной функции появится график аппроксимированной
функции, выделенный другим цветом, как
показано на рисунке 6.
Рисунок
6. – График аппроксимированной функции
Исходными данными являются аргументы х и значения у таблично заданной функции.
Результатом
программы являются вычисленные
значения аппроксимированной функции
ур, которые фиксируются в таблице в
столбце «ур», а так же график сглаженной
функции, наблюдаемый в поле для построения
графиков.
Для проверки правильности работы программы возьмем 3 разных функции .
Этап 1. Выберем функции, для которых удобен в применении метод наименьших квадратов для их аппроксимации.
Рисунок
7. – Первая функция
Рисунок 8. – Вторая функция
Рисунок 9. –Третья функция
Этап 2. Записываем значения в таблицу в диалоговом окне и строим график функции
Рисунок 10. – Значения и график функции №1
Рисунок
11. – Значения и график функции
№2
Рисунок 12. – Значения и график функции №3
Этап 3. Произведем сглаживание функции и постоим график сглаженной функции.
Рисунок 13. – Значения и график сглаженной функции №1
Рисунок 14. – Значения и график сглаженной функции №2
Рисунок 15. – Значения и график сглаженной функции №3
Из рисунков видно, что сглаживание функции было произведено удачно. Были исследованы разные функции на различных интервалах, и как показывает график на всех интервалах программа верно производит сглаживание функции.
В
курсовой работе была реализована задача
разработки пакета программ сглаживания
функции. Для решения данной задачи
использовался многочлен
Таким
образом, овладение и закрепление
навыков программирования на языке
Object Pascal в инструментальной среде Delphi
было достигнуто.
Исходный код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,
StdCtrls, Grids, ExtCtrls, TeeProcs, TeEngine, Chart, Series;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
OpenDialog1: TOpenDialog;
Button1: TButton;
Button2: TButton;
Chart1: TChart;
Series2: TLineSeries;
Button3: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
i,j:integer;
implementation
{$R *.dfm}
uses comobj;
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Cells[0,0]:='x';
StringGrid1.Cells[1,0]:='y';
stringgrid1.Cells[2,0]:='yp';
end;
procedure TForm1.Button1Click(Sender: TObject);
var
TS : TStringList;
s : string;
x, y :real;
i, CountRow, k : integer;
F:textfile;
begin
if not OpenDialog1.Execute
then exit;
Form1.Caption := OpenDialog1.FileName;
TS := TStringList.Create;
try
TS.LoadFromFile( OpenDialog1.FileName );
except
FreeAndNil( TS );
ShowMessage('Ошибка доступа/чтения файла ' + OpenDialog1.FileName);
exit;
end;
StringGrid1.ColCount := 3;
StringGrid1.RowCount := TS.Count;
CountRow := 0;
assignFile(f,OpenDialog1.
reset(f);
while not eof(f) do begin
readln(f,s);
s := Trim(s);
if Pos(' ', s ) > 0 then begin
s := StringReplace( s, '.', DecimalSeparator, [rfReplaceAll] );
s := StringReplace( s, ',', DecimalSeparator, [rfReplaceAll] );
Val(Trim(Copy(s, 1, Pos(' ', s )-1)), x, k);
if k<>0 then {в начале строки идёт НЕ ЧИСЛО - игнорируем всю строчку} Continue;
Val(Trim(Copy(s, Pos(' ', s )+1, 255)), y, k);
if k<>0 then {в начале строки идёт НЕ ЧИСЛО - игнорируем всю строчку} Continue;
{всё хорошо. найденные значения записываем в StringGrid}
Inc(CountRow); {увеличиваем счётчик строк}
StringGrid1.RowCount := CountRow+1;
StringGrid1.Cells[0, CountRow] := FloatToStr(x);
StringGrid1.Cells[1, CountRow] := FloatToStr(y);
// exl(countRow,x,y);
end;
end;
// подкорректируем размер грида - число строк сделаем равным счётчику
FreeAndNil( TS ); {очистим список}
//очищаем 3 столбец таблицы
with stringgrid1 do for i:=1 to rowcount-1 do
cells[2,i]:='';
//очищаем график
chart1.SeriesList.Series[0].
chart1.SeriesList[0].Marks.
chart1.SeriesList.Series[1].
chart1.SeriesList[1].Marks.
//строим график функции
with Chart1 do begin
Title.Text.Clear;
Title.Text.Add('Графики функций');
SeriesList.Series[0].Clear;
SeriesList.Series[0].Marks.
BottomAxis.Title.Caption := 'значения х';//подписываем X
LeftAxis.Title.Caption := 'значения у';//подписываем Y
Repaint;
with StringGrid1 do for i:=1 to Rowcount-1 do begin
SeriesList.Series[0].AddXY(
end;
StringGrid1.SetFocus;
end;
end;
procedure TForm1.Button2Click(Sender: TObject); //передача данных в excel
var i,j,k:integer;
exl:OleVariant; yp:array[1..100] of real;
WorkBook,Sheet:Variant;
fileName:string; n,m:integer;
begin
//Получим имя будущего Exel- файла
fileName:=ExtractFilePath(
//Создаем объект интерфейса для доступа к серверу COM
//Создаем OLE сервер MS Excel
exl:= CreateOleObject('Excel.
//Открываем книгу и активизирум раб.лист 1
WorkBook:=exl.Application.
Sheet:=WorkBook.Worksheets[1];
n:= stringgrid1.RowCount-4;
stringgrid1.Cells[2,1]:=
stringgrid1.Cells[2,2]:=
m:=stringgrid1.RowCount-1;
stringgrid1.Cells[2,m]:=
stringgrid1.Cells[2,m-1]:=
//Запись данных в ячейки Excel
k:=0;
for i:=1 to n-1 do begin
inc(k);
for j:=0 to 4 do begin
Sheet.cells[j+2,1]:=
Sheet.cells[j+2,4]:=
end;
//Чтение данных из ячеек Excel
yp[i]:= Sheet.cells[4,11];
stringgrid1.Cells[2,i+2]:=
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var i:integer;
begin
with Chart1 do begin
with StringGrid1 do for i:=1 to Rowcount-1 do
SeriesList.Series[1].AddXY(
StringGrid1.SetFocus;
end;
end;
end.