//@code objref a, umat, vmat, dvec, dmat proc svdtest() { umat = new Matrix() vmat = new Matrix() dvec = $o1.svd(umat, vmat) dmat = new Matrix($o1.nrow, $o1.ncol) dmat.setdiag(0, dvec) print "dvec" dvec.printf print "dmat" dmat.printf print "umat" umat.printf print "vmat" vmat.printf print "input ", $o1 $o1.printf() print "ut*d*v" umat.transpose.mulm(dmat).mulm(vmat).printf } a = new Matrix(5, 3) a.setdiag(0, a.getdiag(0).indgen.add(1)) svdtest(a) a = new Matrix(6, 6) objref r r = new Random() r.discunif(1,10) for i=0, a.nrow-1 { a.setrow(i, a.getrow(i).setrand(r)) } svdtest(a) a = new Matrix(2,2) a.setrow(0, 1) a.setrow(1, 2) svdtest(a)