Estimate/Optimize parameters for differential equation (ode23s; lsqnonlin)

1 visualizzazione (ultimi 30 giorni)
Hi folks,
at the moment I am struggling or got somehow stuck with a minimzation/optimization problem. I use a differential equation to estimate the strain-response of a concrete beam under unit-load. (The equation itself is derived from a rheological body.) This equation can be solved in matlab using ode23s. So. The equation contains a set of parameters that can freely be chosen in order to fit the model best to a set of measurement data. (Unit load applied at different points in time.)
To estimate the parameters, I wrote a matlab script. For the optimization-process, I use lsqnonlin(). And now, the problem starts: I don't really manage to find a good parameter-set if I choose an arbitrary initial guess and/or lower or upper boundaries. The whole script and functions, I use, are attached below. First, let me comment a little bit what I tried up to now:
The image shows the result of my optimization-tries. The black solid lines represent the measurement data. The thin red lines result, if I do not perform an optimization and only solve the equation with my initial-guess-parameters.
Now comes the fitting: The best result is plotted in dotted blue lines. It is one single call of lsqnonlin() and as initial guess I took fitting results that I found in literature; I didn't set up any boundaries in that case. Besides, I am wondering, how other researchers found this results that I use as initial guess. In the publication I got the my initial-guess-data from, it is mentionned that to obtain these parameters, they use a trust-region-algorithm from the optimization toolbox. (That is in my opinion lsqnonlin() ).
I then tried to define some boundaries for lsqnonlin() while using the same initial guess' as in the first try. These boundaries must lie around the initial guess in order to avoid a "bad" behaviour of the ode (e.g. parameters 2 and 3 must not be > 0; parameter 6 must not be < 0; ... that's what I found up to now from try-and-error-dealing with the ode). This leads to the magenta dash-dotted lines. - As you can see, the fit isn't that good as it was before I applied those boundaries.
And as last thing I took the same boundary-conditions as before but used arbitrary initial-conditions that lead somewhere between these boundary-conditions. This leads to the green dash-dotted lines. As you can see, the results are better than before, but nevertheless as good as my first-try.
Altogether this makes me think about "how to choose propriate initial conditions" because I think that they might highly influence the quality of my fitting result. Therefore I tried a global optimization by setting up the problem as multistart problem; unfortunately the results did not get better. (That's why i commented this try in the script.) ... or is there a problem in how I use lsqnonlin(), like I put the data in as matrix etc. ...
Does anyone of you know what I can do to improve my fitting-result or to improve my boundaries/initial guess? Sorry for my bad English; I hope I could explain what I want to achieve.
Thank you in advance, netorha
PS: here's the whole code:

Risposte (0)

Categorie

Scopri di più su Programming in Help Center e File Exchange

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by