1stopt拟合自定义分段函数,提示函数有错,请教各位这是什么原因?


Title "Type your title here";
Parameters E,A,K,F,R ;
Variable x,y ;
Function y=if(x<1.775,(E*A+K*x)*(F+A*R)/(A*(E*F+(E*A+K*x)*R)),if(x>1.775,(F+A*R)/(A*F*E*((1/(A*E+K*x))+(R/(F*E+R*K*(x-1.775))))))) ;
data;
0       0
0.10628    0.16954
0.20676    0.25701
0.29869    0.33649
0.38363    0.44121
0.46154    0.55099
0.53353    0.66328
0.60125    0.78297
0.66546    0.91187
0.73532    1.02907
0.80045    1.13545
0.86254    1.23946
0.92087    1.33705
0.97575    1.43347
1.02733    1.53275
1.07657    1.63551
1.1227    1.74159
1.1661    1.84788
1.20748    1.95441
1.24644    2.05996
1.28295    2.16739
1.31724    2.27655
1.34995    2.38711
1.38056    2.49714
1.40938    2.60618
1.43618    2.71408
1.46164    2.82047
1.48532    2.92636
1.50729    3.03748
1.52816    3.15187
1.54769    3.26958
1.5657    3.39219
1.58238    3.51965
1.5981    3.64942
1.61279    3.78131
1.62648    3.91267
1.63908    4.04315
1.65088    4.17237
1.66185    4.29958
1.67205    4.42464
1.68157    4.54736
1.69043    4.66754
1.69863    4.78513
1.70622    4.90031
1.71351    5.01451
1.72021    5.12786
1.72627    5.24005
1.73209    5.35022
1.73745    5.45775
1.74238    5.56251
1.747    5.66433
1.75112    5.76367
1.75484    5.86148
1.75819    5.95821
1.76112    6.05451
1.76366    6.15617
1.76595    6.26357
1.7679    6.37771
1.76963    6.49962
1.77105    6.63063
1.77208    6.77159
1.77295    6.92298
1.77361    7.08494
1.77414    7.25724
1.77456    7.43986
1.77493    7.63248
1.77522    7.83498
1.77557    8.04762
1.77602    8.27042
1.77658    8.50349
1.77721    8.74697
1.77794    9.00051
1.7788    9.26391
1.77989    9.53719
1.78101    9.81989
1.78239    10.1117
1.784    10.4082
1.78586    10.70937
1.78777    11.01448
1.78985    11.32293
1.79195    11.63417
1.79416    11.94782
1.79654    12.26403
1.79892    12.58275
1.80127    12.90415
1.80387    13.22906
1.80653    13.55773
1.8093    13.88974
1.81213    14.22525
1.81505    14.56479
1.81801    14.90884
1.82105    15.25826
1.82415    15.61315
1.82722    15.97322
1.83062    16.33832
1.83409    16.70818
1.83771    17.08213
1.84143    17.45988
1.8452    17.84079
1.84915    18.22435
1.85308    18.61108
1.85706    19.00061
1.86115    19.39164
1.86537    19.78366
1.86968    20.17676
1.87406    20.57061
1.87855    20.96472
1.88319    21.35872
1.88806    21.75228
1.89304    22.14562
1.89797    22.53874
1.90325    22.9307
1.90872    23.32144
1.91417    23.71142
1.91996    24.10102
1.9258    24.49055
1.93178    24.88042
1.93784    25.27103
1.94416    25.65879
1.95048    26.04552
1.95692    26.43032
1.96348    26.81559
1.97002    27.20097
1.97664    27.58779
1.98318    27.97802
1.98972    28.3762_
1.99638    28.78203
2.00297    29.18835

上面是代码,公式长这样

img

