public static boolean solve(DMatrixRMaj a , DMatrixRMaj b , DMatrixRMaj x )
    {
        x.reshape(a.numCols,b.numCols);

        LinearSolverDense<DMatrixRMaj> solver = LinearSolverFactory_DDRM.general(a.numRows,a.numCols);

        // make sure the inputs 'a' and 'b' are not modified
        solver = new LinearSolverSafe<>(solver);

        if( !solver.setA(a) )
            return false;

        solver.solve(b, x);
        return true;
    }
public static boolean solve ( DMatrixRMaj a , DMatrixRMaj b , DMatrixRMaj x ) { x . reshape ( a . numCols , b . numCols ) ; LinearSolverDense < DMatrixRMaj > solver = LinearSolverFactory_DDRM . general ( a . numRows , a . numCols ) ; solver = new LinearSolverSafe < > ( solver ) ; if ( ! solver . setA ( a ) ) return false ; solver . solve ( b , x ) ; return true ; }
<p>
Solves for x in the following equation:<br>
<br>
A*x = b
</p>

<p>
If the system could not be solved then false is returned.  If it returns true
that just means the algorithm finished operating, but the results could still be bad
because 'A' is singular or nearly singular.
</p>

<p>
If repeat calls to solve are being made then one should consider using {@link LinearSolverFactory_DDRM}
instead.
</p>

<p>
It is ok for 'b' and 'x' to be the same matrix.
</p>

@param a A matrix that is m by n. Not modified.
@param b A matrix that is n by k. Not modified.
@param x A matrix that is m by k. Modified.

@return true if it could invert the matrix false if it could not.