1.

SVDsums <- function(a)
{
   svdout <- svd(a)
   u <- svdout$u
   d <- svdout$d
   v <- svdout$v
   outlist <- list()
   matsum <- 0 * a
   for (i in 1:min(dim(a))) {
      term <- d[i] * u[,i] %*% t(v[,i])
      matsum <- matsum + term
      outlist[[i]] <- matsum
   }                 
   outlist           
}

set.seed(9999)
m <- matrix(sample(1:25,12),nrow=3)
SVDsums(m)[[2]]


2.  

The rank of a matrix product is less than or equal to the minimum of the
ranks of the factors.  Here the two factors are each of rank 1.  (It is
conceivable that the product is the 0 matrix, though, with rank 0.)


3.

set.seed(9999)
m <- matrix(sample(1:25,12),nrow=3)
m1 <- m
m1[3,1] <- NA

siout <- softImpute(m1)
aApprox <- siout$u %*% diag(siout$d) %*% t(siout$v)
err <- m - aApprox
print(sqrt(sum(err^2)))