Four-parameters optimization of a 1D function: wrong values

1 view (last 30 days)
Hello everybody,
I have some data (see file data.txt) that I have to fit with a function equal to:
function = p1*e^(-p2*ln((t-p4)/p3)^2)+p5, with t>p4
t is the time (hours), p are the 5 parameters to be optimized.
t is expressed in hours, so I defined it as t=((0:1:length(data(:,1))-1)/60)'.
The optimizaiton should be based on the minimization of the square error between data and the fit. I defined the error as:
error_function = @(params) sum((fun(params, t) - funzy).^2), where funzy is the vector with values coming from data-txt divided per 10.
I tried using fminsearch, however, the fourth parameter p4 results being negative and this does not have a physical meaning. Expected values of the parameters should be p1 = max value of the data function, p2 = curvature of the fit (0.5 to 5), p3 = time at which the ppeak occurs (starting from d), p4 = time at which values in data are not zero ( to 2), and p5 = offset y-axis (around -0.002).
I tired fmincon but it seemed not working and after that I tried even to use the genetic algorithm, but without any satisfactory results.
Can someone please help me?
Thanks a lot!
  2 Comments
Matt J
Matt J on 23 Feb 2024
Edited: Matt J on 23 Feb 2024
Your data.txt has 5 columns. We don't know what they mean.

Sign in to comment.

Answers (1)

Matt J
Matt J on 23 Feb 2024
Edited: Matt J on 23 Feb 2024
I would recommend using fminspleas,
with INLP=[p2,p3,p4] and ILP=[p1,p5]. You can also impose a positivity bound on p4 with INLB=[-inf,-inf,0].

Products


Release

R2023b

Community Treasure Hunt

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

Start Hunting!