Norm, Condition Number and Separation Estimations
MatrixEquations.opnorm1
— Functionγ = opnorm1(op)
Compute γ
, the induced 1
-norm of the linear operator op
, as the maximum of 1
-norm of the columns of the associated m x n
matrix $M$ = Matrix(op)
:
\[\gamma = \|op\|_1 := \max_{1 ≤ j ≤ n} \|M_j\|_1\]
with $M_j$ the j
-th column of $M$. This function is not recommended to be used for large order operators.
Examples
julia> A = [-6. -2. 1.; 5. 1. -1; -4. -2. -1.]
3×3 Array{Float64,2}:
-6.0 -2.0 1.0
5.0 1.0 -1.0
-4.0 -2.0 -1.0
julia> opnorm1(lyapop(A))
30.0
julia> opnorm1(invlyapop(A))
3.7666666666666706
MatrixEquations.opnorm1est
— Functionγ = opnorm1est(op)
Compute γ
, a lower bound of the 1
-norm of the square linear operator op
, using reverse communication based computations to evaluate op * x
and op' * x
. It is expected that in most cases $\gamma > \|op\|_1/10$, which is usually acceptable for estimating the condition numbers of linear operators.
Examples
julia> A = [-6. -2. 1.; 5. 1. -1; -4. -2. -1.]
3×3 Array{Float64,2}:
-6.0 -2.0 1.0
5.0 1.0 -1.0
-4.0 -2.0 -1.0
julia> opnorm1est(lyapop(A))
18.0
julia> opnorm1est(invlyapop(A))
3.76666666666667
MatrixEquations.oprcondest
— Functionrcond = oprcondest(op, opinv; exact = false)
Compute rcond
, an estimation of the 1
-norm reciprocal condition number of a linear operator op
, where opinv
is the inverse operator inv(op)
. The estimate is computed as $\text{rcond} = 1 / (\|op\|_1\|opinv\|_1)$, using estimates of the 1
-norm, if exact = false
, or computed exact values of the 1
-norm, if exact = true
. The exact = true
option is not recommended for large order operators.
Note: No check is performed to verify that opinv = inv(op)
.
Examples
julia> A = [-6. -2. 1.; 5. 1. -1; -4. -2. -1.]
3×3 Array{Float64,2}:
-6.0 -2.0 1.0
5.0 1.0 -1.0
-4.0 -2.0 -1.0
julia> oprcondest(lyapop(A),invlyapop(A))
0.014749262536873142
julia> 1/opnorm1est(lyapop(A))/opnorm1est(invlyapop(A))
0.014749262536873142
julia> oprcondest(lyapop(A),invlyapop(A),exact = true)
0.008849557522123885
julia> 1/opnorm1(lyapop(A))/opnorm1(invlyapop(A))
0.008849557522123885
rcond = oprcondest(op; exact = false)
Compute rcond
, an estimation of the 1
-norm reciprocal condition number of a linear operator op
, where op
is one of the defined Lyapunov or Sylvester operators. The estimate is computed as $\text{rcond} = 1 / (\|op\|_1\|inv(op)\|_1)$, using estimates of the 1
-norm, if exact = false
, or computed exact values of the 1
-norm, if exact = true
. The exact = true
option is not recommended for large order operators.
MatrixEquations.opsepest
— Functionsep = opsepest(opinv; exact = false)
Compute sep
, an estimation of the 1
-norm separation of a linear operator op
, where opinv
is the inverse operator inv(op)
. The estimate is computed as $\text{sep} = 1 / \|opinv\|_1$ , using an estimate of the 1
-norm, if exact = false
, or the computed exact value of the 1
-norm, if exact = true
. The exact = true
option is not recommended for large order operators.
The separation of the operator op
is defined as
\[\text{sep} = \displaystyle\min_{X\neq 0} \frac{\|op*X\|}{\|X\|}.\]
An estimate of the reciprocal condition number of op
can be computed as $\text{sep}/\|op\|_1$.
Example
julia> A = [-6. -2. 1.; 5. 1. -1; -4. -2. -1.]
3×3 Array{Float64,2}:
-6.0 -2.0 1.0
5.0 1.0 -1.0
-4.0 -2.0 -1.0
julia> opsepest(invlyapop(A))
0.26548672566371656
julia> 1/opnorm1est(invlyapop(A))
0.26548672566371656
julia> opsepest(invlyapop(A),exact = true)
0.26548672566371656
julia> 1/opnorm1(invlyapop(A))
0.26548672566371656