Пакет программ сглаживания функции

Автор: Пользователь скрыл имя, 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 файл

Курсовая работа Кокалич Мария (1).doc

— 498.00 Кб (Скачать)

     Рисунок 1.− Основное окно программы

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

     

     Рисунок 2. – Окно выбора функции

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

     Рисунок 3.− Функция и её график

     После появления графика функции производится нажатие на кнопку «Рассчитать». В  результате данные из таблицы передаются в книгу Microsoft Office Excel поочередно по пять точек. Там производится расчет значений сглаженной функции. Эти значения автоматически записываются в таблицу в основном диалоговом окне в столбец «ур» (Рисунок 5).

     Рисунок 5. – Значения аппроксимированной функции

     После того, как в таблице появились  значения аппроксимированной функции, необходимо построить график этой функции. Для этого нажимаем на кнопку «посмотреть график сглаженной функции». В поле построения исходной функции появится график аппроксимированной функции, выделенный другим цветом, как показано на рисунке 6. 

     Рисунок 6. – График аппроксимированной функции 
 
 
 
 
 
 
 
 
 
 

     3.3 Описание исходных  данных

 

     Исходными данными являются аргументы х  и значения у таблично заданной функции.

     3.4 Описание результатов  программы

 

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

     3.5 Тестирование программы

 

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

     Этап 1. Выберем функции, для которых удобен в применении метод наименьших квадратов для их аппроксимации.

     

     Рисунок 7. – Первая функция 
 
 
 
 
 

     

     Рисунок 8. – Вторая функция

     

     Рисунок 9. –Третья функция

     Этап 2. Записываем значения в таблицу в диалоговом окне и строим график функции

     Рисунок 10. – Значения и график функции №1

     Рисунок 11. – Значения и график  функции  №2 

     Рисунок 12. – Значения и график  функции  №3

     Этап 3. Произведем сглаживание функции и постоим график сглаженной функции.

     Рисунок 13. – Значения и график  сглаженной функции №1

     Рисунок 14. – Значения и график  сглаженной функции №2

     Рисунок 15. – Значения и график  сглаженной функции №3

     Из  рисунков видно, что сглаживание  функции было произведено удачно. Были исследованы разные функции  на различных интервалах, и как  показывает график на всех интервалах программа верно производит сглаживание функции.

    ЗАКЛЮЧЕНИЕ

     В курсовой работе была реализована задача разработки пакета программ сглаживания  функции. Для решения данной задачи использовался многочлен третьей  степени, построенный по пяти последовательным точкам методом наименьших квадратов. Для контроля задания табличных значений функции и вывода значений сглаженной функции использовалось графическое изображение функций. Для облегчения задачи расчет коэффициентов многочлена и значения сглаженной функции производятся в электронных таблицах Microsoft Excel 2007.  В работе предусмотрена защита на  неправильный ввод данных.

     Таким образом, овладение и закрепление  навыков программирования на языке  Object Pascal в инструментальной среде Delphi было достигнуто. 
 
 
 
 
 
 
 
 
 

     ЛИТЕРАТУРА

  1. Бугров  Я.С., Никольский С.М. Высшая математика. Дифференциальное и интегральное исчисление: Учеб. – 3-е изд., испр. – М.: Наука. Гл. ред. Физ.-мат. лит., 1988.-432 с.
  2. Корн Г., Корн Т. Справочник по математике для научных работников и инженеров — М.: Наука, 1970. — С. 575.
  3. Бугров Я.С., Никольский С.М. Высшая математика. Дифференциальные уравнения. Кратные интегралы. Ряды. Функции комплексного переменного: Учебник для вузов. – 3-е изд., испр. – М.: Наука. Гл. ред. физ.-мат. лит., 1989. – 464 с.
  4. Максимов Ю.А. Алгоритмы линейного и дискретного программирования — М.: МИФИ, 1980.

СПИСОК ИНТЕРНЕТ-ИСТОЧНИКОВ

  1. http://ru.wikipedia.org
  2. http://solidbase.karelia.ru/edu/meth_calc/files/09.shtm
  3. http://www.delphi-manual.ru
  4. http://programmersforum.ru/

     Приложение

 

     Исходный код:

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.FileName);

  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].Clear;

chart1.SeriesList[0].Marks.Visible:=false;

chart1.SeriesList.Series[1].Clear;

chart1.SeriesList[1].Marks.Visible:=false;

//строим график функции

  with Chart1 do begin

     Title.Text.Clear;

     Title.Text.Add('Графики функций');

     SeriesList.Series[0].Clear;

     SeriesList.Series[0].Marks.Visible:=False;

     BottomAxis.Title.Caption  := 'значения х';//подписываем X

   LeftAxis.Title.Caption    := 'значения у';//подписываем Y

   Repaint;

      with StringGrid1 do for i:=1 to Rowcount-1 do begin

     SeriesList.Series[0].AddXY(strtofloat(Cells[0,i]),StrToFloat(Cells[1,i]),'');

      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(Application.ExeName)+'function1.xls'; 

  //Создаем объект интерфейса для доступа к серверу COM

  //Создаем OLE сервер MS Excel

  exl:= CreateOleObject('Excel.Application');

      //Открываем книгу и активизирум раб.лист 1

  WorkBook:=exl.Application.Workbooks.Open(fileName);

   Sheet:=WorkBook.Worksheets[1];

   n:= stringgrid1.RowCount-4;

   stringgrid1.Cells[2,1]:=stringgrid1.Cells[1,1];

    stringgrid1.Cells[2,2]:=stringgrid1.Cells[1,2];

    m:=stringgrid1.RowCount-1;

    stringgrid1.Cells[2,m]:=stringgrid1.Cells[1,m];

    stringgrid1.Cells[2,m-1]:=stringgrid1.Cells[1,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]:=StringGrid1.Cells[0,j+k];

          Sheet.cells[j+2,4]:=StringGrid1.Cells[1,j+k];

        end; 

    //Чтение данных из ячеек Excel

     yp[i]:= Sheet.cells[4,11];

     stringgrid1.Cells[2,i+2]:=floattostr(yp[i]);

   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(strtofloat(Cells[0,i]),StrToFloat(Cells[2,i]),'');

     StringGrid1.SetFocus; 

end;

end;

end.


Информация о работе Пакет программ сглаживания функции