Fitting very long data range

Lovely ROOT, :slight_smile: ,
I try to fit very simple function 1/(1+p1*x)^p2 or in Cint:
Double_t fitt =
par[0]/pow(1+par[1]*x[0],par[2])

Data range is very long - from 0 to 10^20
0.000000e+00 1.000000e+00
1.000000e+05 1.000000e+00
5.000000e+05 9.994500e-01
1.000000e+06 9.977900e-01
1.500000e+06 9.950400e-01
2.000000e+06 9.912100e-01
2.500000e+06 9.863200e-01
3.000000e+06 9.803900e-01
3.750000e+06 9.695910e-01
4.000000e+06 9.655400e-01
4.750000e+06 9.518880e-01
5.000000e+06 9.469400e-01
5.875000e+06 9.278400e-01
6.625000e+06 9.096010e-01
7.000000e+06 8.998700e-01
7.875000e+06 8.757760e-01
8.000000e+06 8.721610e-01
8.625000e+06 8.537270e-01
9.000000e+06 8.423900e-01
9.750000e+06 8.187930e-01
1.000000e+07 8.108200e-01
1.062500e+07 7.903800e-01
1.156300e+07 7.590290e-01
1.250000e+07 7.271200e-01
1.359400e+07 6.894680e-01
1.453100e+07 6.572700e-01
1.500000e+07 6.413000e-01
1.609400e+07 6.043200e-01
1.703100e+07 5.733520e-01
1.750000e+07 5.581200e-01
1.875000e+07 5.185450e-01
2.000000e+07 4.807900e-01
2.125000e+07 4.449150e-01
2.218800e+07 4.193120e-01
2.289100e+07 4.009390e-01
2.359400e+07 3.832090e-01
2.429700e+07 3.661360e-01
2.500000e+07 3.497500e-01
2.625000e+07 3.221710e-01
2.718800e+07 3.028140e-01
2.789100e+07 2.890650e-01
2.906300e+07 2.674080e-01
2.929700e+07 2.632700e-01
3.000000e+07 2.512700e-01
3.179700e+07 2.229550e-01
3.250000e+07 2.128040e-01
3.330100e+07 2.017980e-01
3.497600e+07 1.806930e-01
3.625000e+07 1.662140e-01
3.677000e+07 1.606750e-01
3.892300e+07 1.397670e-01
4.000000e+07 1.304500e-01
4.250000e+07 1.113530e-01
4.437500e+07 9.908660e-02
4.500000e+07 9.533620e-02
4.718800e+07 8.345640e-02
5.000000e+07 7.059600e-02
5.250000e+07 6.105480e-02
5.625000e+07 4.943010e-02
6.000000e+07 4.032700e-02
6.500000e+07 3.109610e-02
7.000000e+07 2.428600e-02
7.500000e+07 1.919230e-02
8.000000e+07 1.533600e-02
8.750000e+07 1.116450e-02
9.000000e+07 1.009200e-02
1.000000e+08 6.881600e-03
1.125000e+08 4.449490e-03
1.250000e+08 2.994900e-03
1.437500e+08 1.759020e-03
1.500000e+08 1.493900e-03
1.750000e+08 8.230890e-04
2.000000e+08 4.890600e-04
2.500000e+08 2.035500e-04
3.000000e+08 9.902300e-05
3.500000e+08 5.373400e-05
4.000000e+08 3.160600e-05
5.000000e+08 1.299800e-05
6.000000e+08 6.282400e-06
7.000000e+08 3.395600e-06
8.000000e+08 1.992200e-06
1.000000e+09 8.168200e-07
1.500000e+09 1.615100e-07
2.000000e+09 5.112000e-08
5.000000e+09 1.309200e-09
8.000000e+09 1.997700e-10
1.000000e+10 8.182800e-11
1.000000e+11 8.182900e-15
1.000000e+14 8.182900e-27
1.000000e+17 8.182901e-39

Data must correspond to formula 1/(1+p1*x)^4, but there are some problems:

  1. Minuit package fails
  2. Converged fit has tendency to overestimate p2.
  3. By adding SetParamLimits - all fails (3d case).

What can be done here?

[size=85]1. MINUIT:
FCN=6415.01 FROM SIMPLEX STATUS=RESET 13 CALLS 256 TOTAL
EDM=2.89831e-07 STRATEGY= 1 ERROR MATRIX UNCERTAINTY 50.0 per cent
EXT PARAMETER APPROXIMATE STEP FIRST
NO. NAME VALUE ERROR SIZE DERIVATIVE
1 p0 0.00000e+00 fixed
2 p1 0.00000e+00 fixed
3 p2 1.47192e-08 2.27370e-10 2.27370e-12 -3.30647e+02
4 p3 0.00000e+00 fixed
5 p4 0.00000e+00 fixed
6 p5 5.28024e+00 4.44144e-02 4.44144e-04 1.02531e+01
7 p6 1.00000e+00 fixed

  1. NO OPTIONS
    FCN=6415.01 FROM MIGRAD STATUS=CONVERGED 234 CALLS 235 TOTAL
    EDM=2.89831e-07 STRATEGY= 1 ERROR MATRIX ACCURATE
    EXT PARAMETER STEP FIRST
    NO. NAME VALUE ERROR SIZE DERIVATIVE
    1 p0 0.00000e+00 fixed
    2 p1 0.00000e+00 fixed
    3 p2 1.47192e-08 2.27370e-10 7.60077e-06 3.53437e+00
    4 p3 0.00000e+00 fixed
    5 p4 0.00000e+00 fixed
    6 p5 5.28024e+00 4.44144e-02 2.47566e-04 -1.14770e-01
    7 p6 1.00000e+00 fixed

  2. SetParamLimits are active
    FCN=24742.4 FROM MIGRAD STATUS=FAILED 178 CALLS 179 TOTAL
    EDM=6.68114e+10 STRATEGY= 1 ERR MATRIX NOT POS-DEF
    EXT PARAMETER APPROXIMATE STEP FIRST
    NO. NAME VALUE ERROR SIZE DERIVATIVE
    1 p0 0.00000e+00 fixed
    2 p1 0.00000e+00 fixed
    3 p2 5.75559e-08 2.22514e-07 -0.00000e+00 1.59086e+04
    4 p3 0.00000e+00 fixed
    5 p4 0.00000e+00 fixed
    6 p5 3.85604e+00 4.02301e-01 0.00000e+00 -5.01418e+04
    7 p6 1.00000e+00 fixed

[/size]

thanks for any support messages,
kind regards,

Hi,

You should try to use a log scale for your variables (x and y)

Lorenzo

Ok, I will try, thanks.