📄 lfit.txt
字号:
Procedure LFIT(X, Y, SIG:array of real; NDATA:integer;var A:array of real;
MA:integer; LISTA:array of integer; MFIT:integer;var COVAR:matrx2;
NCVM:integer; var CHISQ:real);
var
BETA,AFUNC:array[0..50] of real;
I,J,K,KK,IHIT:integer; YM,SIG2I,WT,SUM:real;
begin
KK:=MFIT + 1;
For J:=1 To MA do
begin
IHIT:=0;
For K:=1 To MFIT do
If LISTA[K] = J Then IHIT:=IHIT + 1;
If IHIT = 0 Then
begin
LISTA[KK]:=J;
KK:=KK + 1;
end
Else If IHIT > 1 Then
ShowMessage(' Improper set in LISTA');
end;
If KK <> (MA + 1) Then ShowMessage(' Improper set in LISTA');
For J:=1 To MFIT do
begin
For K:=1 To MFIT do
COVAR[J, K]:=0;
BETA[J]:=0;
end;
For I:=1 To NDATA do
begin
FUNCS(X[I], AFUNC, MA);
YM:=Y[I];
If MFIT < MA Then
begin
For J:=MFIT + 1 To MA do
YM:=YM - A[LISTA[J]] * AFUNC[LISTA[J]];
end;
SIG2I:=1 / Sqr(SIG[I]);
For J:=1 To MFIT do
begin
WT:=AFUNC[LISTA[J]] * SIG2I;
For K:=1 To J do
COVAR[J, K]:=COVAR[J, K] + WT * AFUNC[LISTA[K]];
BETA[J]:=BETA[J] + YM * WT;
end;
end;
If MFIT > 1 Then
begin
For J:=2 To MFIT do
For K:=1 To J - 1 do
COVAR[K, J]:=COVAR[J, K];
end;
GAUSSJ(COVAR, MFIT, BETA);
For J:=1 To MFIT do
A[LISTA[J]]:=BETA[J];
CHISQ:=0;
For I:=1 To NDATA do
begin
FUNCS(X[I], AFUNC, MA);
Sum:=0;
For J:=1 To MA do
Sum:=Sum + A[J] * AFUNC[J];
CHISQ:=CHISQ + Sqr((Y[I] - Sum) / SIG[I]);
end;
COVSRT(COVAR, NCVM, MA, LISTA, MFIT);
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -