| 42 | 
  | 
     | 
| 43 | 
  | 
     | 
| 44 | 
  | 
    SVD (const DynamicRectMatrix<Real> &Arg) { | 
| 45 | 
– | 
             | 
| 45 | 
  | 
      m = Arg.getNRow(); | 
| 46 | 
  | 
      n = Arg.getNCol(); | 
| 47 | 
  | 
      int nu = min(m,n); | 
| 51 | 
  | 
      DynamicVector<Real> e(n); | 
| 52 | 
  | 
      DynamicVector<Real> work(m); | 
| 53 | 
  | 
      DynamicRectMatrix<Real> A(Arg); | 
| 54 | 
< | 
      int wantu = 1;                                    /* boolean */ | 
| 55 | 
< | 
      int wantv = 1;                                    /* boolean */ | 
| 54 | 
> | 
 | 
| 55 | 
> | 
      int wantu = 1;    /* boolean */ | 
| 56 | 
> | 
      int wantv = 1;    /* boolean */ | 
| 57 | 
  | 
      int i=0, j=0, k=0; | 
| 58 | 
  | 
       | 
| 59 | 
  | 
      // Reduce A to bidiagonal form, storing the diagonal elements | 
| 61 | 
  | 
       | 
| 62 | 
  | 
      int nct = min(m-1,n); | 
| 63 | 
  | 
      int nrt = max(0,min(n-2,m)); | 
| 64 | 
+ | 
 | 
| 65 | 
  | 
      for (k = 0; k < max(nct,nrt); k++) { | 
| 66 | 
  | 
        if (k < nct) { | 
| 67 | 
  | 
           |