You are not using datafit correctly (read carefully the documentation to see the role of each argument). In addition, using datafit is not a good idea as this function seems to have a broken mecanism for the kind of data/model output you have (successive vector values of ode states). I recommend using basic leastsq which has the same features (in fact datafit uses leastsq so …), considering that you only need to vectorize the residual matrix yourself (the output of kinetic_gap_ode in your code). Please find the modified script attached to this message. Just a last remark: your ode model seems not to fit well the data (but this is not due to leastsq itself).
S.
kinetic_datafit_regression.sce (6.4 KB)