From: Michael Orlitzky Date: Fri, 11 Nov 2016 01:23:24 +0000 (-0500) Subject: Add the specnorm() function to the matrices module. X-Git-Tag: 0.1.0~45 X-Git-Url: https://gitweb.michael.orlitzky.com/?a=commitdiff_plain;h=d124b9dd0399843680c16420e06fdf358e5ff401;p=dunshire.git Add the specnorm() function to the matrices module. --- diff --git a/dunshire/matrices.py b/dunshire/matrices.py index 123085c..a5a02e9 100644 --- a/dunshire/matrices.py +++ b/dunshire/matrices.py @@ -341,6 +341,42 @@ def norm(matrix_or_vector): return sqrt(inner_product(matrix_or_vector, matrix_or_vector)) +def specnorm(mat): + """ + Return the spectral norm of a matrix. + + The spectral norm of a matrix is its largest singular value, and it + corresponds to the operator norm induced by the vector ``2``-norm. + + Parameters + ---------- + + mat : matrix + The matrix whose spectral norm you want. + + Examples: + + >>> specnorm(identity(3)) + 1.0 + + >>> specnorm(5*identity(4)) + 5.0 + + """ + num_eigs = min(mat.size) + eigs = matrix(0, (num_eigs, 1), tc='d') + typecode = 'd' + if any([isinstance(entry, complex) for entry in mat]): + typecode = 'z' + dummy = matrix(mat, mat.size, tc=typecode) + gesdd(dummy, eigs) + + if len(eigs) > 0: + return eigs[0] + else: + return 0 + + def vec(mat): """ Create a long vector in column-major order from ``mat``.