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");