Nonlinear fit of segmented curve [MATLAB]

问题:

How would I go about getting a nonlinear least-squares fit of a segmented curve? In this case, I have a short, linear, lag period followed by a logistic growth phase (typical of bacterial growth in culture).

Thus, for x < T0, y = Y0; for x >= T0, y = Y0 + (Plateau-Y0)*(1 - exp(-K*(X-X0)).

I need least squares estimates for each of the parameters: T0, Y0, Plateau, and K

I've attempted to use a custom function in the curve fitting toolbox, but cannot figure out how to allow for the two curves.

Thanks!

解答:

It is no problem to fit piecewise curves in MATLAB using the Curve Fitting Toolbox. You can deal with piecewise functions by multiplying each piece by its respective domain. For example:

rng(0); %Just fixing the random number generator for initial conditions
X = (0:0.01:10)';

% True Values
Y0_true = 3;
PLATEAU_true = 5;
K_true = 1;
X0_true = 4;

Y = [Y0_true] * (X <= X0_true) + [Y0_true + (PLATEAU_true-Y0_true)*(1 - exp(-K_true*(X-X0_true)))].* (X > X0_true);
Y = Y + 0.1*randn(size(Y));
plot(X,Y);

ftobj = fittype('[Y0] * (x <= X0) + [Y0 + (PLATEAU-Y0)*(1 - exp(-K*(x-X0)))].* (x > X0)');
cfobj = fit(X,Y,ftobj,'startpoint',rand(4,1))
hold on;
plot(X,cfobj(X),'r','linewidth',2);

追加问题;

This does not work for me in R2017b. The fit is effectively the line y=4 (K=4.2, plateau=4, X0 = -1.94, Y0 = -1.98). The fit works only if noise is not added to the simulated data.

再次回答:

y2 = Y0 + (Plateau-Y0)./(1 + exp(-K*(X-X0)));

最后的感谢:

Thanks much for your rapid response, John! However, in order for this to be acceptable for publication (and more fundamentally, for comparison with other work), I need to be able to fit it to the originally specified equation. The values of those parameters are used to describe the response in a way that's meaningful for the relevant research community. The frustrating part is that this is an amazingly simple operation with other software (GraphPad Prism) with a built-in equation. I just can't figure out how to specify a segmented equation in a way that the Curve Fitting Toolbox will understand. Perhaps there's something analogous with how a discontinuous function would be entered?

来源:

Nonlinear fit of segmented curve -

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值