Most of the code you posted is meaningless, since you save only the variables
whos
Name Size Bytes Class Attributes
avgSPResp2 1x1001 8008 double
stepFit 1x1001 8008 double
But it looks like you want to fit an exponential model to this data.
PLOT YOUR DATA. ALWAYS. Don't just throw it at a fitting tool, and expect something meaningful to come out. THINK ABOUT WHAT YOU SEE. This should be the number 1 rule for people to follow. If you don't, then expect someone like me to be forced to remind you that you did not bother to think about what you have and what you are doing. Sorry, but true.
plot(stepFit,avgSPResp2,'.')
Next, Look at the plot. What model are you wanting to fit to that data? Yes, an exponential model. However, consider what shape the exponential model you have chosen has?
An exponential decay model looks like this:
fplot(@(x) exp(-x),[0,5])
You can want it to do anything you want, but that is simple mathematics. And mathematics is cruel, rarely doing something just because you want it to do so. If you change the constants in beta, thus:
(beta(1).* exp(beta(2).*stepFit))
you can change how fast it drops off, or you can change where it starts from. No matter what, that is the fundamental shaoe you will get.
Note that as the independent variable (stepfit) goes to infinity, the exponential will decrease to zero. It will not be asymptotic to some other value. Wishing won't make it so. And no curve fitting routine in the universe will make it do any better.
So what you need to understand is that the is not a problem of nlinfit, or how to find good starting values. This is a fundamental problem that the model you want to use is never going to fit that curve. NEVER. It will not even fit poorly. The model and the data are inconsistent.
Could you change the model? Certainly. But that model and that data are inconsistent.