int main() { /* singular matrix */ array float a[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; int m = 3, n = 3, i; int lmn = min(m,n); array double s[lmn], sm[m][n]; array double u[m][m]; array double vt[n][n]; svd(a, s, u, vt); printf("u =\n%f\n", u); printf("s =\n%f\n", s); printf("vt =\n%f\n", vt); for(i=0; i<lmn; i++) sm[i][i] = s[i]; printf("u*s*v^t =\n%f\n", u*sm*transpose(vt)); }
u = -0.214837 0.887231 0.408248 -0.520587 0.249644 -0.816497 -0.826338 -0.387943 0.408248 s = 16.848103 1.068370 0.000000 vt = -0.479671 -0.776691 -0.408248 -0.572368 -0.075686 0.816497 -0.665064 0.625318 -0.408248 u*s*v^t = 1.000000 2.000000 3.000000 4.000000 5.000000 6.000000 7.000000 8.000000 9.000000