Test matrices are widely used for measuring the performance of an algorithm with respect to accuracy, stability or speed; testing the correctness and robustness of an algorithm on a wide range of problems; and comparing competing algorithms.

Various collections of test matrices have been made available in software, including:

- MATLAB gallery (based upon Higham’s Test Matrices for MATLAB) http://uk.mathworks.com/help/matlab/ref/gallery.html
- the University of Florida Sparse Matrix Collection https://www.cise.ufl.edu/research/sparse/matrices/
- the CONTEST Toolbox http://strathprints.strath.ac.uk/15066/
- Hansen’s Regularzation Tools http://www.imm.dtu.dk/~pcha/Regutools/
- Matrix Market http://math.nist.gov/MatrixMarket/

This blog entry is about Matrix Depot, a test matrix collection for the Julia language. Matrix Depot coalesces parameterized test matrices, regularization test problems, and real-life sparse matrix data into a single framework. It not only provides a diverse collection of test matrices but is also extensible and personalizable.

## 1 Extending the Collection

When Matrix Depot (v0.5.x) is first installed, we have 55 test matrices available to use. Matrices can be easily generated using the interface `matrixdepot("name", p1, p2,...)`

, where `name`

is the matrix name and `p1, p2,...`

are input parameters depending on `name`

. For example, the following command will generate a 12-by-12 Wilkinson matrix and then display a 2-D color image of the matrix using PyPlot.

julia> using MatrixDepot julia> A = matrixdepot("wilkinson", 12) julia> using PyPlot julia> matshow(A)

Figure 1: A 12-by-12 Wilkinson matrix.

We can extend the collection by downloading matrices from the University of Florida Sparse Matrix Collection using the interface `matrixdepot(name, :get)`

. For example, we can download the matrix `web-Google`

from SNAP (Stanford Network Analysis Platform) by

julia> matrixdepot("SNAP/web-Google", :get)

In addition, we can easily add new matrix generators to Matrix Depot. See http://matrixdepotjl.readthedocs.org/en/latest/user.html for more details.

## 2 Defining Personalized Groups

Matrix Depot has 10 predefined groups. The function `matrixdepot(group)`

returns a list of matrices in a given `group`

. For example, here a list of random matrices in Matrix Depot.

julia> matrixdepot("random") 8-element Array{ASCIIString,1}: "golub" "oscillate" "randcorr" "rando" "randsvd" "rohess" "rosser" "wathen"

Every test matrix in Matrix Depot is assigned a unique number. We can access matrices by number and test an algorithm on a group of matrices in a simple loop.

julia> matrixdepot(2, 4, 22:24) 5-element Array{AbstractString,1}: "binomial" "cauchy" "hilb" "invhilb" "invol" julia> for name in matrixdepot(2, 4, 22:24) A = matrixdepot(name, 4) @printf "%9s has 2-norm %0.3f\n" name norm(A) end binomial has 2-norm 4.576 cauchy has 2-norm 0.978 hilb has 2-norm 1.500 invhilb has 2-norm 10341.015 invol has 2-norm 313.525

A user can define new groups with the macro `@addgroup`

and use them just as the predefined groups.

julia> @addgroup testforAlg1 = matrixdepot(2, 4, 22:24)

By extending the collection and defining new groups, Matrix Depot allows you to design your personal test collection.

Author: Weijian Zhang, weijian.zhang@manchester.ac.uk