how to use fitnlm with constraints
12 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Haneya Qureshi
am 11 Mär. 2023
Kommentiert: Haneya Qureshi
am 12 Mär. 2023
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 Kommentare
Walter Roberson
am 11 Mär. 2023
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 () ?
Akzeptierte Antwort
Walter Roberson
am 11 Mär. 2023
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 Kommentare
Walter Roberson
am 11 Mär. 2023
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.
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Linear Least Squares finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!