comparison liboctave/dbleQR.cc @ 7560:0ef0f9802a37

modify QR updating methods to use 0-based indexing
author Jaroslav Hajek <highegg@gmail.com>
date Wed, 05 Mar 2008 14:24:33 -0500
parents 07522d7dcdf8
children efccca5f2ad7
comparison
equal deleted inserted replaced
7559:07522d7dcdf8 7560:0ef0f9802a37
177 octave_idx_type n = r.columns (); 177 octave_idx_type n = r.columns ();
178 octave_idx_type k = q.columns (); 178 octave_idx_type k = q.columns ();
179 179
180 if (u.length () != m) 180 if (u.length () != m)
181 (*current_liboctave_error_handler) ("QR insert dimensions mismatch"); 181 (*current_liboctave_error_handler) ("QR insert dimensions mismatch");
182 else if (j < 1 || j > n+1) 182 else if (j < 0 || j > n)
183 (*current_liboctave_error_handler) ("QR insert index out of range"); 183 (*current_liboctave_error_handler) ("QR insert index out of range");
184 else 184 else
185 { 185 {
186 Matrix r1 (m, n+1); 186 Matrix r1 (m, n+1);
187 187
188 F77_XFCN (dqrinc, DQRINC, (m, n, k, q.fortran_vec (), r.data (), 188 F77_XFCN (dqrinc, DQRINC, (m, n, k, q.fortran_vec (), r.data (),
189 r1.fortran_vec (), j, u.data ())); 189 r1.fortran_vec (), j+1, u.data ()));
190 190
191 r = r1; 191 r = r1;
192 } 192 }
193 } 193 }
194 194
199 octave_idx_type k = r.rows (); 199 octave_idx_type k = r.rows ();
200 octave_idx_type n = r.columns (); 200 octave_idx_type n = r.columns ();
201 201
202 if (k < m && k < n) 202 if (k < m && k < n)
203 (*current_liboctave_error_handler) ("QR delete dimensions mismatch"); 203 (*current_liboctave_error_handler) ("QR delete dimensions mismatch");
204 else if (j < 1 || j > n) 204 else if (j < 0 || j > n-1)
205 (*current_liboctave_error_handler) ("QR delete index out of range"); 205 (*current_liboctave_error_handler) ("QR delete index out of range");
206 else 206 else
207 { 207 {
208 Matrix r1 (k, n-1); 208 Matrix r1 (k, n-1);
209 209
210 F77_XFCN (dqrdec, DQRDEC, (m, n, k, q.fortran_vec (), r.data (), 210 F77_XFCN (dqrdec, DQRDEC, (m, n, k, q.fortran_vec (), r.data (),
211 r1.fortran_vec (), j)); 211 r1.fortran_vec (), j+1));
212 212
213 r = r1; 213 r = r1;
214 } 214 }
215 } 215 }
216 216
220 octave_idx_type m = r.rows (); 220 octave_idx_type m = r.rows ();
221 octave_idx_type n = r.columns (); 221 octave_idx_type n = r.columns ();
222 222
223 if (! q.is_square () || u.length () != n) 223 if (! q.is_square () || u.length () != n)
224 (*current_liboctave_error_handler) ("QR insert dimensions mismatch"); 224 (*current_liboctave_error_handler) ("QR insert dimensions mismatch");
225 else if (j < 1 || j > m+1) 225 else if (j < 0 || j > m)
226 (*current_liboctave_error_handler) ("QR insert index out of range"); 226 (*current_liboctave_error_handler) ("QR insert index out of range");
227 else 227 else
228 { 228 {
229 Matrix q1 (m+1, m+1); 229 Matrix q1 (m+1, m+1);
230 Matrix r1 (m+1, n); 230 Matrix r1 (m+1, n);
231 231
232 F77_XFCN (dqrinr, DQRINR, (m, n, q.data (), q1.fortran_vec (), 232 F77_XFCN (dqrinr, DQRINR, (m, n, q.data (), q1.fortran_vec (),
233 r.data (), r1.fortran_vec (), j, u.data ())); 233 r.data (), r1.fortran_vec (), j+1, u.data ()));
234 234
235 q = q1; 235 q = q1;
236 r = r1; 236 r = r1;
237 } 237 }
238 } 238 }
243 octave_idx_type m = r.rows (); 243 octave_idx_type m = r.rows ();
244 octave_idx_type n = r.columns (); 244 octave_idx_type n = r.columns ();
245 245
246 if (! q.is_square ()) 246 if (! q.is_square ())
247 (*current_liboctave_error_handler) ("QR insert dimensions mismatch"); 247 (*current_liboctave_error_handler) ("QR insert dimensions mismatch");
248 else if (j < 1 || j > m) 248 else if (j < 0 || j > m-1)
249 (*current_liboctave_error_handler) ("QR delete index out of range"); 249 (*current_liboctave_error_handler) ("QR delete index out of range");
250 else 250 else
251 { 251 {
252 Matrix q1 (m-1, m-1); 252 Matrix q1 (m-1, m-1);
253 Matrix r1 (m-1, n); 253 Matrix r1 (m-1, n);
254 254
255 F77_XFCN (dqrder, DQRDER, (m, n, q.data (), q1.fortran_vec (), 255 F77_XFCN (dqrder, DQRDER, (m, n, q.data (), q1.fortran_vec (),
256 r.data (), r1.fortran_vec (), j )); 256 r.data (), r1.fortran_vec (), j+1 ));
257 257
258 q = q1; 258 q = q1;
259 r = r1; 259 r = r1;
260 } 260 }
261 } 261 }