Fit Curve to a user defined function
12 ビュー (過去 30 日間)
古いコメントを表示
Hello,
I have 2 defined variables, S and u, both with experimental data shown below:
S =
0.403000000000000
0.331000000000000
0.270400000000000
0.222200000000000
0.181600000000000
0.148900000000000
0.122100000000000
0.100500000000000
0.080800000000000
0.067000000000000
0.054000000000000
0.045200000000000
0.036300000000000
0.029500000000000
0.024800000000000
0.020100000000000
0.016400000000000
0.014200000000000
0.011900000000000
0.008800000000000
0.008000000000000
0.005100000000000
0.005100000000000
u =
0.957033515000000
0.903278685000000
0.815542061000000
0.732249907000000
0.656767397000000
0.578471565000000
0.506853196000000
0.440901480000000
0.379658753000000
0.324856464000000
0.276170883000000
0.233324443000000
0.196245474000000
0.164407417000000
0.137095397000000
0.113974220000000
0.094601760000000
0.078298766000000
0.064655532000000
0.053307707000000
0.043933989000000
0.036147733000000
0.029677689000000
I want to fit them to the Monod Equation using programmatic curve fitting, where the monod equation is given as u = (umax*S)/(Ks+S), where umax and Ks are constants.
However, I do not know how to define the Monod Equation as a function in MATLAB so that I can fit u and S to it, because I need to do so to obtain the 95% prediction intervals, instead I end up with the following error messages instead:
>>[fitresult,gof] = fit(S,u,'Monod');
Error using fittype>iCreateFromLibrary (line 414)
Library function Monod not found.
Error in fittype>iCreateFittype (line 345)
obj = iCreateFromLibrary( obj, varargin{:} );
Error in fittype (line 330)
obj = iCreateFittype( obj, varargin{:} );
Error in fit>iFit (line 165)
model = fittype( fittypeobj, 'numindep', size( xdatain, 2 ) );
Error in fit (line 116)
[fitobj, goodness, output, convmsg] = iFit( xdatain, ydatain, fittypeobj, ...
and
>> [fitresult,gof] = fit(S,u,'u = (umax*S)/(Ks+S)')
Error using fittype>iDeduceCoefficients (line 621)
The independent variable x does not appear in the equation expression.
Use x in the expression or indicate another variable as the independent variable.
Error in fittype>iCreateCustomFittype (line 477)
obj = iDeduceCoefficients(obj);
Error in fittype>iCreateFittype (line 353)
obj = iCreateCustomFittype( obj, varargin{:} );
Error in fittype (line 330)
obj = iCreateFittype( obj, varargin{:} );
Error in fit>iFit (line 165)
model = fittype( fittypeobj, 'numindep', size( xdatain, 2 ) );
Error in fit (line 116)
[fitobj, goodness, output, convmsg] = iFit( xdatain, ydatain, fittypeobj, ...
How would you all solve this problem?
0 件のコメント
採用された回答
John D'Errico
2022 年 10 月 27 日
編集済み: John D'Errico
2022 年 10 月 27 日
You cannot assume that fit will know the name of every possible nonlinear model form. monod is apparently not one of the predefined types.
S = [0.403000000000000 0.331000000000000 0.270400000000000 0.222200000000000 0.181600000000000 0.148900000000000 0.122100000000000 0.100500000000000 0.080800000000000 0.067000000000000 0.054000000000000 0.045200000000000 0.036300000000000 0.029500000000000 0.024800000000000 0.020100000000000 0.016400000000000 0.014200000000000 0.011900000000000 0.008800000000000 0.008000000000000 0.005100000000000 0.005100000000000]';
u = [0.957033515000000 0.903278685000000 0.815542061000000 0.732249907000000 0.656767397000000 0.578471565000000 0.506853196000000 0.440901480000000 0.379658753000000 0.324856464000000 0.276170883000000 0.233324443000000 0.196245474000000 0.164407417000000 0.137095397000000 0.113974220000000 0.094601760000000 0.078298766000000 0.064655532000000 0.053307707000000 0.043933989000000 0.036147733000000 0.029677689000000]';
plot(S,u,'o')
mdl = fittype('(umax*S)/(Ks+S)','indep','S')
fittedmdl = fit(S,u,mdl)
plot(fittedmdl,S,u)
The fit seems quite reasonable overall, even where the legend covers up the last data point. (Sorry about that. Blame legend, and I am too lazy now to force it to be better.)
Fit would have been happier if I had provided initial guesses, but even though it complained, it was ok at the end. This was not a difficult model to fit, and a random start is adequate.
4 件のコメント
その他の回答 (0 件)
参考
カテゴリ
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!

