Mercurial > octave-nkf
comparison src/DLD-FUNCTIONS/chol.cc @ 9862:c0aeedd8fb86
improve chol Matlab compatibility
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Wed, 25 Nov 2009 07:31:59 +0100 |
parents | 09da0bd91412 |
children | 40dfc0c99116 |
comparison
equal
deleted
inserted
replaced
9861:cd53ecf0d79a | 9862:c0aeedd8fb86 |
---|---|
49 static octave_value | 49 static octave_value |
50 get_chol_r (const CHOLT& fact) | 50 get_chol_r (const CHOLT& fact) |
51 { | 51 { |
52 return octave_value (fact.chol_matrix (), | 52 return octave_value (fact.chol_matrix (), |
53 MatrixType (MatrixType::Upper)); | 53 MatrixType (MatrixType::Upper)); |
54 } | |
55 | |
56 template <class CHOLT> | |
57 static octave_value | |
58 get_chol_l (const CHOLT& fact) | |
59 { | |
60 return octave_value (fact.chol_matrix ().transpose (), | |
61 MatrixType (MatrixType::Lower)); | |
54 } | 62 } |
55 | 63 |
56 DEFUN_DLD (chol, args, nargout, | 64 DEFUN_DLD (chol, args, nargout, |
57 "-*- texinfo -*-\n\ | 65 "-*- texinfo -*-\n\ |
58 @deftypefn {Loadable Function} {@var{r} =} chol (@var{a})\n\ | 66 @deftypefn {Loadable Function} {@var{r} =} chol (@var{a})\n\ |
241 { | 249 { |
242 octave_idx_type info; | 250 octave_idx_type info; |
243 FloatCHOL fact (m, info); | 251 FloatCHOL fact (m, info); |
244 if (nargout == 2 || info == 0) | 252 if (nargout == 2 || info == 0) |
245 { | 253 { |
246 retval(1) = static_cast<float> (info); | 254 retval(1) = info; |
247 if (LLt) | 255 if (LLt) |
248 retval(0) = fact.chol_matrix ().transpose (); | 256 retval(0) = get_chol_l (fact); |
249 else | 257 else |
250 retval(0) = get_chol_r (fact); | 258 retval(0) = get_chol_r (fact); |
251 } | 259 } |
252 else | 260 else |
253 error ("chol: matrix not positive definite"); | 261 error ("chol: matrix not positive definite"); |
261 { | 269 { |
262 octave_idx_type info; | 270 octave_idx_type info; |
263 FloatComplexCHOL fact (m, info); | 271 FloatComplexCHOL fact (m, info); |
264 if (nargout == 2 || info == 0) | 272 if (nargout == 2 || info == 0) |
265 { | 273 { |
266 retval(1) = static_cast<float> (info); | 274 retval(1) = info; |
267 if (LLt) | 275 if (LLt) |
268 retval(0) = fact.chol_matrix ().hermitian (); | 276 retval(0) = get_chol_l (fact); |
269 else | 277 else |
270 retval(0) = get_chol_r (fact); | 278 retval(0) = get_chol_r (fact); |
271 } | 279 } |
272 else | 280 else |
273 error ("chol: matrix not positive definite"); | 281 error ("chol: matrix not positive definite"); |
286 { | 294 { |
287 octave_idx_type info; | 295 octave_idx_type info; |
288 CHOL fact (m, info); | 296 CHOL fact (m, info); |
289 if (nargout == 2 || info == 0) | 297 if (nargout == 2 || info == 0) |
290 { | 298 { |
291 retval(1) = static_cast<double> (info); | 299 retval(1) = info; |
292 if (LLt) | 300 if (LLt) |
293 retval(0) = fact.chol_matrix ().transpose (); | 301 retval(0) = get_chol_l (fact); |
294 else | 302 else |
295 retval(0) = get_chol_r (fact); | 303 retval(0) = get_chol_r (fact); |
296 } | 304 } |
297 else | 305 else |
298 error ("chol: matrix not positive definite"); | 306 error ("chol: matrix not positive definite"); |
306 { | 314 { |
307 octave_idx_type info; | 315 octave_idx_type info; |
308 ComplexCHOL fact (m, info); | 316 ComplexCHOL fact (m, info); |
309 if (nargout == 2 || info == 0) | 317 if (nargout == 2 || info == 0) |
310 { | 318 { |
311 retval(1) = static_cast<double> (info); | 319 retval(1) = info; |
312 if (LLt) | 320 if (LLt) |
313 retval(0) = fact.chol_matrix ().hermitian (); | 321 retval(0) = get_chol_l (fact); |
314 else | 322 else |
315 retval(0) = get_chol_r (fact); | 323 retval(0) = get_chol_r (fact); |
316 } | 324 } |
317 else | 325 else |
318 error ("chol: matrix not positive definite"); | 326 error ("chol: matrix not positive definite"); |