diff --git a/matlab/optimization/solve1.m b/matlab/optimization/solve1.m
index 5c2cd12464136755d0251e663b5ff0e0ab7c22ad..fa2cac7c297a44fe020d8601a30c3d58332ac4fc 100644
--- a/matlab/optimization/solve1.m
+++ b/matlab/optimization/solve1.m
@@ -123,7 +123,11 @@ for its = 1:maxit
         fjac2=fjac'*fjac;
         temp=max(sum(abs(fjac2)));
         if temp>0
-            p=-(fjac2+sqrt(nn*eps)*temp*eye(nn))\(fjac'*fvec);
+            if issparse(fjac)
+                p=-(fjac2+sqrt(nn*eps)*temp*speye(nn))\(fjac'*fvec);
+            else
+                p=-(fjac2+sqrt(nn*eps)*temp*eye(nn))\(fjac'*fvec);
+            end
         else
             errorflag = true;
             errorcode = 5;