# HG changeset patch # User jwe # Date 1197498130 0 # Node ID 1ebbf09242176e3805262297f916d2042a24a5af # Parent 1b535aed87e26408af83e11c3be23fd7a6ce17ec [project @ 2007-12-12 22:19:54 by jwe] diff -r 1b535aed87e2 -r 1ebbf0924217 scripts/ChangeLog --- a/scripts/ChangeLog Wed Dec 12 22:13:44 2007 +0000 +++ b/scripts/ChangeLog Wed Dec 12 22:22:10 2007 +0000 @@ -1,8 +1,8 @@ 2007-12-12 John W. Eaton * linear-algebra/condest.m: Use nargin instead of size(varargin,2). - Condense argument processing logic. Allow 6 arguments. - Use issquare. + Condense argument processing logic. Allow 6 arguments. + Use issquare. Avoid calling "exist". * plot/__go_draw_axes__.m: Handle the axes layer property. diff -r 1b535aed87e2 -r 1ebbf0924217 scripts/linear-algebra/condest.m --- a/scripts/linear-algebra/condest.m Wed Dec 12 22:13:44 2007 +0000 +++ b/scripts/linear-algebra/condest.m Wed Dec 12 22:22:10 2007 +0000 @@ -111,57 +111,69 @@ default_t = 5; + have_A = false; + have_t = false; + have_solve = false; + if (ismatrix (varargin{1})) A = varargin{1}; n = issquare (A); if (! n) error ("condest: matrix must be square."); endif + have_A = true; - if (nargin > 1 && isscalar (varargin{2})) - t = varargin{2}; - elseif (nargin > 2) - solve = varargin{2}; - solve_t = varargin{3}; - if (nargin > 3) - t = varargin{4}; + if (nargin > 1) + if (isscalar (varargin{2})) + t = varargin{2}; + have_t = true; + elseif (nargin > 2) + solve = varargin{2}; + solve_t = varargin{3}; + have_solve = true; + if (nargin > 3) + t = varargin{4}; + have_t = true; + endif + else + error ("condest: must supply both solve and solve_t."); endif - else - error ("condest: must supply both solve and solve_t."); endif elseif (nargin > 4) apply = varargin{1}; apply_t = varargin{2}; solve = varargin{3}; solve_t = varargin{4}; + have_solve = true; n = varargin{5}; if (! isscalar (n)) error ("condest: dimension argument of implicit form must be scalar."); endif if (nargin > 5) t = varargin{6}; + have_t = true; endif else error ("condest: implicit form of condest requires at least 5 arguments."); endif - if (! exist ("t", "var")) + if (! have_t) t = min (n, default_t); endif - if (! exist ("solve", "var")) + if (! have_solve) if (issparse (A)) [L, U, P, Pc] = splu (A); - solve = @(x) Pc' * (U\ (L\ (P*x))); - solve_t = @(x) P'*(L'\ (U'\ (Pc*x))); + solve = @(x) Pc' * (U \ (L \ (P * x))); + solve_t = @(x) P' * (L' \ (U' \ (Pc * x))); else [L, U, P] = lu (A); - solve = @(x) U\ (L\ (P*x)); - solve_t = @(x) P' * (L'\ (U'\x)); + solve = @(x) U \ (L \ (P*x)); + solve_t = @(x) P' * (L' \ (U' \ x)); endif endif - if (exist ("A", "var")) + if (have_A) Anorm = norm (A, 1); else Anorm = onenormest (apply, apply_t, n, t);