The fsolve function has three main algorithms (trust region, LM, IP) which all can be tried until a verifiable solution is obtained. I personally never forget that there is a high chance that no solution(s) exist (as also mentioned in the MATLAB documentation).
Alternatively, if you have access to, I suggest trying Solve[] or Reduce[] or NSolve[] in Mathematica.
You can probably code something on your own in MATLAB, based on smoothing methods for non-differentiable equations. In those methods the min or max operators are replaced by smooth operators that mimic the min/max ones through a positive parameter that you iteratively decrease towards zero, restarting each run with a successively smaller and smaller value of that parameter. Depending on the "gravity" of the non-smoothness, this process may take you fairly close to the actual solution before instabilities in the solver stops your further progress.