'sin(x)' is a character string, which is a vector of characters. Characters are internally represented in binary in terms of positions in a standardized set of characters. MATLAB in particular uses two byte Unicode, so characters are represented as binary values between 0 and 65535 . For example, 'A' represented by the value 65 -- char(65) == 'A'
The binary values that make up the string 'sin(x)' are [115 105 110 40 120 41] . The largest of those values is 120, and that is what max('sin(x)') returns.
max() cannot be applied to a function handle: it can only be applied to the result of invoking the function.
max() also cannot be applied to symbolic expressions. Historically it could not even be applied to numbers represented in symbolic form, but it is possible that that might be added by now. It is possible to call in to the symbolic engine to find the maximum of a vector or array of symbolic numbers, but the symbolic engine cannot find the maximum of a symbolic expression involving variables.
If you want to maximize a function by using calculus techniques then I do not see a predefined routine to do that at the moment. There is the traditional method of differentiating the function and finding the roots of the resulting expression to locate the critical points, and substituting the critical points into the second derivative in order to determine whether each point is a maximum or minimum.