Mercurial > hg > octave-lyh
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 } |