tests/svd.r

suppressPackageStartupMessages(library(float))
set.seed(1234)

testd = function(test, truth) all.equal(dbl(test$d), truth$d, tol=tol)
testu = function(test, truth) all.equal(dbl(abs(test$u)), abs(truth$u), tol=tol)
testv = function(test, truth) all.equal(dbl(abs(test$v)), abs(truth$v), tol=tol)
same = function(test, truth)
{
  stopifnot(testd(test, truth))
  stopifnot(ifelse(is.null(test$u), is.null(truth$u), testu(test, truth)))
  stopifnot(ifelse(is.null(test$v), is.null(truth$v), testv(test, truth)))
}

tester = function(s, x, ...)
{
  test = La.svd(s, ...)
  truth = La.svd(x, ...)
  same(test, truth)
}

tol = 1e-5



### m > n
m = 10
n = 3

s = flrnorm(m, n)
x = dbl(s)

tester(s, x, nu=0, nv=0)

tester(s, x, nv=0)
tester(s, x, nu=m, nv=0)
tester(s, x, nu=m-1, nv=0)
tester(s, x, nu=n, nv=0)
tester(s, x, nu=n-1, nv=0)

tester(s, x, nu=0)
tester(s, x, nu=0, nv=n)
tester(s, x, nu=0, nv=n-1)

tester(s, x, nu=m, nv=n)
tester(s, x)



### svd() driver
test = svd(s)
truth = svd(x)
same(test, truth)



### m < n
m = 3
n = 10

s = t(s)
x = t(x)

tester(s, x, nu=0, nv=0)

tester(s, x, nv=0)
tester(s, x, nu=m, nv=0)
tester(s, x, nu=m-1, nv=0)

tester(s, x, nu=0, nv=n)
tester(s, x, nu=0, nv=n-1)
tester(s, x, nu=0, nv=m)
tester(s, x, nu=0, nv=m-1)

tester(s, x, nu=m, nv=n)
tester(s, x)

Try the float package in your browser

Any scripts or data that you put into this service are public.

float documentation built on Feb. 16, 2023, 6:43 p.m.