added csolve_sparse()