Задание: Вычислить значения многочлена Лагранжа, аппроксимирующего функцию F(x), заданную своими значениями yi=F(xi), i:=0..n. Вычисления проводить при x=xi, i=0,…,n и при x= (xi + xi+1)/2, i=0,…,n-1.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus;
type
TForm1 = class(TForm)
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
X_i: array [0..100] of real;
Y_i: array [0..100] of real;
col: integer;
implementation
{$R *.dfm}
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure draw();
var x1: integer;
y1: real;
q: real;
i,j: integer;
begin
form1.Canvas.MoveTo(0,0);
for x1:=0 to form1.Width do
begin y1:=0;
for i:=0 to col-1 do
begin q:=1;
for j:=0 to col-1 do
begin
if i<>j then
q:=q*(x1-X_i[j])/(X_i[i]-X_i[j]);
end;
y1:=y1+y_i[i]*q;
end;
form1.Canvas.LineTo(x1,round(y1));
end;
end;
begin
Canvas.Rectangle(0,0,Form1.Width,Form1.Height);
form1.Canvas.Ellipse(X-2,Y-2,X+2,Y+2);
X_i[col]:=X;
Y_i[col]:=Y;
inc(col);
draw;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
col:=0;
end;
end.
Похожие записи
No user прокомментировали сообщение
Оставить комментарий