Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет Расчетка ВЫЧМАТ.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
3.19 Mб
Скачать

3.8 Дифференцирование многочленами

3.8.1 Листинг

unit DifNiut;

interface

uses

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

Dialogs, StdCtrls, Grids, ExtCtrls, jpeg;

type

TForm1 = class(TForm)

StringGrid1: TStringGrid;

Edit1: TEdit;

Image1: TImage;

Button2: TButton;

Button1: TButton;

Memo1: TMemo;

Label3: TLabel;

Edit2: TEdit;

Button3: TButton;

Panel1: TPanel;

Label5: TLabel;

Edit4: TEdit;

Button4: TButton;

Label6: TLabel;

Button5: TButton;

lbl7: TLabel;

bvl1: TBevel;

lbl8: TLabel;

lbl10: TLabel;

lbl1: TLabel;

lbl2: TLabel;

lbl3: TLabel;

lbl4: TLabel;

lbl5: TLabel;

lbl6: TLabel;

Image2: TImage;

lbl9: TLabel;

procedure Button2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Image1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure Button5Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

type

Mas=array[1..100] of Extended;

var

Form1: TForm1;

Xmax,Xmin,Ymax,Ymin,Fx:extended;

L,a,y:Mas;

i,j,n,k,kk: integer;

x,yy:real;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin

n:=StrToInt(Edit1.text);

StringGrid1.ColCount:=n;

StringGrid1.Width:=(n)*67;

StringGrid1.Visible:=true;

end;

function PH(x: Extended; a,y:Mas ; var Xmax,Xmin,Ymax,Ymin:extended):Extended;

var

Sum, Mng, Pn,Pr: extended;

begin

Pn:=0;

For i:=1 to n do

begin

Fx:=1;

Sum:=0;

for k:=1 to i do

begin

for j:=1 to i do

begin

if k<>j then

Fx:=1/(a[k]-a[j])*Fx;

end;

Fx:=Fx*y[k];

Sum:=Sum+Fx;

Fx:=1;

end;

Pr:=1;

if i>1 then

for k:=1 to i-1 do

Pr:=Pr*(x-a[k]);

sum:=sum*pr;

Pn:=Pn+Sum;

end;

PH:=Pn;

Xmax:=10;

Xmin:=-10;

Ymax:=10;

Ymin:=-10;

end;

procedure TForm1.Button2Click(Sender: TObject);

var x,yy:real;

PX,PY:integer;

i,Apx,Ypx: Integer;

begin

k:=0;

n:=StrToInt(Edit1.text);

Xmax:=10;

Xmin:=-10;

Ymax:=10;

Ymin:=-10;

for j:=1 to n do

begin

a[j]:=StrToFloat(StringGrid1.Cells[j-1,0]);

y[j]:=StrToFloat(StringGrid1.Cells[j-1,1])

end;

for j:=1 to n do

begin

Apx:=trunc((a[j]-Xmin)*Image1.Width/(Xmax-Xmin));

Ypx:=trunc(Image1.Height-(y[j]-Ymin)*Image1.height/(Ymax-Ymin));

Image1.Canvas.Pixels[Apx,Ypx]:=clBlack;

end;

image1.Canvas.MoveTo(0,Image1.height div 2);

image1.Canvas.LineTo(Image1.width,Image1.height div 2);

image1.Canvas.MoveTo(Image1.width div 2,0);

image1.Canvas.LineTo(Image1.width div 2,Image1.height);

x:=Xmin+0*(Xmax-Xmin)/Image1.Width;

yy:=(PH(x,a,y,Xmax,Xmin,Ymax,Ymin));

image1.Canvas.MoveTo(0,trunc(Image1.Height-(yy-Ymin)*Image1.height/(Ymax-Ymin)));

for PX:=0 to Image1.Width do

begin

x:=Xmin+PX*(Xmax-Xmin)/Image1.Width;

yy:=(PH(x,a,y,Xmax,Xmin,Ymax,Ymin));

PY:=trunc(Image1.Height-(yy-Ymin)*Image1.height/(Ymax-Ymin));

Image1.Canvas.Pen.Color:=clRed;

Image1.Canvas.LineTo(PX,PY);

end;

end;

function Pr1(x,h:Extended):Extended;

Var

Pr:extended;

begin

Pr:=(PH(x+h,a,y,Xmax,Xmin,Ymax,Ymin)-PH(x,a,y,Xmax,Xmin,Ymax,Ymin))/h;

Pr1:=pr;

end;

function Pr2(x,h:Extended):Extended;

Var

Pr:extended;

begin

Pr:=(Pr1(x+h,h)-Pr1(x,h))/h;

Pr2:=pr;

end;

function Pr3(x,h:Extended):Extended;

Var

Pr:extended;

begin

Pr:=(Pr2(x+h,h)-Pr2(x,h))/h;

Pr3:=pr;

end;

function Pr4(x,h:Extended):Extended;

Var

Pr:extended;

begin

Pr:=(Pr3(x+h,h)-Pr3(x,h))/h;

Pr4:=pr;

end;

procedure TForm1.Button3Click(Sender: TObject);

Var

Px,Py: integer;

begin

x:=StrToFloat(Edit2.text);

yy:=(PH(x,a,y,Xmax,Xmin,Ymax,Ymin));

Memo1.Lines.add('Значение функции в точке '+FloatToStr(x)+' = '+FloatToStr(yy));

px:=round(Image1.Width/2+x*Image1.width/(Xmax-Xmin));

py:=round(Image1.Height/2-yy*Image1.height/(Ymax-Ymin));

image1.Canvas.Ellipse(px-5, py-5, px+5, py+5);

end;

procedure TForm1.Button4Click(Sender: TObject);

Var

Pr,Sum:Extended;

p:integer;

begin

memo1.text:='';

Sum:=0;

k:=1;

for i:=n-1 downto 2 do

k:=k*(i);

for p:=1 to n do

begin

Pr:=1;

for i:=1 to n do

begin

if i<>p then

Pr:=Pr/(a[p]-a[i]);

end;

Sum:=Sum+Pr*k*y[p];

end;

Form1.Memo1.Lines.add('Производная 1-ого порядка = '+FloatToStr(Pr1(StrToFloat(Edit4.text),0.1)));

Form1.Memo1.Lines.add('Производная 2-ого порядка = '+FloatToStr(Pr2(StrToFloat(Edit4.text),0.1)));

Form1.Memo1.Lines.add('Производная 3-ого порядка = '+FloatToStr(Pr3(StrToFloat(Edit4.text),0.1)));

Form1.Memo1.Lines.add('Производная 4-ого порядка = '+FloatToStr(Pr4(StrToFloat(Edit4.text),0.1)));

Form1.Memo1.Lines.add('Производная '+FloatToStr(n-1)+' ого порядка Многочлена степени :'+FloatToStr(n-1)+' ='+FloatToStr(sum));

end;

procedure TForm1.Image1Click(Sender: TObject);

var

MyMouse: TMouse;

px,py:integer;

yy,xx: Extended;

begin

if Edit1.Text='' then

n:=0

else

n:=StrToInt(Edit1.text);

n:=n+1;

StringGrid1.ColCount:=n;

StringGrid1.Width:=(n)*67;

StringGrid1.Visible:=true;

Edit1.text:=IntToStr(n);

Xmax:=10;

Xmin:=-10;

Ymax:=10;

Ymin:=-10;

px:=ScreenToClient(MyMouse.CursorPos).x-image1.left;

py:=(ScreenToClient(MyMouse.CursorPos).y-image1.top);

{ Memo1.Lines.add(inttostr(px) + 'Х ' + inttostr(py)); }

yy:=(Ymax-(py*((Ymax-Ymin)/image1.height)));

xx:=(Xmin+px*(Ymax-Ymin)/image1.width);

StringGrid1.Cells[n-1,0]:=FloatToStrF(xx,ffFixed,4,2);

StringGrid1.Cells[n-1,1]:=FloatToStrF(yy,ffFixed,4,2);

Memo1.Lines.add('x: '+FloatToStrF(xx,ffFixed,4,2)+' y:'+FloatToStrF(yy,ffFixed,4,2));

Image1.Canvas.Ellipse(px-2,py-2,px+2,py+2);

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

image1.Canvas.MoveTo(0,Image1.height div 2);

image1.Canvas.LineTo(Image1.width,Image1.height div 2);

image1.Canvas.MoveTo(Image1.width div 2,0);

image1.Canvas.LineTo(Image1.width div 2,Image1.height);

Memo1.Text:='';

end;

procedure TForm1.Button5Click(Sender: TObject);

begin

Edit1.text:='';

For i:=0 to StringGrid1.ColCount-1 do

StringGrid1.Cols[i].Clear;

Image1.Picture:= nil;

StringGrid1.Width:=StringGrid1.DefaultColWidth;

i:=0;

image1.Canvas.MoveTo(0,Image1.height div 2);

image1.Canvas.LineTo(Image1.width,Image1.height div 2);

image1.Canvas.MoveTo(Image1.width div 2,0);

image1.Canvas.LineTo(Image1.width div 2,Image1.height);

Memo1.Clear;

StringGrid1.ColCount:=0;

end;

end.