
- •1. Постановка задачи
- •2. Формулировка заданий ргр
- •3. Выполнение расчетно-графической работы
- •3.1 Метод Гаусса
- •3.1.1 Листинг
- •3.2 Метод прогонки
- •3.2.1 Листинг
- •3.3 Нелинейное уравнение
- •3.3.1 Листинг
- •3.4 Метод вращения Якоби
- •3.4.1 Листинг
- •3.5. Интерполяционный многочлен
- •3.5.1 Интерполяционный многочлен Лагранжа
- •3.5.1.1 Листинг
- •3.5.2 Интерполяционный многочлен Ньютона
- •3.5.2.1 Листинг
- •3.6 Интерполяция сплайнами
- •3.6.1 Листинг
- •3.7 Метод наименьших квадратов
- •3.7.1 Листинг
- •3.8 Дифференцирование многочленами
- •3.8.1 Листинг
- •3.9 Метод Монте-Карло
- •3.9.1 Листинг
- •3.10 Метод Рунге-Кутты
- •3.10.1 Листинг
- •3.11 Краевая задача
- •3.11.1 Листинг
- •4. Заключение
3.5.2 Интерполяционный многочлен Ньютона
3.5.2.1 Листинг
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, ExtCtrls, jpeg;
type
TForm1 = class(TForm)
Image1: TImage;
lbl9: TLabel;
lbl10: TLabel;
lbl7: TLabel;
bvl1: TBevel;
img2: TImage;
StringGrid1: TStringGrid;
Edit1: TEdit;
Button2: TButton;
Button1: TButton;
Memo1: TMemo;
Edit2: TEdit;
Button3: TButton;
lbl8: TLabel;
lbl1: TLabel;
lbl2: TLabel;
lbl3: TLabel;
lbl4: TLabel;
lbl5: TLabel;
lbl6: TLabel;
Image2: TImage;
lbl11: TLabel;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Image1Click(Sender: TObject);
procedure FormCreate(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: integer;
x,yy:real;
koord: Boolean;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
n:=StrToInt(Edit1.text);
StringGrid1.ColCount:=n;
StringGrid1.Width:=(n)*67;
StringGrid1.Visible:=true;
Button2.Enabled:=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
Image1.Picture:= nil;
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:=clGreen;
Image1.Canvas.LineTo(PX,PY);
end;
button1.Enabled:=False;
//button2.Enabled:=False;
Button3.Enabled:=True;
koord:=True;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
x:=StrToFloat(Edit2.text);
yy:=(PH(x,a,y,Xmax,Xmin,Ymax,Ymin));
Memo1.Lines.add('Значение функции в точке '+FloatToStr(x)+' = '+FloatToStr(yy));
end;
procedure TForm1.Image1Click(Sender: TObject);
var
MyMouse: TMouse;
px,py:integer;
yy,xx: Extended;
begin
if Button2.Enabled=False then Exit;
if Edit1.Text='' then
n:=0
else
n:=StrToInt(Edit1.text);
if koord=False then
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);
if koord=False then begin
StringGrid1.Cells[n-1,0]:=FloatToStrF(xx,ffFixed,4,2);
StringGrid1.Cells[n-1,1]:=FloatToStrF(yy,ffFixed,4,2); end;
if koord=True then Edit2.Text:=FloatToStrF(xx,ffFixed,4,2);
if koord=False then
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);
koord:=False;
end;
end.