Use the infinity norm in vanilla_cgm().
authorMichael Orlitzky <michael@orlitzky.com>
Mon, 25 Mar 2013 16:49:58 +0000 (12:49 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Mon, 25 Mar 2013 16:49:58 +0000 (12:49 -0400)
Simplify the loop in vanilla_cgm().

optimization/vanilla_cgm.m

index 9ada2cb8026db12d5f66ac518879b2a3b438b398..c4d8f0796bd6721c96bb8c593dfbc3b8fa37d230 100644 (file)
@@ -40,17 +40,11 @@ function [x, k] = vanilla_cgm(A, b, x0, tolerance, max_iterations)
   sqrt_n = floor(sqrt(length(x0)));
 
   k = 0;
-  xk = x0; % Eschew the 'k' suffix on 'x' for simplicity.
+  xk = x0;
   rk = A*xk - b; % The first residual must be computed the hard way.
   pk = -rk;
 
-  while (k <= max_iterations)
-    if (norm(rk) < tolerance)
-       % Success.
-       x = xk;
-       return;
-    end
-
+  while (k <= max_iterations && norm(rk, 'inf') > tolerance)
     alpha_k = step_length_cgm(rk, A, pk);
     x_next = xk + alpha_k*pk;