I used lsfit package to fit an non-linear function(Richards equation, the formula is:y=A/power((1+B*exp(-Kx)),1/N).
I modified the example lsfit_d_nlf. the code as below:
Code:
program XTestALGLIB;
{$IFDEF FPC}
{$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}
uses
    SysUtils, Classes, Math, XALGLIB;
procedure function_cx_1_func(const c: TVector; const x: TVector; var func: Double; obj: Pointer);
begin
    func := c[0]/(power((1.0+c[1]*exp(-c[2]*x[0])),(1.0/c[3])))
end;
var
    x: TMatrix;
    y: TVector;
    c: TVector;
    epsx: Double;
    maxits: TALGLIBInteger;
    info: TALGLIBInteger;
    state: Tlsfitstate;
    rep: Tlsfitreport;
    diffstep: Double;
    w: TVector;
begin
    state:=nil;
    x:=Str2Matrix('[[1], [2], [3], [4], [5], [6], [7], [8], [9], [10],   [11], [12], [13], [14],   [15], [16], [17], [18],   [19], [20], [21], [22],   [23], [24], [25], [26], [27], [28], [29]]');
   
    setlength(y,29);
    y[0]:=276.6724171 ;
    y[1]:=294.7418196 ;
    y[2]:=312.999814 ;
    y[3]:=318.796855 ;
    y[4]:=327.9809221 ;
    y[5]:=348.5382184 ;
    y[6]:=373.6247255 ;
    y[7]:=390.9853543 ;
    y[8]:=   439.8460131;
    y[9]:=481.6166667 ;
    y[10]:=508.9197225 ;
    y[11]:=516.696677 ;
    y[12]:=502.5845254 ;
    y[13]:=504.3674456  ;
    y[14]:=539.8693852 ;
    y[15]:=568.5217391 ;
    y[16]:=612.2468205 ;
    y[17]:=   694.9141966 ;
    y[18]:=798.5451169 ;
    y[19]:=893.4315531 ;
    y[20]:=1004.368269 ;
    y[21]:=1152.037148 ;
    y[22]:=1274.113633 ;
    y[23]:=1401.486387 ;
    y[24]:=1578.892632 ;
    y[25]:=1776.018034 ;
    y[26]:=1972.037091 ;
    y[27]:=2205.325444 ;
    y[28]:=   2285.438293 ;
   
    c:=Str2Vector('[25080, 1841, 0.1523, 1.594]');
    epsx:=1E-6;
    maxits:=0;
    diffstep:=1E-6;
    // Fitting without weights
    lsfitcreatef(x, y, c, diffstep, state);
    lsfitsetcond(state, epsx, maxits);
    lsfitfit(state, function_cx_1_func, nil, nil);
    lsfitresults(state, info, c, rep);
    WriteLn(Format('%d', [info])); // EXPECTED: 2
    WriteLn(Format('%s', [FormatVector(c,1)])); // EXPECTED: [5884.4,19373,0.3088,3.3937]
    
    FreeAndNil(state);
    ReadLn;
    ExitCode:=0;
end.
but the result vector is [1023202.5  1419825.5 0.2 1.6].
i expected result is  [5884.4,19373,0.3088,3.3937](this result is solved with lsqcurvefit function in matlab).
in the picture, the blue curve is the result  solved with lsqcurvefit function in matlab,and the red curve is the result of my code.
and i think my result is not a good fit.
is my code  mistake or any other question?
thanks!