public static boolean cs_lusol(int order, DZcs A, DZcsa b, double tol)
	{
		DZcsa x ;
		DZcss S ;
		DZcsn N ;
		int n ;
		boolean ok ;
		if (!CS_CSC (A) || b == null) return (false);	/* check inputs */
		n = A.n ;
		S = cs_sqr (order, A, false) ; 			/* ordering and symbolic analysis */
		N = cs_lu (A, S, tol) ;				/* numeric LU factorization */
		x = new DZcsa(n) ; 				/* get workspace */
		ok = (S != null && N != null) ;
		if (ok)
		{
			cs_ipvec (N.pinv, b, x, n) ;		/* x = b(p) */
			cs_lsolve (N.L, x) ;			/* x = L\x */
			cs_usolve (N.U, x) ;			/* x = U\x */
			cs_ipvec (S.q, x, b, n) ;		/* b(q) = x */
		}
		x = null ;
		S = null ;
		N = null ;
		return (ok) ;
	}
public static boolean cs_lusol ( int order , DZcs A , DZcsa b , double tol ) { DZcsa x ; DZcss S ; DZcsn N ; int n ; boolean ok ; if ( ! CS_CSC ( A ) || b == null ) return ( false ) ; n = A . n ; S = cs_sqr ( order , A , false ) ; N = cs_lu ( A , S , tol ) ; x = new DZcsa ( n ) ; ok = ( S != null && N != null ) ; if ( ok ) { cs_ipvec ( N . pinv , b , x , n ) ; cs_lsolve ( N . L , x ) ; cs_usolve ( N . U , x ) ; cs_ipvec ( S . q , x , b , n ) ; } x = null ; S = null ; N = null ; return ( ok ) ; }
Solves Ax=b, where A is square and nonsingular. b overwritten with
solution. Partial pivoting if tol = 1.

@param order
ordering method to use (0 to 3)
@param A
column-compressed matrix
@param b
size n, b on input, x on output
@param tol
partial pivoting tolerance
@return true if successful, false on error