//@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)

