How to use lsqcurvefit to estimate parameters while using fsolve to solve an equation

1 回表示 (過去 30 日間)
Hi ebveryone,
On the attached code I am trying to use lsqcurvefit to estimate the following constants:
% Constants
KSO2 = Constant(1);
KHSO3 = Constant(2);
KCO2 = Constant(3);
KHCO3 = Constant(4);
Kw = Constant(5);
whilst using fsolve to solve an equation. Some I get an error message:
Error using pHCalcFeb25>pHCalculation
Too many output arguments.
Error in lsqcurvefit (line 213)
initVals.F = feval(funfcn_x_xdata{3},xCurrent,XDATA,varargin{:});
Error in pHCalcFeb25 (line 67)
Constant=lsqcurvefit(@pHCalculation,Constant0,t,pH);
Caused by:
Failure in initial objective function evaluation. LSQCURVEFIT cannot continue.
>>
How can I resolve this error. Please help

採用された回答

Walter Roberson
Walter Roberson 2019 年 2 月 25 日
Your function calculates ph as a vector of 31 values. However, your function is declared as if it has no return values at all. At the very least you need to change your function declaration to return ph .
It was easier to debug by splitting your function into two files, which I attach.
  7 件のコメント
Dursman Mchabe
Dursman Mchabe 2019 年 2 月 25 日
編集済み: Dursman Mchabe 2019 年 2 月 25 日
I Actually need a tv of length 31. I will try:
or
tv = linspace(min(t), max(t),31);
Dursman Mchabe
Dursman Mchabe 2019 年 2 月 25 日
Thank you , thank you , thank you. It works perfectly.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeInterpolation についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by