16 views (last 30 days)

Hi, I am trying to fit some data to the following function below:

I can get it to fit in mathcad but cannot get it working in matlab. This is my coding.

%Define equation to use (Square - Gaussian)

myEqn='(-a/(1+exp(c*((x-b)/h).^2)-1))+d'

f = fit(x,y,myEqn,'Normalize','off', 'StartPoint',[Bhi,2,cx,20,Bhi]);

%Results of fit

coeffs=coeffvalues(f);

a=coeffs(1)

c=coeffs(2)

b=coeffs(3)

h=coeffs(4)

d=coeffs(5)

I have assumed the coefficients match up as shown above.

Then view the fit at higher resoluton:

% %Increase resolution of x data

xdataFine=(linspace(x(1),x(end),500))'

% %plot high res fit

myEqn = (-a/(1+exp(c*((xdataFine-b)/h).^2)-1))+d;

plot(xdataFine,myEqn,'k--')

hold off

Thanks for any help. Jason

the cyclist
on 19 May 2016

Edited: the cyclist
on 5 Dec 2019

I used nlinfit from the Statistics and Machine Learning Toolbox. Here is the code, and the resulting plot:

xy = [ ...

1 317.3564

2.01 320.5743

3.02 320.5941

4.03 322.0396

5.04 320.9703

6.05 317.4257

7.06 320.099

8.07 320.2574

9.08 319.3762

10.09 320.3168

11.1 316.3069

12.11 317.7723

13.12 320.198

14.13 316.1782

15.14 316.8713

16.15 315.7723

17.16 314.1782

18.17 312.9505

19.18 311.8614

20.19 314.7327

21.2 307.802

22.21 308.8416

23.22 307.2178

24.23 304.4059

25.24 301.2871

26.25 297.396

27.26 294.802

28.27 291.9208

29.28 285.5149

30.29 279.7822

31.3 270.5446

32.31 261.9802

33.32 246.7228

34.33 224.8119

35.34 194.3267

36.35 160.7129

37.36 127.1089

38.37 103.9406

39.38 88.6139

40.39 77.505

41.4 70.0594

42.41 65.0792

43.42 61.3465

44.43 53.604

45.44 48.5248

46.45 44.495

47.46 42.6337

48.47 42.604

49.48 38.198

50.49 37.198

51.5 35.6535

52.51 34.4059

53.52 30.6139

54.53 33.5149

55.54 34.3168

56.55 33.9802

57.56 34.0198

58.57 37.1386

59.58 37.6634

60.59 38.9109

61.6 42.802

62.61 46.1782

63.62 51.1584

64.63 54.4455

65.64 60.8614

66.65 67.7624

67.66 78.099

68.67 98.2673

69.68 119.3762

70.69 148.7129

71.7 183.6733

72.71 214.8416

73.72 238.5743

74.73 251.7624

75.74 257.703

76.75 267.6337

77.76 274.0594

78.77 280.6436

79.78 287.8614

80.79 290.802

81.8 295.8713

82.81 300.8614

83.82 306.6832

84.83 306.1287

85.84 308.2772

86.85 306.505

87.86 309.802

88.87 312.2772

89.88 312.5248

90.89 315.396

91.9 319.1089

92.91 318.6634

93.92 320.5248

94.93 321.0891

95.94 319.4752

96.95 323.7822

97.96 322.6832

98.97 327.3663

99.98 324.2178

100.99 326.7723

102 325.297

];

x = xy(:,1);

y = xy(:,2);

% Define function that will be used to fit data

% (F is a vector of fitting parameters)

f = @(F,x) (-F(1)./(1+exp(F(2).*((x-F(3))./F(4)).^2)-1))+F(5);

F_fitted = nlinfit(x,y,f,[320 0.1 54 17 320]);

% Display fitted coefficients

disp(['F = ',num2str(F_fitted)])

% Plot the data and fit

figure

plot(x,y,'*',x,f(F_fitted,x),'g');

legend('data','fit')

Sign in to comment.

Alex Sha
on 4 Dec 2019

the fit function "myEqn='(-a/(1+exp(c*((x-b)/h).^2)-1))+d'" is not correct, refer to:

the function should be: myEqn='(-a/(1+exp(c*(((x-b)/h).^2)-1)))+d'

the results:

Root of Mean Square Error (RMSE): 7.86055008744128

Sum of Squared Residual: 6240.61301539449

Correlation Coef. (R): 0.997741981937716

R-Square: 0.995489062521003

Adjusted R-Square: 0.995397002572452

Determination Coef. (DC): 0.995489062521002

Chi-Square: 15.6369505666224

F-Statistic: 5296.40182594651

Parameter Best Estimate

---------- -------------

a -296.253072488933

b 53.8026426726725

c -2.93929851772126

d 17.5174641892142

h 17.657680608597

Sign in to comment.

Sign in to answer this question.

Opportunities for recent engineering grads.

Apply Today
## 7 Comments

## Direct link to this comment

https://in.mathworks.com/matlabcentral/answers/284381-curve-fit-data-using-fit#comment_366823

⋮## Direct link to this comment

https://in.mathworks.com/matlabcentral/answers/284381-curve-fit-data-using-fit#comment_366823

## Direct link to this comment

https://in.mathworks.com/matlabcentral/answers/284381-curve-fit-data-using-fit#comment_366974

⋮## Direct link to this comment

https://in.mathworks.com/matlabcentral/answers/284381-curve-fit-data-using-fit#comment_366974

## Direct link to this comment

https://in.mathworks.com/matlabcentral/answers/284381-curve-fit-data-using-fit#comment_367413

⋮## Direct link to this comment

https://in.mathworks.com/matlabcentral/answers/284381-curve-fit-data-using-fit#comment_367413

## Direct link to this comment

https://in.mathworks.com/matlabcentral/answers/284381-curve-fit-data-using-fit#comment_367455

⋮## Direct link to this comment

https://in.mathworks.com/matlabcentral/answers/284381-curve-fit-data-using-fit#comment_367455

## Direct link to this comment

https://in.mathworks.com/matlabcentral/answers/284381-curve-fit-data-using-fit#comment_367526

⋮## Direct link to this comment

https://in.mathworks.com/matlabcentral/answers/284381-curve-fit-data-using-fit#comment_367526

## Direct link to this comment

https://in.mathworks.com/matlabcentral/answers/284381-curve-fit-data-using-fit#comment_367670

⋮## Direct link to this comment

https://in.mathworks.com/matlabcentral/answers/284381-curve-fit-data-using-fit#comment_367670

## Direct link to this comment

https://in.mathworks.com/matlabcentral/answers/284381-curve-fit-data-using-fit#comment_367781

⋮## Direct link to this comment

https://in.mathworks.com/matlabcentral/answers/284381-curve-fit-data-using-fit#comment_367781

Sign in to comment.