Форум: "Потрепаться";
Текущий архив: 2002.11.28;
Скачать: [xml.tar.bz2];
Внизквадратичная и линейная интерполяции Найти похожие ветки
← →
madcap (2002-11-10 02:44) [0]Помогите пожалуйста, нужны алгоритмы квадратичной и линейной интерполяции.
← →
MBo (2002-11-10 06:52) [1]Линейная - пусть задано две точки (X1,Y1) (X2,Y2)
Через них проходит прямая с уравнением
Y:=aX+b
Подставь значения координат обоих точек, получишь 2 уравнения, из которых найдешь a и b. Аналогично можно сделать и для параболы, решив систему 3-х уравнений Y:=aX^2+bX+c, но проще использовать другой метод. Учти, что для расчета большого количества точек в промежутке стоит предварительно рассчитать неизменные на нем величины (разности)
function ParInt(x0,x1,x2,y0,y1,y2,x:double):double;
var dx0,dx1,dx2,dx10,dx20,dx21:double;
begin
//По Лагранжу
dx0:=x-x0; dx1:=x-x1; dx2:=x-x2;
dx10:=x1-x0; dx20:=x2-x0; dx21:=x2-x1;
Result:=y0*dx1*dx2/(dx10*dx20)+y1*dx0*dx2/(-dx10*dx21)+y2*dx0*dx1/(dx20*dx21);
end;
function LinInt(x0,x1,y0,y1,x:double):double;
begin
Result:=(y0*(x1-x)+y1*(x-x0))/(x1-x0);
end;
← →
SottNick (2002-11-10 08:02) [2]надеюсь, сам разберешься, что куда совать
переделывал из басика в паскаль, поэтому много комментариев
код рабочий, исходные данные - таблица с числами в 2 колонки
результат выводится в Chart1.FastLineSeries2
особенно наглядно, когда туда же (в Chart1) выводятся исходные точки
procedure TForm2.interpolal;//(number_pzs:byte);
type
MyType=record
zap:word;
zap2:real;
end;
var
i,j,strgrdcount,s:integer;
l,f:real;
m:array of MyType;
{label
m1,m2,m3;}
begin
strgrdcount:=stringgrid1.RowCount-1;
SetLength(m,strgrdcount);
FastLineSeries2.Clear;
label1.Caption:="";
Button1.Enabled:=true;
try
for i:=1 to strgrdcount do
begin
m[i-1].zap:=strtoint(stringgrid1.Cells[1,i]);
m[i-1].zap2:=strtofloat(stringgrid1.Cells[2,i]);
end;
for s:=1 to pixels do
begin
f:=0;
for i:=1 to strgrdcount do
begin
j:=1;l:=1;
while true do //new
begin //new
//m3:
if i=j then//if i<>j then goto m1;
inc(j);
//m1:
if j>strgrdcount then break;//goto m2;
l:=l*(s-m[j-1].zap)/(m[i-1].zap-m[j-1].zap);
inc(j);//goto m3;
end; //new
//m2:
l:=l*m[i-1].zap2;
f:=f+l;
end;
tempgrad[s]:=f;
//CurrentDatas.Grad[number_pzs,s]:=f;
end;
SetLength(m,0);
except
SetLength(m,0);
label1.Caption:="Ошибка в таблице";
Button1.Enabled:=false;
exit;
end;
for i:=1 to pixels do
FastLineSeries2.AddXY(i,tempgrad[i],"",clteeColor);
end;
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2002.11.28;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c