📄 svdfit.txt
字号:
Procedure SVDFIT(X,Y,SIG:array of real; NDATA:integer;var A:array of real;
MA:integer;var U, V:matrx2;var W:array of real;
MP, NP:integer;var CHISQ:real; FUNCS:string);
var
B:array[0..1000] of real; AFUNC:array[0..50] of real;
I,J:integer; TMP,WMAX,THRESH,SUM1:real;
const
TOL=0.00001;
begin
For I:=1 To NDATA do
begin
If FUNCS = 'FPOLY' Then FPOLY(X[I], AFUNC, MA);
If FUNCS = 'FLEG' Then FLEG(X[I], AFUNC, MA);
TMP:=1 / SIG[I];
For J:=1 To MA do
U[I, J]:=AFUNC[J] * TMP;
B[I]:=Y[I] * TMP;
end;
SVDCMP(U, NDATA, MA, W, V);
WMAX:=0;
For J:=1 To MA do
If W[J] > WMAX Then WMAX:=W[J];
THRESH:=TOL * WMAX;
For J:=1 To MA do
If W[J] < THRESH Then W[J]:=0;
SVBKSB(U, W, V, NDATA, MA, B, A);
CHISQ:=0;
For I:=1 To NDATA do
begin
If FUNCS = 'FPOLY' Then FPOLY(X[I], AFUNC, MA);
If FUNCS = 'FLEG' Then FLEG(X[I], AFUNC, MA);
SUM1:=0;
For J:= 1 To MA do
SUM1:=SUM1 + A[J] * AFUNC[J];
CHISQ:=CHISQ + Sqr((Y[I] - SUM1) / SIG[I]);
end;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -