how to use lsqnonlin to solve conditional equation
1 次查看(过去 30 天)
显示 更早的评论
i would like to input the following equation in matlab and use lsqnonlin to find the C0, Cinfi1, k1, t2start, Cinfi2 and k2 that can fit an obriginal data?
Are there anyone knowning how to do that?
0 个评论
采纳的回答
Fabio Freschi
2021-9-7
编辑:Fabio Freschi
2021-9-7
The following code should be self explainatory. In the opposite case, simply ask
clear all, close all
% some dummy params values
C0 = 2;
Cinf1 = 10;
k1 = 2;
t2start = 3;
Cinf2 = 8;
k2 = 3;
% t vector
tData = linspace(0,10,50);
% data + noise
rng(0); % for reproducibility
yData = C0+Cinf1*(1-exp(-k1*tData))+(tData >= t2start).*(Cinf2*(1-exp(-k2*(tData-t2start))))+0.3*randn(size(tData));
% anonymous function for fitting (function-data) that must be minimized
% using least squares
% x(1) = C0
% x(2) = Cinf1
% x(3) = k1
% x(4) = t2start
% x(5) = Cinf2
% x(6) = k2
C = @(x)x(1)+x(2)*(1-exp(-x(3)*tData))+(tData >= x(4)).*(x(5)*(1-exp(-x(6)*(tData-x(4)))))-yData;
% initial values (experience may help here)
x0 = [1 1 1 1 1 1];
% fitting
x = lsqnonlin(C,x0);
% plot
figure, hold on
plot(tData,yData,'o');
% reconstruction of the best fit from the anonymous function
plot(tData,C(x)+yData);
legend('data','best fit');
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Fit Postprocessing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!