]> gitweb.michael.orlitzky.com - octave.git/blobdiff - optimization/vanilla_cgm.m
Replace step_length_cgm() with a direct call to step_length_positive_definite().
[octave.git] / optimization / vanilla_cgm.m
index 9ada2cb8026db12d5f66ac518879b2a3b438b398..b511b484dfaab2ecba7fa6b8702be5080f977ba9 100644 (file)
@@ -40,18 +40,12 @@ 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
-
-    alpha_k = step_length_cgm(rk, A, pk);
+  while (k <= max_iterations && norm(rk, 'inf') > tolerance)
+    alpha_k = step_length_positive_definite(rk, A, pk);
     x_next = xk + alpha_k*pk;
 
     % Avoid accumulated roundoff errors.