Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Аппроксимация / unit Unit1-fin

.doc
Скачиваний:
25
Добавлен:
15.06.2014
Размер:
38.91 Кб
Скачать

unit Polinom_Hytona;

interface

type znach=array[1..50] of extended;

function Hyton(t:extended; x,y:znach; n:integer):extended;

implementation

function Hyton;

var i,k:integer;

p,z:extended;

rr:znach;

begin

for i:=1 to n do rr[i]:=y[i];

p:=1;

z:=y[1];

for k:=1 to n-1 do

begin

for i:=1 to n-k do

rr[i]:=(rr[i]-rr[i+1])/(x[i]-x[i+k]);

p:=p*(t-x[k]);

z:=z+p*rr[1];

end;

result:=z;

end;

end.

unit Gauss_Krist_3;

interface

type fun=function(x:extended):extended;

function gauss_3(a,b:extended; n:integer; f:fun):extended;

implementation

function gauss_3;

const c=0.7745966692;

var x,h,sum:extended;

k:integer;

begin

h:=(b-a)/n;

x:=a+h/2; sum:=0;

for k:=1 to n do

begin

sum:=sum+f(x-h/2*c)+f(x+h/2*c)+1.6*f(x);

x:=x+h;

end;

result:=5*h*sum/18;

end;

end.

unit Unit1;

interface

uses

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

Dialogs, Buttons, StdCtrls, ExtCtrls, TeeProcs, TeEngine, Chart,

Gauss_Krist_3,Polinom_Hytona, Series;

type

TForm1 = class(TForm)

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Edit4: TEdit;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Chart1: TChart;

Button1: TButton;

Button2: TButton;

Label4: TLabel;

Label5: TLabel;

BitBtn1: TBitBtn;

Series1: TLineSeries;

Series2: TLineSeries;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

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

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

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

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

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

function f(x:extended):extended;

begin

f:=exp(x)/(x*x*x)-(sin(x)*sin(x)*sin(x));

end;

procedure TForm1.Button1Click(Sender: TObject);//Аппроксимация

var a,b,h,t:extended;

n,m,k:integer;

x,y:znach;

label vvod;

begin

if (Length(Edit1.Text)=0) or (Length(Edit2.Text)=0) or

(Length(Edit3.Text)=0) or (Length(Edit4.Text)=0) then

begin

ShowMessage('Ошибка ввода данных!'+#13+'Все поля должны быть заполнены!');

goto vvod;

end

else

a:=StrToFloat(Edit1.Text);

b:=StrToFloat(Edit2.Text);

n:=StrToInt(Edit3.Text);

m:=StrToInt(Edit4.Text);

if (n>50) or (n<2) then

begin

ShowMessage('Количество узловых точек должно быть не менее 2 и не более 50');

goto vvod;

end

else

if (m>2147483647) or (m<2) then

begin

ShowMessage('Количество шагов должно быть не менее 2 и не более 2147483647');

goto vvod;

end

else

h:=(b-a)/(n-1);

for k:=1 to n do

begin

x[k]:=a+(k-1)*h;

y[k]:=f(x[k]);

end;

series1.Clear; series2.Clear;

for k:=0 to m do

begin

t:=a+k*(b-a)/m;

series1.AddXY(t,f(t),'',clred);

series2.AddXY(t,Hyton(t,x,y,n),'',clgreen);

end;

Button2.SetFocus;

vvod:

end;

procedure TForm1.Button2Click(Sender: TObject);//Интегрирование

var a,b:extended;

m:integer;

label vvod;

begin

if (Length(Edit1.Text)=0) or (Length(Edit2.Text)=0) or

(Length(Edit4.Text)=0) then

begin

ShowMessage('Ошибка ввода данных!'+#13+'Поля должны быть заполнены!');

goto vvod;

end

else

a:=StrToFloat(edit1.Text);

b:=StrToFloat(edit2.Text);

m:=StrToInt(edit4.Text);

if (m>2147483647) or (m<2) then

begin

ShowMessage('Количество шагов должно быть не менее 2 и не более 2147483647');

goto vvod;

end

else

label5.Caption:='Интеграл= '+FloatToStrf(gauss_3(a,b,m,f),fffixed,7,7);

vvod:

end;

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

begin

case key of

'0'..'9':;

#44:;

#8:;

#45:;

#13:Edit2.SetFocus;

else ShowMessage('Вводить можно только цифры,запятую и минус!');

Key:=chr(0);

end;

end;

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

begin

case key of

'0'..'9':;

#8:;

#44:;

#45:;

#13:Edit3.SetFocus;

else ShowMessage('Вводить можно только цифры,запятую и минус!');

Key:=chr(0);

end;

end;

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

begin

case key of

'0'..'9':;

#8:;

#13:Edit4.SetFocus;

else ShowMessage('Вводить можно только цифры!');

Key:=chr(0);

end;

end;

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

begin

case key of

'0'..'9':;

#8:;

#13:Button1.SetFocus;

else ShowMessage('Вводить можно только цифры!');

Key:=chr(0);

end;

end;

end.

5

Соседние файлы в папке Аппроксимация