Mercurial > hg > octave-nkf
comparison liboctave/floatSVD.cc @ 10185:455759a5fcbe
fix norm and svd on empty matrices
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Fri, 22 Jan 2010 12:37:03 +0100 |
parents | 4c0cdbe0acca |
children | e317791645c4 |
comparison
equal
deleted
inserted
replaced
10184:b39bd23019eb | 10185:455759a5fcbe |
---|---|
135 | 135 |
136 octave_idx_type lwork = -1; | 136 octave_idx_type lwork = -1; |
137 | 137 |
138 Array<float> work (1); | 138 Array<float> work (1); |
139 | 139 |
140 octave_idx_type m1 = std::max (m, 1), nrow_vt1 = std::max (nrow_vt, 1); | |
141 | |
140 F77_XFCN (sgesvd, SGESVD, (F77_CONST_CHAR_ARG2 (&jobu, 1), | 142 F77_XFCN (sgesvd, SGESVD, (F77_CONST_CHAR_ARG2 (&jobu, 1), |
141 F77_CONST_CHAR_ARG2 (&jobv, 1), | 143 F77_CONST_CHAR_ARG2 (&jobv, 1), |
142 m, n, tmp_data, m, s_vec, u, m, vt, | 144 m, n, tmp_data, m1, s_vec, u, m1, vt, |
143 nrow_vt, work.fortran_vec (), lwork, info | 145 nrow_vt1, work.fortran_vec (), lwork, info |
144 F77_CHAR_ARG_LEN (1) | 146 F77_CHAR_ARG_LEN (1) |
145 F77_CHAR_ARG_LEN (1))); | 147 F77_CHAR_ARG_LEN (1))); |
146 | 148 |
147 lwork = static_cast<octave_idx_type> (work(0)); | 149 lwork = static_cast<octave_idx_type> (work(0)); |
148 work.resize (lwork); | 150 work.resize (lwork); |
149 | 151 |
150 F77_XFCN (sgesvd, SGESVD, (F77_CONST_CHAR_ARG2 (&jobu, 1), | 152 F77_XFCN (sgesvd, SGESVD, (F77_CONST_CHAR_ARG2 (&jobu, 1), |
151 F77_CONST_CHAR_ARG2 (&jobv, 1), | 153 F77_CONST_CHAR_ARG2 (&jobv, 1), |
152 m, n, tmp_data, m, s_vec, u, m, vt, | 154 m, n, tmp_data, m1, s_vec, u, m1, vt, |
153 nrow_vt, work.fortran_vec (), lwork, info | 155 nrow_vt1, work.fortran_vec (), lwork, info |
154 F77_CHAR_ARG_LEN (1) | 156 F77_CHAR_ARG_LEN (1) |
155 F77_CHAR_ARG_LEN (1))); | 157 F77_CHAR_ARG_LEN (1))); |
156 | 158 |
157 if (! (jobv == 'N' || jobv == 'O')) | 159 if (! (jobv == 'N' || jobv == 'O')) |
158 right_sm = right_sm.transpose (); | 160 right_sm = right_sm.transpose (); |