Сглаживание полиномами экспериментальных точек
От: peterbes Россия  
Дата: 26.08.03 08:54
Оценка:
Может быть кто подскажет, где мне можно найти реализованные на С (или на Pascal) алгоритмы сглаживания точек (2D, размер массива >> 10000 точек) полиномами различной степени.

Спасибо.
Re: Сглаживание полиномами экспериментальных точек
От: camel Россия  
Дата: 26.08.03 09:56
Оценка:
А самому написать слабо? Берешь контрольные точки строишь через них полином нужной степени получаешь сглаживание нужной степени. Делов то.
Re[2]: Сглаживание полиномами экспериментальных точек
От: camel Россия  
Дата: 26.08.03 10:01
Оценка:
C>А самому написать слабо? Берешь контрольные точки строишь через них полином нужной степени получаешь сглаживание нужной степени. Делов то.
Погаричился наверно не оценил кол-во точек.... Возьми книжку по численным методам, но в принципе на хорошей машинке можно просто решить численно сответствуюшее число диффиренциальных уравнений, правда если нужно гладкость второго порядка то тут хуже уравнения будут уже не линейнми =(((
Re: Сглаживание полиномами экспериментальных точек
От: LameFox Россия http://vectools.com
Дата: 26.08.03 11:30
Оценка:
Здравствуйте, peterbes, Вы писали:

P>Может быть кто подскажет, где мне можно найти реализованные на С (или на Pascal) алгоритмы сглаживания точек (2D, размер массива >> 10000 точек) полиномами различной степени.


Можно расчитать коэффициенты линии корреляции 2го или 3го порядков.
Это из мат статистики.

//
// Calculated parabolic regression coefficients for vx,vy vectors and vi index.
// @vx — vector for x coordinates
// @vy — vector for y coordinates
// @vn — index for vx and vy vectors
//
procedure CalcParabolicCorrelations(var cx,cy, bx,by, ax,ay: extended; vx,vy: array of extended; v0, v1: TIndex);
var M: array [0..3, 0..4] of extended;

//
// Решаем линейное уравнение
//
procedure CalcLinearForM(var a,b,c: extended);
var ii,jj,tt: TIndex;
tmp: extended;
begin
ii:=0;
repeat
tmp:=M[ii,ii];
if tmp<>0 then begin
for jj:=0 to 3 do
M[ii,jj]:=M[ii,jj]/tmp;
for tt:=0 to 2 do begin
tmp:=M[tt,ii];
if tt<>ii then for jj:=0 to 3 do
M[tt,jj]:=M[tt,jj] — M[ii,jj]*tmp;
end{for tt};
inc(ii);
end{if tmp} else inc(ii);
until ii=3;
a:=M[2,3];
b:=M[1,3];
c:=M[0,3];
end;

var ii: TIndex;
ex1, ex2, ex3, ex4, exy, ex2y,
ey1, ey2, ey3, ey4, eyx, ey2x: extended;
ax0, ax1, ax2,
ay0, ay1, ay2: extended;

begin
ex1:=0; ex2:=0; ex3:=0; ex4:=0; exy:=0; ex2y:=0;
ey1:=0; ey2:=0; ey3:=0; ey4:=0; eyx:=0; ey2x:=0;


//
// Считаем необходимые значения для расчета коэфф. параболы
//
for ii:=v0 to v1-1 do begin
ex1:=ex1 + vx[ii];
ey1:=ey1 + vy[ii];

ex2:=ex2 + sqr(vx[ii]);
ey2:=ey2 + sqr(vy[ii]);

ex3:=ex3 + sqr(vx[ii])*vx[ii];
ey3:=ey3 + sqr(vy[ii])*vy[ii];

ex4:=ex4 + sqr(vx[ii])*sqr(vx[ii]);
ey4:=ey4 + sqr(vy[ii])*sqr(vy[ii]);

exy:=exy + vx[ii]*vy[ii];
eyx:=eyx + vy[ii]*vx[ii];

ex2y:=ex2y + sqr(vx[ii])*vy[ii];
ey2x:=ey2x + sqr(vy[ii])*vx[ii];

end;


//
// Решаем линейное уравнение
//
M[0,0]:=v1-v0; M[0,1]:=ex1; M[0,2]:=ex2; M[0,3]:=ey1 ;
M[1,0]:=ex1 ; M[1,1]:=ex2; M[1,2]:=ex3; M[1,3]:=exy ;
M[2,0]:=ex2 ; M[2,1]:=ex3; M[2,2]:=ex4; M[2,3]:=ex2y;

CalcLinearForM(ax,bx,cx);

M[0,0]:=v1-v0; M[0,1]:=ey1; M[0,2]:=ey2; M[0,3]:=ex1 ;
M[1,0]:=ey1 ; M[1,1]:=ey2; M[1,2]:=ey3; M[1,3]:=eyx ;
M[2,0]:=ey2 ; M[2,1]:=ey3; M[2,2]:=ey4; M[2,3]:=ey2x;

CalcLinearForM(ay,by,cy);

end;
Re[2]: Сглаживание полиномами экспериментальных точек
От: peterbes Россия  
Дата: 26.08.03 13:36
Оценка:
Спасибо, ребята. Нашел МНК для полиномов, если кому нужна ссылка http://plasma-gate.weizmann.ac.il/Grace/

В исходниках программы есть процедуры вычисления всевозможных трендов
Re: Сглаживание полиномами экспериментальных точек
От: SystemsAnalyst Россия  
Дата: 11.09.03 21:04
Оценка:
Здравствуйте, peterbes, Вы писали:

P>Может быть кто подскажет, где мне можно найти реализованные на С (или на Pascal) алгоритмы сглаживания точек (2D, размер массива >> 10000 точек) полиномами различной степени.


Есть еще один метод — непараметрическое сглаживание. Результат намного качественнее.
Re: Сглаживание полиномами экспериментальных точек
От: klovetski Россия  
Дата: 05.10.03 20:05
Оценка:
Здравствуйте, peterbes, Вы писали:

P>Может быть кто подскажет, где мне можно найти реализованные на С (или на Pascal) алгоритмы сглаживания точек (2D, размер массива >> 10000 точек) полиномами различной степени.



Отличная книга по численным методам:Numerical Recipes in C book On-Line
Книга в PDF: http://www.library.cornell.edu/nr/bookcpdf.html

Sources (Паскаль): ftp://garbo.uwasa.fi/pc/turbopas/nrpas13.zip

Константин
Re: Сглаживание полиномами экспериментальных точек
От: Micker  
Дата: 06.10.03 07:06
Оценка:
Здравствуйте, peterbes, Вы писали:

P>Может быть кто подскажет, где мне можно найти реализованные на С (или на Pascal) алгоритмы сглаживания точек (2D, размер массива >> 10000 точек) полиномами различной степени.


P>Спасибо.

Не знаю, то ли что тебе нужно, но...

Посмотри в сторону IPP (http://www.intel.com/software/products/perflib/index.htm), её мона попробовать бесплатно, там есть часть, связанная с Signal Processing.
Если будешь всё это сглаживание крутить на интелёнке, то так есть возможность просто использовать всякий MMX- типа ускоркение и всё такое.
Жизнь, как игра —
идея паршивая,
графика обалденная...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.