Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
1-92970
kofman
2002-11-15 23:08
2002.11.28
Как развернуть свое окно на весь экран если BorderStyle= bsNone?


1-92949
shane54
2002-11-15 17:56
2002.11.28
Вопрос по ADO


14-93217
kull
2002-11-01 16:55
2002.11.28
Есть ли программа для составления конечных автоматов?


3-92926
Fixxxer
2002-11-11 16:40
2002.11.28
DOS error 4


1-93011
dim-
2002-11-18 20:36
2002.11.28
MapInfo





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский