Рефераты. Интерполяционный полином Лагранжа

Язык Delphi реализует концепцию объектно-ориентированного программирования. Это означает, что функциональность приложения определяется набором взаимосвязанных задач, каждая из которых становится самостоятельным объектом. У объекта есть свойства (т.е. характеристики, или атрибуты), методы, определяющие его поведение, и события, на которые он реагирует. Одним из наиболее важных понятий объектно-ориентированного программирования является класс. Класс представляет собой дальнейшее развитие концепции типа и объединяет в себе задание не только структуры и размера переменных, но и выполняемых над ним операций. Объекты в программе всегда являются экземплярами того или иного класса.

Все вычисления курсовой программы построены на знании интерполяционного полинома Лагранжа (интерполяционный многочлен в форме Лагранжа). Именно с его помощью вычисляется значение функции при нескольких заданных пользователем значениях аргумента и некоторым другим входным данным. Интерполяционным многочленом называется многочлен  степени не выше n, который в узлах принимает значения .

Условия применения полинома:

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

Теорема:

Пусть заданы узлы , среди которых нет совпадающих и значения  некоторой функции f(x) в этих узлах. Существует один и только один многочлен  степени не выше n, принимающий в узлах  значения . Введем вспомогательные многочлены

Это многочлен степени n, для которого выполняется равенство .

Многочлен  называется полиномом Лагранжа.

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


2.     Характеристики модулей программного средства

2.1.         Связность внутри модулей

Модули 1, 2 и 4 имеют внутреннюю связность временную (части модуля не связаны, но необходимы в один и тот же период работы системы). Третий модуль имеет  тип связности – информативный последовательный, который говорит о том, что выходные данные одной части модуля используются как входные данные другой части модуля. Эта связи присутствует, потому что function Ln (k: Integer): Real;  function Pol ( ): Real; и function Delta ( ): Real; являются входными данными для Procedure TForm3/Button1Click (Sender: Tobject).


2.2.         Сцепление модулей между собой

Модуль 1 сцеплен с модулем 2 по данным (тип сцепления первый, СЦ=1), то есть модуль 1 вызывает модуль 2, входные и выходные параметры – простые элементы данных.

Модуль 3 с модулем 2 сцеплен по содержанию, то есть модуль 3 прямо ссылается на содержание модуля 2. Модуль 3 с первым модулем не сцеплены, так как, хотя они оба сцеплены со вторым модулем, но каждый из них имеет разный тип сцепления, не имеющих ничего общего.

Четвертый модуль, являющийся сведениями о программе связан с модулями 1, 2 и 3 по данным, все три модуля вызывают четвертый.














Заключение

Во время выполнения курсовой работы был разработан программное средство, вычисляющее значение функции по заданному значению аргумента, выполняющегося с помощью средств вычислительной математики. В основе решения задачи, как было описано во второй части курсовой работы лежит вычисление интерполяционным полиномом Лагранжа. Было создано четыре модуля, три из которых являются активными, четвертый («О программе») может быть вызван с любого из трех главных модулей. Три основных модуля предлагают поэтапное выполнение задачи; в первом модуле вводятся начальные данные, во втором заполняется таблица со значениями функций и аргументов (это промежуточные точки, на основании которых и строится полином Лагранжа). Третий модуль является основным, использующим данные из второго и третьего модуля для вычислительного процесса. Интерфейс программы совместим с Windows-интерфейсом благодаря тому, что программа, в которой разрабатывалась курсовая работа, – Delphi7 – предоставляет такую возможность и поддерживает именно Windows-интерфейс. Все пункты курсового задания были выполнены, разработанное программное средство выполняет поставленную перед ним задачу.

Приложение 1. Исходный код программного средства:

unit Unit1;


interface


uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, Menus;


type

  TForm1 = class(TForm)

    Memo1: TMemo;

    Edit1: TEdit;

    Button1: TButton;

    Memo2: TMemo;

    Label1: TLabel;

    MainMenu1: TMainMenu;

    N1: TMenuItem;

    N4: TMenuItem;

    N2: TMenuItem;

    procedure Button1Click(Sender: TObject);

    procedure Edit1KeyPress(Sender: TObject; var Key: Char);

    procedure N2Click(Sender: TObject);

    procedure N4Click(Sender: TObject);


  private

    { Private declarations }

  public

    { Public declarations }

  end;


var

  Form1: TForm1;

  A, k :integer;


implementation


