Problem with Nonlinear Least Squares fitting

I am trying to create a script that will fit some scientific data to the function
where a,b, and c are the fitting parameters. My problem is that the script does not seem to seek better parameters, but I can do the fitting in a different software. What is wrong with my code? My code is below, and I am very new to MatLab. Thank you.
x = A(389:401, 6);
y = A(389:401, 5);
axis([0 1010 0 1.6E-7])
% hold on
plot(x,y,'ro')
title('Data points')
% hold off
ft = fittype('(a/2)*(sin(b*pi/2)/(cosh(b*log(2*pi*x*c))+cos(b*pi/2)));');
fo = fitoptions('Method','NonlinearLeastSquares',...
'Lower',[-1,-1,-1],...
'Upper',[1,1,1],...
'StartPoint',[5e-7 0.63 9e-5]);
[f2,gof,output]=fit(x,y,ft,fo);
f2
gof.rsquare
figure
plot(f2,x,y)

답변 (1개)

Sam Chak
Sam Chak 2022년 6월 14일
편집: Torsten 2022년 6월 14일

0 개 추천

I don't see anything technically wrong with code. Probably the choices of the lower and upper bounds are 'too vast'. Your data lies in this region?
axis([0 1010 0 1.6E-7])
Does your data look like these two curves?
x = linspace(-pi, pi, 3601);
y1 = (1/2)*(sin(1*pi/2)./(cosh(1*log(2*pi*x*1))+cos(1*pi/2)));
y2 = (-1/2)*(sin(-1*pi/2)./(cosh(-1*log(2*pi*x*-1))+cos(-1*pi/2)));
plot(x, [y1' y2'])

댓글 수: 1

Hello
I tried narrowing the constraints on my starting values.
ft = fittype('(a/2)*(sin(b*pi/2)/(cosh(b*log(2*pi*x*c))+cos(b*pi/2)));');
fo = fitoptions('Method','NonlinearLeastSquares',...
'Lower',[0,0,0],...
'Upper',[1e-6,1,1e-4],...
'StartPoint',[5.4e-7 0.67 9e-5]);
[f2,gof,output]=fit(x,y,ft,fo);
f2
gof.rsquare
figure
plot(f2,x,y)
Do you recommend the lsqcurvefit function? Thank you.

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Linear and Nonlinear Regression에 대해 자세히 알아보기

제품

릴리스

R2022a

질문:

2022년 6월 13일

댓글:

2022년 7월 4일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by