你好,如果是matlab非线性拟合,可以这样

 data=[
0       0
0.10628    0.16954
0.20676    0.25701
0.29869    0.33649
0.38363    0.44121
0.46154    0.55099
0.53353    0.66328
0.60125    0.78297
0.66546    0.91187
0.73532    1.02907
0.80045    1.13545
0.86254    1.23946
0.92087    1.33705
0.97575    1.43347
1.02733    1.53275
1.07657    1.63551
1.1227    1.74159
1.1661    1.84788
1.20748    1.95441
1.24644    2.05996
1.28295    2.16739
1.31724    2.27655
1.34995    2.38711
1.38056    2.49714
1.40938    2.60618
1.43618    2.71408
1.46164    2.82047
1.48532    2.92636
1.50729    3.03748
1.52816    3.15187
1.54769    3.26958
1.5657    3.39219
1.58238    3.51965
1.5981    3.64942
1.61279    3.78131
1.62648    3.91267
1.63908    4.04315
1.65088    4.17237
1.66185    4.29958
1.67205    4.42464
1.68157    4.54736
1.69043    4.66754
1.69863    4.78513
1.70622    4.90031
1.71351    5.01451
1.72021    5.12786
1.72627    5.24005
1.73209    5.35022
1.73745    5.45775
1.74238    5.56251
1.747    5.66433
1.75112    5.76367
1.75484    5.86148
1.75819    5.95821
1.76112    6.05451
1.76366    6.15617
1.76595    6.26357
1.7679    6.37771
1.76963    6.49962
1.77105    6.63063
1.77208    6.77159
1.77295    6.92298
1.77361    7.08494
1.77414    7.25724
1.77456    7.43986
1.77493    7.63248
1.77522    7.83498
1.77557    8.04762
1.77602    8.27042
1.77658    8.50349
1.77721    8.74697
1.77794    9.00051
1.7788    9.26391
1.77989    9.53719
1.78101    9.81989
1.78239    10.1117
1.784    10.4082
1.78586    10.70937
1.78777    11.01448
1.78985    11.32293
1.79195    11.63417
1.79416    11.94782
1.79654    12.26403
1.79892    12.58275
1.80127    12.90415
1.80387    13.22906
1.80653    13.55773
1.8093    13.88974
1.81213    14.22525
1.81505    14.56479
1.81801    14.90884
1.82105    15.25826
1.82415    15.61315
1.82722    15.97322
1.83062    16.33832
1.83409    16.70818
1.83771    17.08213
1.84143    17.45988
1.8452    17.84079
1.84915    18.22435
1.85308    18.61108
1.85706    19.00061
1.86115    19.39164
1.86537    19.78366
1.86968    20.17676
1.87406    20.57061
1.87855    20.96472
1.88319    21.35872
1.88806    21.75228
1.89304    22.14562
1.89797    22.53874
1.90325    22.9307
1.90872    23.32144
1.91417    23.71142
1.91996    24.10102
1.9258    24.49055
1.93178    24.88042
1.93784    25.27103
1.94416    25.65879
1.95048    26.04552
1.95692    26.43032
1.96348    26.81559
1.97002    27.20097
1.97664    27.58779
1.98318    27.97802
1.98972    28.3762
1.99638    28.78203
2.00297    29.18835];
x = data(:,1);
y = data(:,2);
fun = @(a,x)(x<1.775).*(a(1)*a(2)+a(3)*x).*(a(4)+a(2)*a(5))./(a(2)*(a(1)*a(4)+(a(1)*a(2)+a(3)*x)*a(5)))+...
    (x>1.775).*(a(4)+a(2)*a(5))./(a(2)*a(4)*a(1)*((1./(a(2)*a(1)+a(3)*x))+(a(5)./(a(4)*a(1)+a(5)*a(3)*(x-1.775)))));
% Title "Type your title here";
% Parameters E,A,K,F,R = a(1),a(2),a(3),a(4),a(5)
% Variable x,y ;
% Function  ;
a0 = rand(5,1)*10;
[a,R,J,CovB] = nlinfit(x,y,fun,a0);
yfit = fun(a,x);
plot(x,y,'r--',x,yfit,'b-.')