comparison scripts/linear-algebra/condest.m @ 7312:1ebbf0924217

[project @ 2007-12-12 22:19:54 by jwe]
author jwe
date Wed, 12 Dec 2007 22:22:10 +0000
parents 1b535aed87e2
children fa78cb8d8a5c
comparison
equal deleted inserted replaced
7311:1b535aed87e2 7312:1ebbf0924217
109 print_usage (); 109 print_usage ();
110 endif 110 endif
111 111
112 default_t = 5; 112 default_t = 5;
113 113
114 have_A = false;
115 have_t = false;
116 have_solve = false;
117
114 if (ismatrix (varargin{1})) 118 if (ismatrix (varargin{1}))
115 A = varargin{1}; 119 A = varargin{1};
116 n = issquare (A); 120 n = issquare (A);
117 if (! n) 121 if (! n)
118 error ("condest: matrix must be square."); 122 error ("condest: matrix must be square.");
119 endif 123 endif
120 124 have_A = true;
121 if (nargin > 1 && isscalar (varargin{2})) 125
122 t = varargin{2}; 126 if (nargin > 1)
123 elseif (nargin > 2) 127 if (isscalar (varargin{2}))
124 solve = varargin{2}; 128 t = varargin{2};
125 solve_t = varargin{3}; 129 have_t = true;
126 if (nargin > 3) 130 elseif (nargin > 2)
127 t = varargin{4}; 131 solve = varargin{2};
132 solve_t = varargin{3};
133 have_solve = true;
134 if (nargin > 3)
135 t = varargin{4};
136 have_t = true;
137 endif
138 else
139 error ("condest: must supply both solve and solve_t.");
128 endif 140 endif
129 else
130 error ("condest: must supply both solve and solve_t.");
131 endif 141 endif
132 elseif (nargin > 4) 142 elseif (nargin > 4)
133 apply = varargin{1}; 143 apply = varargin{1};
134 apply_t = varargin{2}; 144 apply_t = varargin{2};
135 solve = varargin{3}; 145 solve = varargin{3};
136 solve_t = varargin{4}; 146 solve_t = varargin{4};
147 have_solve = true;
137 n = varargin{5}; 148 n = varargin{5};
138 if (! isscalar (n)) 149 if (! isscalar (n))
139 error ("condest: dimension argument of implicit form must be scalar."); 150 error ("condest: dimension argument of implicit form must be scalar.");
140 endif 151 endif
141 if (nargin > 5) 152 if (nargin > 5)
142 t = varargin{6}; 153 t = varargin{6};
154 have_t = true;
143 endif 155 endif
144 else 156 else
145 error ("condest: implicit form of condest requires at least 5 arguments."); 157 error ("condest: implicit form of condest requires at least 5 arguments.");
146 endif 158 endif
147 159
148 if (! exist ("t", "var")) 160 if (! have_t)
149 t = min (n, default_t); 161 t = min (n, default_t);
150 endif 162 endif
151 163
152 if (! exist ("solve", "var")) 164 if (! have_solve)
153 if (issparse (A)) 165 if (issparse (A))
154 [L, U, P, Pc] = splu (A); 166 [L, U, P, Pc] = splu (A);
155 solve = @(x) Pc' * (U\ (L\ (P*x))); 167 solve = @(x) Pc' * (U \ (L \ (P * x)));
156 solve_t = @(x) P'*(L'\ (U'\ (Pc*x))); 168 solve_t = @(x) P' * (L' \ (U' \ (Pc * x)));
157 else 169 else
158 [L, U, P] = lu (A); 170 [L, U, P] = lu (A);
159 solve = @(x) U\ (L\ (P*x)); 171 solve = @(x) U \ (L \ (P*x));
160 solve_t = @(x) P' * (L'\ (U'\x)); 172 solve_t = @(x) P' * (L' \ (U' \ x));
161 endif 173 endif
162 endif 174 endif
163 175
164 if (exist ("A", "var")) 176 if (have_A)
165 Anorm = norm (A, 1); 177 Anorm = norm (A, 1);
166 else 178 else
167 Anorm = onenormest (apply, apply_t, n, t); 179 Anorm = onenormest (apply, apply_t, n, t);
168 endif 180 endif
169 181