From help-octave-request at bevo dot che dot wisc dot edu Wed Oct 18 01:54:13 2000 Subject: Re: reduced row echelon form From: Dirk Laurie To: Paul Kienzle Cc: ben partan , help-octave@bevo.che.wisc.edu Date: Wed, 18 Oct 2000 08:53:31 +0200 Paul Kienzle skryf: > I did some speed comparisons between your function and mine, and in the > process, discovered some problems: > > 1) does not handle empty matrices > 2) does not handle square matrices. Perhaps the final test should be > if length(j) 3) k is wrong for [R,k] = rref(...). Should return j instead of k? > 4) sometimes gives singular matrix warning and returns the wrong matrix > 5) Fails when find(U(i,:)) is empty > > Note that your function is up to 5x faster for square A, but can be > much, much slower for non-square A since it builds a square matrix > in the process of solving. I don't know how rref is usually used, so > I don't know which approach is better. Thanks for finding and correcting bugs 2 and 3. Bugs 1 and 5 are also easy to correct. Bug 4 can't be corrected easily: it is caused by the reliance on the `lu' function. (I have never understood why `lu' must take a square argument. The underlying Fortran code is trivially generalizable to the rectangular case: a simple question of changing the termination index of certain loops.) Given the fact that the RREF is used mainly for teaching and theoretical purposes (the SVD is preferable in applications), your code is preferable, since it directly reflects the way we teach students to compute the RREF. If speed ever is an issue, an .oct function is the way to go. Dirk ----------------------------------------------------------------------- Octave is freely available under the terms of the GNU GPL. Octave's home on the web: http://www.che.wisc.edu/octave/octave.html How to fund new projects: http://www.che.wisc.edu/octave/funding.html Subscription information: http://www.che.wisc.edu/octave/archive.html -----------------------------------------------------------------------