int main() { array double a[3][2] = {7, 8, 1, 3, 6, 4}; /* m-by-n matrix */ int m = 3, n = 2, 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.812719 -0.288579 -0.506171 -0.217573 -0.655581 0.723102 -0.540508 0.697808 0.470016 s = 13.058084 2.118123 vt = -0.700689 0.713467 -0.713467 -0.700689 u*s*v^t = 7.000000 8.000000 1.000000 3.000000 6.000000 4.000000