
- •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. Интерполяционный многочлен
3.5.1 Интерполяционный многочлен Лагранжа
3.5.1.1 Листинг
// кнопка найти после графика
unit Unit1;
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;
Label1: TLabel;
Memo1: TMemo;
Label2: TLabel;
Edit2: TEdit;
Button3: TButton;
lbl7: TLabel;
bvl1: TBevel;
img2: TImage;
lbl8: 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 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:extended;
L,a,y:Mas;
i,j,n: integer;
x,yy:real;
PX,PY:integer;
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;
end;
function Ln(x: Extended; a,y:Mas ; {передаём масштаб}var Xmax,Xmin,Ymax,Ymin:extended):Extended;
var
Sum, Mng: extended;
begin
// формула Лагранжа
Sum:=0;
for i:=1 to n do
begin
Mng:=1;
for j:=1 to n do
if i<>j then
begin
Mng:=((x-a[j])/(a[i]-a[j]))*Mng;
end;
Sum:=Mng*y[i]+Sum;
end;
Ln:=Sum;
Xmax:=10;
Xmin:=-10;
Ymax:=10;
Ymin:=-10;
end;
procedure TForm1.Button2Click(Sender: TObject);
{
var x,yy:real;
PX,PY:integer; }
begin
Image1.Picture:= nil;
n:=StrToInt(Edit1.text);
for j:=1 to n do
begin
a[j]:=StrToFloat(StringGrid1.Cells[j-1,0]);
y[j]:=StrToFloat(StringGrid1.Cells[j-1,1])
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:=(Ln(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:=(Ln(x,a,y,Xmax,Xmin,Ymax,Ymin));
PY:=trunc(Image1.Height-(yy-Ymin)*Image1.height/(Ymax-Ymin));
Image1.Canvas.Pen.Color:=clNavy;
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:=(Ln(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 begin
Edit2.Text:=FloatToStrF(xx,ffFixed,4,2);
end;
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.