It could also mean that two or more parameters are strongly dependent. For example if your function would be:
y=a0*SQRT(x) + a1 + a2
you would get a singular matrix because any change in a1 can be completely compensated with an opposite change in a2, thus there is an infinite number of equally good solutions to the problem.
Also watch for functions that that have limited valid ranges, e.g. if you use logarithms make sure that calls with negative X cannot occur during the search.
Sometimes, you can re-parametrize the problem in a different form so it converges better.
What is your function?