Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.28;
Скачать: CL | DM;

Вниз

квадратичная и линейная интерполяции   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.017 c
3-92866
Novishok
2002-11-07 13:59
2002.11.28
Секс!!!


6-93179
White_1
2002-10-01 16:47
2002.11.28
Помогите пожалуйста с NMUDP


6-93156
Граф
2002-09-28 04:43
2002.11.28
запароленные ресурсы локальной сети


6-93159
ketorol
2002-10-02 10:06
2002.11.28
помогите очень интересно и нужно


4-93295
Карлсон
2002-10-16 18:57
2002.11.28
Закрытие доступа к компьютеру.