From: Knut G. <knu...@nt...> - 2009-08-07 15:20:17
|
Hello, I want to be able to use the Cholesky method in matlisp, i.e. access the functions dpotrf and dpotrs from lapack. I wrote the files needed, basically copying from getrf.lisp and getrs.lisp in matlisp/src. It compiles and everything looks OK. However, running (let* ((a (matlisp:make-real-matrix-dim 3 3))(ipiv (make-array 3 :element-type '(unsigned-byte 32)))(b (matlisp:make-real-matrix-dim 3 1)))(loop for i from 0 to 2 do (loop for j from 0 to 2 do (setf (matlisp:matrix-ref a i j) 10.0d0)))(setf (matlisp:matrix-ref a 0 0) 25.0d0)(setf (matlisp:matrix-ref a 2 2) 62.0d0)(setf (matlisp:matrix-ref a 0 1) -5.0d0)(setf (matlisp:matrix-ref a 1 0) -5.0d0)(setf (matlisp:matrix-ref a 1 1) 17.0d0)(setf (matlisp:matrix-ref b 0 0) 55.0d0)(setf (matlisp:matrix-ref b 1 0) -19.0d0)(setf (matlisp:matrix-ref b 2 0) 114.0d0)(matlisp:getrf! a ipiv )(matlisp:getrs! a ipiv b :trans :N)) gives the correct solution [1,-2,2], whilst (let* ((a (matlisp:make-real-matrix-dim 3 3))(b (matlisp:make-real-matrix-dim 3 1 )))(loop for i from 0 to 2 do (loop for j from 0 to 2 do (setf (matlisp:matrix-ref a i j) 10.0d0)))(setf (matlisp:matrix-ref a 0 0) 25.0d0)(setf (matlisp:matrix-ref a 2 2) 62.0d0)(setf (matlisp:matrix-ref a 0 1) -5.0d0)(setf (matlisp:matrix-ref a 1 0) -5.0d0)(setf (matlisp:matrix-ref a 1 1) 17.0d0)(setf (matlisp:matrix-ref b 0 0) 55.0d0)(setf (matlisp:matrix-ref b 1 0) -19.0d0)(setf (matlisp:matrix-ref b 2 0) 114.0d0)(matlisp:potrf! a :uplo :U)(print a)(print b)(matlisp:potrs! a b :uplo :U)) gives an error message: #<MATLISP:REAL-MATRIX 3 x 3 5.0000 -1.0000 2.0000 -5.0000 4.0000 3.0000 10.000 10.000 7.0000 > #<MATLISP:REAL-MATRIX 3 x 1 55.000 -19.000 114.00 > debugger invoked on a SIMPLE-TYPE-ERROR: The value of FORTRAN-FFI-ACCESSORS::VEC is 3, which is not of type FORTRAN-FFI-ACCESSORS::MATLISP-SPECIALIZED-ARRAY. Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL. restarts (invokable by number or by possibly-abbreviated name): 0: [STORE-VALUE] Supply a new value for FORTRAN-FFI-ACCESSORS::VEC. 1: [ABORT ] Exit debugger, returning to top level. (SB-KERNEL:CHECK-TYPE-ERROR FORTRAN-FFI-ACCESSORS::VEC 3 FORTRAN-FFI-ACCESSORS::MATLISP-SPECIALIZED-ARRAY NIL) 0] WARNING: Starting a select without a timeout while interrupts are disabled. I threw in the (print )s just to verify that both matrices are of type real-matrix. Why does this not give the correct answer and wat do I have to do? Thanks, Knut Gjerden |