0
|
5260 Views
|
3 Replies
|
1 Total Likes
View groups...
Share
GROUPS:

# Fitting Data to the Sum of some Solutions of an ODE System

Posted 10 years ago
 Hello all, I have a system consisting of 4 ODEs, which I call sys (incl. initial conditions). The parameters are called par1, par2, par3. My data consists of a time series of measurements (from time 0 to 100), which represents the sum of the last two solutions (sol3, sol4) of the ODE system. For fitting the model to this kind of data, I did the following: (* Numerical solution *) model[par1_, par2_, par3_] := model [par1, par2, par3] = Module[{nsol, sol1, sol2, sol3, sol4, t}, nsol = NDSolveValue[{sys}, {sol1, sol2, sol3, sol4},{t,0,100}, MaxSteps->10000]; Return[nsol]; ] (* Relevant solution part *) modeldata[par1_?NumericQ, par2_?NumericQ, par3_?NumericQ] := Total[Through[Part[model[par1, par2, par3], 3:4][t]]]; (* Fitting *) nlm=NonlinearModelFit[data, modeldata[par1, par2, par3], {par1, par2, par3}, t, Method->"NMinimize"];  Problem: Mathematica complains about the Interpolating Function: Input value lies outside the range of data in the interpolating function. Extrapolation will be used. I really do not see where the problem lies. Indeed, the data range should be covered by the InterpolatingFunction since the integration covers the relevant range. Thanks for any advice.
3 Replies
Sort By:
Posted 10 years ago
 That error message isn't uncommon. Especially if you search online for "NDSolve::mxst". It basically just means the function is hard to numerically integrate beyond some point. There's no simple, general solution for that. There are many different techniques that can be done depending on the nature of the equations. Off the top of my head, here's what I normally try: Try out many different possible values for the "Method" option. Maybe you'll get lucky and one of them will work. Look at the equation. Can it be related to a simpler set of equations somehow? Plug the results back into the original equations and see how well they satisfy them. It might be possible to show that it was sol 1, 2, 3, or 4 that was really causing the problem. Maybe it's changing values very quickly or becoming highly oscillatory. Read through the list of available "Method" options again and see which seem to address the problem I'm seeing. Reduce and simplify the equations to get the simplest version of them that produces the problem. This will help other people advise you on how to solve it numerically at very least. Try to find a solvable approximation of the equation. I'd really first bombard the problem with many different numerical methods. One of my favorites that I always try is (Method -> "StiffnessSwitching").
Posted 10 years ago
Posted 10 years ago