In order to optimize any MATLAB function, there are two options: 1) rewrite the function to take only 1 array of inputs, reading all others from a file, perhaps, or from a global variable (undesirable), or 2) write an interface layer that handles this.
This function provides an interface layer that is completely general, and allows any MATLAB function to be used in an optimization loop. To do this, the first call to this function initializes it, storing the data necessary to evaluate and calculate the objective function for optimization. Then, this function 'objective_function.m' is called by an optimization routine such as fminsearch.
Note, this can be used with any optimization routine. It serves as an interface layer between the routine and the function to optimize, while also calculating the objective function value.
There are several functional forms of objective function written in here already, including sum of squared residuals, mean absolute error, mean percent absolute error, and log mean absolute error. Adding others is trivial.
This does NOT require the optimization toolbox.