Solvers accept matrix initial point x0, where matrix means an array of any size. They also accept matrix bounds lb and ub. Here's how solvers handle matrix arguments.
Internally, solvers convert matrix arguments into vectors before processing. For example, x0 becomes x0(:). For an explanation of this syntax, see the A(:) entry in colon.
For output, solvers reshape the solution x to the same size as the input x0.
When x0 is a matrix, solvers pass x as a matrix of the same size as x0 to both the objective function and to any nonlinear constraint function.
Linear constraints, though, take x in vector form, x(:). In other words, a linear constraint of the form
A*x ≤ b or Aeq*x = beq
takes x as a vector, not a matrix. Ensure that your matrix A or Aeq has the same number of columns as x0 has elements, or the solver will error.