how to use fitnlm with constraints

24 ビュー (過去 30 日間)
Haneya Qureshi
Haneya Qureshi 2023 年 3 月 11 日
コメント済み: Haneya Qureshi 2023 年 3 月 12 日
I have a custom equation and want to fit its coeffients.
coefficients are k
x is data
Equation is as follows:
modelfun = @(k,x) k(1).*x(:,1)+k(2).*log10(x(:,2) +k(3).*x(:,3)^2)
Kinit is vector of initial variables that I give
tbl contains my data x
I fit like this:
mdl = fitnlm(tbl,modelfun,Kinit);
I want to impose certain contraints on coefficients,
i.e.,
k(1) should be between 20 and 40
k(2) should be positive
k(3) should be negative.
How can I do that?
Thanks a lot for helping me out.
  2 件のコメント
Walter Roberson
Walter Roberson 2023 年 3 月 11 日
log10*x(:,2)
could you confirm that you assigned a value to log10 such that you can multiply it by an input? Or did you miss some () ?
Haneya Qureshi
Haneya Qureshi 2023 年 3 月 11 日
編集済み: Haneya Qureshi 2023 年 3 月 11 日
@Walter Roberson sorry, i missed brackets..the function is definitely non-linear.
modelfun = @(k,x) k(1).*x(:,1)+k(2).*log10(x(:,2) +k(3).*x(:,3)^2)

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

採用された回答

Walter Roberson
Walter Roberson 2023 年 3 月 11 日
No, fitnlm does not provide any way to put in constraitns.
You might consider lsqcurvefit from the Optimization Toolbox. Or you could consider using the Curve Fitting Toolbox; https://www.mathworks.com/help/curvefit/linear-and-nonlinear-regression.html
  9 件のコメント
Walter Roberson
Walter Roberson 2023 年 3 月 11 日
Ah, yes. Curve Fitting Toolbox can support functions of two variables, creating a surface fit, but that is not enough for your purposes.
You could consider creating a residue function,
residue = @(k) sum((k(1) * x(:,1) + k(2) * log10(x(:,2)) + k(3)*x(:,3).^2) - Y).^2)
and minimizing that sum-of-squares using fmincon.
Haneya Qureshi
Haneya Qureshi 2023 年 3 月 12 日
Got it, makes sense! Thanks so much!

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

その他の回答 (0 件)

カテゴリ

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

Community Treasure Hunt

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

Start Hunting!

Translated by