Форум: "Основная";
Текущий архив: 2007.09.30;
Скачать: [xml.tar.bz2];
ВнизАппроксимация данных в дельфи Найти похожие ветки
← →
Andol (2007-07-15 09:35) [0]Добрый день! Мне на работе задали переделать программу из МаtLab в Дельфи.
Для аппроксимации в матлабе есть специальная функция polyfit
**************************************************
Синтаксис:
p = polyfit(x, y, n)
Описание:
Функция p = polyfit(x, y, n) находит коэффициенты полинома p(x) степени n, который аппроксимирует функцию y(x) в смысле метода наименьших квадратов. Выходом является строка p длины n +1, содержащая коэффициенты аппроксимирующего полинома.
***************************************************
Подскажите пожалуйста, как можно сделать аппроксимацию данных в дельфи? И можно ли вообще это сделать??? В качестве коэффицентов полинома p(x) у меня идет матрица KTG (содержит 5 значений в строку), в качестве p(y) - матрица MR (содержит 5 значений в строку), и n=2.
← →
Kolan © (2007-07-15 09:54) [1]> Подскажите пожалуйста, как можно сделать аппроксимацию данных
> в дельфи?
Вот то что ты выше описал(Функция p = polyfit(x, y, n) находит коэффициенты полинома p(x) …) вот это и сделай руками.
← →
Andol (2007-07-15 10:04) [2]Гениально, что нет слов... кинь тогда пожалуйста кусок кода хотя бы, чтобы знать с чего и как начать...
← →
Kolan © (2007-07-15 10:16) [3]> знать с чего и как начать
Начать с того как это вообще делать, т.е. изучить МНК. А дальше будут вопросы задавай.
> Гениально
А ты думал что в языках общего назначения встроены такие спец функции? МатЛаб — это спец инструмент для математиков в отличае от Delphi кототорый явл средой быстрой разработки программ. Их и сравнить нельзя — это разные вещи.
ЗЫ
Кстати ты еще можешь найти в интернете готовый код…
← →
Ricks © (2007-07-17 12:54) [4]Надо действительно сначала почитать МНК. Но если так уж не можешь - то вот тебе кусок кода:
type
TPointA = record
t: single;
x: single;
end;
TSystem4x4 = array [1..4, 1..5] of single;
TVector4 = array [1..4] of single;
var
c_system : TSystem4x4;
c_i : TVector4;
src_pt : array [0..pred(num_pts)] of TPointA =
(
(t: 0.0; x: -60),
(t: 0.5; x: -70),
(t: 1.0; x: -80),
(t: 1.5; x: -88),
(t: 2.0; x: -94),
(t: 2.5; x:-100),
(t: 3.0; x:-103),
(t: 3.5; x:-103),
(t: 4.0; x:-100),
(t: 4.5; x: -94),
(t: 5.0; x: -84),
(t: 5.5; x: -72),
(t: 6.0; x: -60),
(t: 6.5; x: -50),
(t: 7.0; x: -42),
(t: 7.5; x: -36),
(t: 8.0; x: -24),
(t: 8.5; x: -20),
(t: 9.0; x: -20),
(t: 9.5; x: -24),
(t:10.0; x: -30)
);
function pw(v : single; p : integer):single;
var R : single;
u : integer;
begin
R:=1;
if p = 0 then begin
Result:=R;
Exit;
end;
for u:=1 to p do
R:=R * v;
Result:=R;
end;
function SumT_i( p : integer ) : single;
var u : integer;
S : single;
begin
S:=0;
for u:=0 to pred(num_pts) do
S:=S + pw( src_pt[u].t, p );
Result:=S;
end;
function SumX_i( tiP : integer ) : single;
var u : integer;
S : single;
begin
S:=0;
for u:=0 to pred(num_pts) do
S:=S + src_pt[u].x * pw( src_pt[u].t, tiP );
Result:=S;
end;
procedure TMainForm.BuildSystem;
begin
c_system[1, 1]:=num_pts;
c_system[1, 2]:=SumT_i( 1 );
c_system[1, 3]:=SumT_i( 2 );
c_system[1, 4]:=SumT_i( 3 );
c_system[1, 5]:=SumX_i( 0 );
c_system[2, 1]:=SumT_i( 1 );
c_system[2, 2]:=SumT_i( 2 );
c_system[2, 3]:=SumT_i( 3 );
c_system[2, 4]:=SumT_i( 4 );
c_system[2, 5]:=SumX_i( 1 );
c_system[3, 1]:=SumT_i( 2 );
c_system[3, 2]:=SumT_i( 3 );
c_system[3, 3]:=SumT_i( 4 );
c_system[3, 4]:=SumT_i( 5 );
c_system[3, 5]:=SumX_i( 2 );
c_system[4, 1]:=SumT_i( 3 );
c_system[4, 2]:=SumT_i( 4 );
c_system[4, 3]:=SumT_i( 5 );
c_system[4, 4]:=SumT_i( 6 );
c_system[4, 5]:=SumX_i( 3 );
end;
procedure TMainForm.SolveSystemJG;
var i, j : integer;
k : integer;
a, q : single;
begin
for i:=1 to 4 do begin
a:=c_system[i, i];
for j:=1 to 5 do
c_system[i, j]:=c_system[i, j] / a;
for k:=1 to 4 do begin
if k = i then continue;
q:=c_system[ k, i ];
for j:=1 to 5 do
c_system[ k, j ]:=c_system[ k, j ] - c_system[ i, j ] * q;
end;
end;
c_i[1]:=c_system[1, 5];
c_i[2]:=c_system[2, 5];
c_i[3]:=c_system[3, 5];
c_i[4]:=c_system[4, 5];
end;
может так понятнее будет.....
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2007.09.30;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.059 c