Matrix norms¶
using FundamentalsNumericalComputation
A = [ 2 0; 1 -1 ]
2×2 Array{Int64,2}:
2 0
1 -1
In Julia one uses norm
for vector norms and for the Frobenius norm of a matrix, which is like stacking the matrix into a single vector before taking the 2-norm.
Fronorm = norm(A)
2.449489742783178
Most of the time we really want to use opnorm
for an induced matrix norm. The default is the 2-norm.
twonorm = opnorm(A)
2.2882456112707374
You can get the 1-norm as well.
onenorm = opnorm(A,1)
3.0
The 1-norm is equivalent to
maximum( sum(abs.(A),dims=1) ) # sum down the rows (1st matrix dimension)
3
Similarly, we can get the \(\infty\)-norm and check our formula for it.
infnorm = opnorm(A,Inf)
2.0
maximum( sum(abs.(A),dims=2) ) # sum across columns (2nd matrix dimension)
2
Here we illustrate the geometric interpretation of the 2-norm. First, we will sample a lot of vectors on the unit circle in \(\mathbb{R}^2\).
theta = 2pi*(0:1/600:1)
x = [ fun(t) for fun in [cos,sin], t in theta ] # 601 unit columns
plot(aspect_ratio=1, layout=(1,2), leg=:none, xlabel="\$x_1\$", ylabel="\$x_2\$")
plot!(x[1,:],x[2,:],subplot=1,title="Unit circle")
We can apply A
to every column of x
simply by using a matrix multiplication.
Ax = A*x;
The image of the transformed vectors is an ellipse.
plot!(Ax[1,:],Ax[2,:],subplot=2,title="Image under map")
That ellipse just touches the circle of radius \(\|A\|_2\).
plot!(twonorm*x[1,:],twonorm*x[2,:],subplot=2,l=:dash)