From ea92ad7be46ac90b881235718148c8e53187c0f2 Mon Sep 17 00:00:00 2001 From: Chris Beall Date: Tue, 28 Sep 2010 17:56:29 +0000 Subject: [PATCH] updated to sort U in addition to S & V such that A = U*S*V' holds when sort=true --- base/svdcmp.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/base/svdcmp.cpp b/base/svdcmp.cpp index 136d229a6..fcd5d4112 100644 --- a/base/svdcmp.cpp +++ b/base/svdcmp.cpp @@ -267,14 +267,22 @@ void svdcmp(double **a, int m, int n, double w[], double **v, bool sort) { for (int i1 = 1; i1 <= n; i1++) { for (int i2 = i1+1; i2 <= n; i2++) { if (w[i1] < w[i2]) { + // sort S double temp = w[i1]; w[i1] = w[i2]; w[i2] = temp; + // sort V for (int j = 1; j <= n; j++) { double temp1 = v[j][i1]; v[j][i1] = v[j][i2]; v[j][i2] = temp1; } + // sort U + for (int j = 1; j <= m; j++) { + double temp1 = a[j][i1]; + a[j][i1] = a[j][i2]; + a[j][i2] = temp1; + } } } }