Fitting a sigmoid curve with limited data
조회 수: 4 (최근 30일)
이전 댓글 표시
Hi, I'm a undergrad student and a complete beginner with MatLab. I am trying to obtain a dissociation constant through curvefitting my data. The problem is I only have data points on one side of the inflection point: I have : (90*10^-6, 60*10^-6, 40*10^-6, 25*10^-6, 10*10^-6, 7.5*10^-6) and (1, 1.120694521, 1.3852991, 1.434082877, 1.790047873 , 1.899364214) with an inflection point expected to be around 1-2*10^-6.
Is it possible to get a sigmoid curve with this limited data, because I only get linear or quadratic curves? Or can I perhaps use an estimate of some other values and have my actual data weigh stronger in the curvefit?
Thanks for your help,
Mark
댓글 수: 0
답변 (1개)
the cyclist
2012년 6월 11일
If you have the Statistics Toolbox, one possibility would be to use the nlinfit() function, and choose a sigmoid functional form. I have included a simple example of the use of that function (not using a sigmoid), which might help you get started. You'd need to replace my made-up data with your real data, and replace my "f" definition with your functional form.
% Here is an example of using nlinfit(). For simplicity, none of
% of the fitted parameters are actually nonlinear!
% Define the data to be fit
x=(0:1:10)'; % Explanatory variable
y = 5 + 3*x + 7*x.^2; % Response variable (if response were perfect)
y = y + 20*randn((size(x)));% Add some noise to response variable
% Define function that will be used to fit data
% (F is a vector of fitting parameters)
f = @(F,x) F(1) + F(2).*x + F(3).*x.^2;
F_fitted = nlinfit(x,y,f,[1 1 1]);
% Display fitted coefficients
disp(['F = ',num2str(F_fitted)])
% Plot the data and fit
figure(1)
plot(x,y,'*',x,f(F_fitted,x),'g');
legend('data','fit')
댓글 수: 3
Ryan
2012년 6월 11일
As far as the unexpected Matlab operator is concerned, it is most likely due to the ".+". The '.' operator before a mathematical operator promps Matlab to do element wise arithmetic. For example, say I have two vectors, A and B. Multiplying C = A*B will result in a matrix C, but using C = A.*B I will get a new vector the size of A and B where the C(1,1) = A(1,1)*B(1,1) and C(5,6) = A(5,6)*B(5,6), etc.
참고 항목
카테고리
Help Center 및 File Exchange에서 Get Started with Curve Fitting Toolbox에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!