Всем привет! Решил заняться интерполяцией, да не получается. Суть задачи состоит в том, чтобы полученные точки (у меня они задаются вручную) интерполировать функцией с переменной степенью. Т.е. чтобы можно было задавать степень функции. Я попробовал реализовать метод лагранжа, но не получается. Программа запускается, но при расчетах выдает ошибку:
Invalid floating point evaluation и показывает на строчку расчета произведений. Помогите пожалуйста, мне не обязательно интерполировать методом лагранжа, если есть другие варианты не скупитесь плз. Вот код:
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Series, TeEngine, ExtCtrls, TeeProcs, Chart;
type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
Chart1: TChart;
Series1: TLineSeries;
Series2: TPointSeries;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
x: array [1..100] of real;
y: array [1..100] of real;
L: array [1..100] of real;
n,j,i:integer;
t,q:real;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
const t='Введите значение';
begin
n:=strtoint(edit1.text);
for i:=1 to n do //Ввод точек через окошко
begin
x[i]:=StrToFloat(InputBox('Ввод Х'+IntToStr(i),t,'0'));
y[i]:=StrToFloat(InputBox('Ввод Y'+IntToStr(i),t,'0'));
series2.AddXY(x[i],y[i]);
end;
end;
procedure TForm1.Button2Click(Sender: TObject); // Сами расчеты
begin
for i:=1 to n do begin
L[i]:=1;
end;
FOR j:=1 TO n DO begin
IF i<>j THEN
begin
L[i]:=L[i]*(t-x[i])/(x[j]-x[i]); //Произведения, формула лагранжа
end;
end;
for i:=1 to n do begin
q:=0;
q:=q+L[i]*y[i]; // Суммирование произведений
end;
t:=-4; while t<4+0.1 do // График
begin
series1.AddXY(t,q);
t:=t+0.1;
end;
end;
end.