Both of them are direct solver to solve linear systems (opposing to iterative solver).
mldivide
does perform the tests for $A$ in solving $Ax = b$. Please see Allan's answer in this thread for more information. Also see MATLAB's help on mldivide
algorithm here.
mldivide
for square matrices: If A is symmetric and has real, positive diagonal elements, MATLAB attempts a Cholesky factorization. If the Cholesky factorization fails, MATLAB performs a symmetric, indefinite factorization. If A is upper Hessenberg, MATLAB uses Gaussian elimination to reduce the system to a triangular matrix. If A is square but is neither permuted triangular, symmetric and positive definite, or Hessenberg, then MATLAB performs a general triangular factorization using LU factorization with partial pivoting
linsolve
for square matrices: LU factorization with partial pivoting
mldivide
and linsolve
for rectangular matrices: QR factorization
In linsolve
as the help doc suggests in mathworks website, you could avoid the extra testing process (Allan used the word "overhead" in his answer) by using opts
if and only if you know what $A$ is like in advance. For large problems, you could save some time. For example:
opts.POSDEF = true; linsolve(A,b,opts)
would return $x$ if you know $A$ is positive definite in advance. However, an incorrectly chosen opts
leads to a wrong result.
If certain criteria are met, linsolve
and mldivide
do utilize the same factorization process. For example, for a dense positive definite system satisfying certain properties, or you have an overdetermined system and both perform least square fitting.
Moreover, linsolve
could also perform symbolic computation. This is handy when you have a small underdetermined system which has infinite number of solutions. linsolve
enables you to solve it symbolically, mldivide
can not do that. However, if the variables are not declared symbolically, mldivide
and linsolve
would give you the same warning message "Matrix is singular to working precision."
Last but not least, linsolve
does not support sparse systems like the following matrix (blue dot means non-zero entry). While mldivide
could handle sparse systems robustly when the size is under 200k by 200k.