~ubuntu-branches/ubuntu/wily/octave/wily

« back to all changes in this revision

Viewing changes to liboctave/fCmplxSVD.cc

  • Committer: Package Import Robot
  • Author(s): Sébastien Villemot
  • Date: 2013-05-14 12:42:41 UTC
  • mfrom: (5.1.3 experimental)
  • Revision ID: package-import@ubuntu.com-20130514124241-dqow8bc0l4r3yj93
Tags: 3.6.4-2
* Adapt for Texinfo 5
  - add_info_dir_categories: use @dircategory in the patch
  - texinfo5.diff: new patch, fixes compatibility issues with Texinfo 5
* Upgrade to FLTK 1.3

Show diffs side-by-side

added added

removed removed

Lines of Context:
120
120
      //
121
121
      // For Lapack 3.0, this problem seems to be fixed.
122
122
 
123
 
      jobu = 'N';
124
 
      jobv = 'N';
 
123
      jobu = jobv = 'N';
125
124
      ncol_u = nrow_vt = 1;
126
125
      break;
127
126
 
144
143
 
145
144
  FloatComplex *vt = right_sm.fortran_vec ();
146
145
 
147
 
  octave_idx_type lrwork = 5*max_mn;
148
 
 
149
 
  Array<float> rwork (dim_vector (lrwork, 1));
150
 
 
151
 
  // Ask ZGESVD what the dimension of WORK should be.
 
146
  // Query CGESVD for the correct dimension of WORK.
152
147
 
153
148
  octave_idx_type lwork = -1;
154
149
 
155
150
  Array<FloatComplex> work (dim_vector (1, 1));
156
151
 
157
152
  octave_idx_type one = 1;
158
 
  octave_idx_type m1 = std::max (m, one), nrow_vt1 = std::max (nrow_vt, one);
 
153
  octave_idx_type m1 = std::max (m, one);
 
154
  octave_idx_type nrow_vt1 = std::max (nrow_vt, one);
159
155
 
160
156
  if (svd_driver == SVD::GESVD)
161
157
    {
 
158
      octave_idx_type lrwork = 5*max_mn;
 
159
      Array<float> rwork (dim_vector (lrwork, 1));
 
160
 
162
161
      F77_XFCN (cgesvd, CGESVD, (F77_CONST_CHAR_ARG2 (&jobu, 1),
163
162
                                 F77_CONST_CHAR_ARG2 (&jobv, 1),
164
163
                                 m, n, tmp_data, m1, s_vec, u, m1, vt,
182
181
    {
183
182
      assert (jobu == jobv);
184
183
      char jobz = jobu;
 
184
 
 
185
      octave_idx_type lrwork;
 
186
      if (jobz == 'N')
 
187
        lrwork = 5*min_mn;
 
188
      else
 
189
        lrwork = min_mn * std::max (5*min_mn+7, 2*max_mn+2*min_mn+1);
 
190
      Array<float> rwork (dim_vector (lrwork, 1));
 
191
 
185
192
      OCTAVE_LOCAL_BUFFER (octave_idx_type, iwork, 8*min_mn);
186
193
 
187
194
      F77_XFCN (cgesdd, CGESDD, (F77_CONST_CHAR_ARG2 (&jobz, 1),