fit.txt

来自「《Delphi常用数值算法集》的配书源码」· 文本 代码 · 共 69 行

TXT
69
字号
Procedure FIT(X, Y:array of real; NDATA:integer; SIG:array of real;
                            var MWT:integer; var A, B, SIGA, SIGB, CHI2, Q:real);
var
    I,J:integer;   SX,SY,ST2,SS,WT,SXOSS,T,SIGDAT:real;
begin
    SX:=0;
    SY:=0;
    ST2:=0;
    B:=0;
    If MWT <> 0 Then
    begin
        SS:=0;
        For I:=1 To NDATA do
        begin
            WT:=1  / (Sqr(SIG[I]));
            SS:=SS + WT;
            SX:=SX + X[I] * WT;
            SY:=SY + Y[I] * WT;
        end;
    end
    Else
    begin
        For I:=1 To NDATA do
        begin
            SX:=SX + X[I];
            SY:=SY + Y[I];
        end;
        SS:=NDATA;
    end;
    SXOSS:=SX / SS;
    If MWT <> 0 Then
    begin
        For I:=1 To NDATA do
        begin
            T:=(X[I] - SXOSS) / SIG[I];
            ST2:=ST2 + T * T;
            B:=B + T * Y[I] / SIG[I];
        end;
    end
    Else
    begin
        For I:=1 To NDATA do
        begin
            T:=X[I] - SXOSS;
            ST2:=ST2 + T * T;
            B:=B + T * Y[I];
        end;
    end;
    B:=B / ST2;
    A:=(SY - SX * B) / SS;
    SIGA:=Sqrt((1  + SX * SX / (SS * ST2)) / SS);
    SIGB:=Sqrt(1 / ST2);
    CHI2:=0;
    If MWT = 0 Then
    begin
        For I:=1 To NDATA do
            CHI2:=CHI2 + Sqr(Y[I] - A - B * X[I]);
        Q:=1;
        SIGDAT:=Sqrt(CHI2 / (NDATA - 2));
        SIGA:=SIGA * SIGDAT;
        SIGB:=SIGB * SIGDAT
    end
    Else
    begin
        For I:=1 To NDATA do
            CHI2:=CHI2 + Sqr((Y[I] - A - B * X[I]) / SIG[I]);
        Q:=GAMMQ(0.5 * (NDATA - 2), 0.5 * CHI2);
    end;
end;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?