uses Unit2, unit6, Unit3;

{$R *.dfm}


procedure TForm1.N2Click(Sender: TObject);

begin

AboutBox.ShowModal;

end;


procedure TForm1.N4Click(Sender: TObject);

begin

close;

end;


procedure TForm1.Button1Click(Sender: TObject);

begin

 k:=StrToInt(edit1.Text);

 if (k<=3) or (k>30)

 then ShowMessage('Не верно задано значение')

 else

  begin

 k:=StrToInt(edit1.Text);

 Form2.StringGrid1.ColCount:=(k+1);

 Form2.visible:=true;

 Form1.visible:=false;

  end;

  Form2.StringGrid1.Cells[0,0]:='X';

  Form2.StringGrid1.Cells[0,1]:='Y';

end;


procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

if not (key in ['0'..'9']) then key:=#0;

end;


end.

­­­­­­­­­­­­­­­­­­­­­­                                                                                                                      _

 

unit Unit2;


interface


uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, Grids, Menus;


type

  TForm2 = class(TForm)

    Label3: TLabel;

    Button1: TButton;

    Label5: TLabel;

    MainMenu1: TMainMenu;

    N1: TMenuItem;

    N4: TMenuItem;

    N2: TMenuItem;

    StringGrid1: TStringGrid;

    Label1: TLabel;

    Button2: TButton;

    procedure Button1OnClick(Sender: TObject);

    procedure Button2OnClick(Sender: TObject);

    procedure N4Click(Sender: TObject);

    procedure N2Click(Sender: TObject);

    procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);


  private

   { Private declarations }

  public

    { Public declarations }

  end;


var

  Form2: TForm2;

  I, J: Integer;


implementation


uses Unit1, Unit6, Unit3;


{$R *.dfm}


procedure TForm2.N4Click(Sender: TObject);

begin

close;

Form1.Close;

end;


procedure TForm2.Button1OnClick(Sender: TObject);

begin

Form3.visible:=true;

Form2.visible:=false;

end;


procedure TForm2.Button2OnClick(Sender: TObject);

begin

Form1.visible:=true;

Form2.visible:=false;

end;


procedure TForm2.N2Click(Sender: TObject);

begin

AboutBox.ShowModal;

end;


procedure TForm2.StringGrid1KeyPress(Sender: TObject; var Key: Char);

begin

if not (key in ['0'..'9', '.']) then key:=#0;

end;

                               

end.



unit unit3;


interface


uses

  Windows, Math, Messages, SysUtils, Variants,

  Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, Menus, ComCtrls;


type

  TForm3 = class(TForm)

    Label2: TLabel;

    Edit1: TEdit;

    Memo1: TMemo;

    Edit3: TEdit;

    Label1: TLabel;

    MainMenu1: TMainMenu;

    N1: TMenuItem;

    N4: TMenuItem;

    N7: TMenuItem;

    Button1: TButton;

    Button2: TButton;

    Button3: TButton;

    Label3: TLabel;

    Label4: TLabel;

    Label5: TLabel;

    Edit2: TEdit;

    procedure Edit1KeyPress(Sender: TObject; var Key: Char );

    procedure N4Click(Sender: TObject);

    procedure N7Click(Sender: TObject);

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure Button3Click(Sender: TObject);


  private

    { Private declarations tion }

  public

    { Public declarations }

  end;


var

 Form3: TForm3;

 i, j, A, k: Integer;

 Y, X: array [1..30] of Extended;

 t, P, Dl: Real;


implementation


uses Unit1, Unit2, Unit6;


{$R *.dfm}


procedure TForm3.Edit1KeyPress(Sender: TObject; var Key: Char); //    Integer

begin

if not(key in ['0'..'9']) then  Key:=#0;

end;


procedure TForm3.N4Click(Sender: TObject);

begin

Close;

end;


procedure TForm3.N7Click(Sender: TObject);

begin

AboutBox.ShowModal;

end;


function Ln(k: integer): Real;

 var Proizved1, Proizved2: Real;

begin

 t:=StrToFloat(Form3.Edit1.Text);

 i:=1;

 Proizved1:=1;

 Proizved2:=1;

 repeat

 if k<>i then begin

 Proizved1:=Proizved1*(t-x[i]);

 Proizved2:=Proizved2*(x[k]-x[i]);

 end;

 i:=i+1;

 until i>A;

 Ln:=Proizved1/Proizved2;

 end;


function Pol( ): Real;

 var

 Sum: Real;

 i: Integer;

begin

 i:=1;

 Sum:=0;

 repeat

 Sum:=Ln(i)*Y[i]+Sum;

 i:=i+1;

 until i>A;

 Pol:=Sum;

end;


function Delta( ): Real;

 var

 Sum: Real;

 i: Integer;

begin

 i:=1;

 Sum:=0;

 repeat

 Sum:=ABS(Ln(i))*0.0002+Sum;

 i:=i+1;

 until i>A;

 Delta:=Sum;

end;


procedure TForm3.Button1Click(Sender: TObject);

 var

 i: Integer;

 S: real;

 begin

 A:=StrToInt(Form1.Edit1.Text);

 S:=0;

 for i:=1  to A do begin

 X[i]:=StrToFloat(Form2.StringGrid1.Cells[i,0]);

 Y[i]:=StrToFloat(Form2.StringGrid1.Cells[i,1]);

 end;

 P:=Pol();

 Dl:=Delta();

 for i:=1 to A do S:=S+Ln(i);

 ShowMessage(FloatToStr(S));

 Form3.Edit3.Text:=FloatToStr(P);

 Form3.Edit2.Text:=FloatToStr(Dl);

 end;


procedure TForm3.Button2Click(Sender: TObject);

begin

Form3.visible:=false;

Form2.visible:=true;

end;


procedure TForm3.Button3Click(Sender: TObject);

begin

Close;

Form2.Close;

Form1.Close;

end;


end.



unit Unit6;  //AboutBox        


interface


uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,

  Buttons, ExtCtrls;


type

  TAboutBox = class(TForm)

    Panel1: TPanel;

    ProductName: TLabel;

    Version: TLabel;

    Copyright: TLabel;

    Comments: TLabel;

    Image1: TImage;

    BitBtn1: TBitBtn;

  private

    { Private declarations }

  public

    { Public declarations }

  end;


var

  AboutBox: TAboutBox;


implementation

{$R *.dfm}


end.








































Приложение 2. Блок-схема программного средства:


Приложение 3. Блок-схема алгоритма вычисления (третий модуль)

 











Приложение 4. Тесты – наборы проверочных данных – для проверки правильности работы программы.

Первый проверочный набор.

В первом открывшемся окне, в пустое поле вводим цифру 6.

Во втором открывшемся окне, представленную таблицу заполняем согласно представленным ниже данным.

X

1

2

3

4

5

6

Y

7

8

9

7

8

9

В третьем окне вводим: Х=13, и должны получить результат Y= –10 442.

Эти результаты получились из приведенных ниже расчетов:

Результатом должно стать число – 10 442.

Второй проверочный набор.

Второй проверочный набор является более простым вариантом, не требующим математического подтверждения. Он представляет собой аргументы и их квадраты.

В первом окне вводим число 4.

Во втором вводим в строчку Х числа 1, 2, 4, 5, а в строчку Y числа 1, 4, 16, 25, являющиеся квадратами этих аргументов. Этот набор данных представлен в таблице ниже:

X

1

2

4

5

Y

1

4

16

25

Тогда в третьем окошке вводим любое число, квадрат которого Вам известен, например, число 3, и в окошке «Результаты» должны получить число 9, в окошке «Погрешность вычисления» получаем погрешность, которая появляется при вычислении функции данным методом (интерполяционным полиномом Лагранжа). Можно взять и любое другое число.




















Список использованных источников

1. Фокс Дж. Программное обеспечение и его разработка. М.:Мир, 1985. - 368 с.

2. Лисков Б., Гатэг Дж. Использование абстракций и спецификаций при разработке программ: Пер. с англ. - М.: Мир, 1999. - 424 с.

3.      Иванов А.Г., Карпова А.В., Семик В.П., Филинов Ю.Е. Объектно-ориентированная среда программирования. Системы и средства информатики. Вып.2. М.: Наука, 1991.

4.      Программирование. Специальный выпуск по объектно-ориентированному программированию. № 6, 1990.

5.      Объектно-ориентированный подход технологии программирования/ Иванов А.Г., Пятницкий А.А, Филинов Ю.Е. – СПб.: Питер, 2003. – 443 с.: ил.

6.      Макаров А.А. Лукашин Ю.П. Объектно-ориентированный подход в программировании. – М.: Финансы и статистика, 2000. – 356 с.








Страницы: 1, 2, 3, 4, 5



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.