diff --git a/matlab/solve1.m b/matlab/solve1.m
index 4c787ddc3085fdee954d1b5365079d264cf7f2d3..fd57b26187799d10a898cfedde248daa9f86a167 100644
--- a/matlab/solve1.m
+++ b/matlab/solve1.m
@@ -90,9 +90,14 @@ for its = 1:maxit
 
     g = (fvec'*fjac)';
     if debug
-        disp(['cond(fjac) ' num2str(cond(fjac))])
+        disp(['cond(fjac) ' num2str(condest(fjac))])
     end
-    if rcond(fjac) < sqrt(eps)
+    if issparse(fjac)
+        rcond_fjac = 1/condest(fjac);
+    else
+        rcond_fjac = rcond(fjac);
+    end
+    if rcond_fjac < sqrt(eps)
         fjac2=fjac'*fjac;
         p=-(fjac2+1e6*sqrt(nn*eps)*max(sum(abs(fjac2)))*eye(nn))\(fjac'*fvec);
     else