NMaximize[f,x] maximizes f numerically with respect to x.
FindMaximum[f,x] searches for a local maximum in f, starting from an automatically selected point.
FindMaximum is in my experience about an order of magnitude faster than NMaximize. Reading the description, I think the difference is that NMaximize checks a smaller range of values for the maximum (presumably until the nearest point where f' == 0 on either size of the starting point), while FindMaximum checks a wider range, in case a higher value can be found somewhere past the f' == 0 turning point. I'm not sure how NMaximize bounds the input values it checks, if no explicit bounds are provided by the user.
Can anybody confirm or deny -- is my understanding above correct, and is there any other difference between these functions?
Thank you.
Methodoption, to understand what each one does. Another difference, not discussed in the documentation, is thatNMinimizeis implemented in top-level Mathematica code, whereasFindMinimumis considerably lower-level (at least partly C/Fortran-based). This might also account for some of the speed discrepancy, albeit obviously only as a constant factor with all other things being equal. – Oleksandr R. Jan 9 at 13:30