Eigenvalue computations

For the Information Expression $2H(X1,X2|X3)+I(X1;X2|X3)+2H(X1,X3)+2I(X;Y)$, the canonical representation is $-2H(X,Y)+2H(X)+H(X1,X2,X3)+3H(X1,X3)+H(X2,X3)-3H(X3)+2H(Y)$.

using InformationInequalities
SE="2H(X1,X2|X3)+I(X1;X2|X3)+2H(X1,X3)+2I(X;Y)"
A5=LinearInformationExpressionToCanonical(SE)
#plotEntropyTree(A5,curves=false,nodecolor=:skyblue,edgecolor=:gray,nodesize=0.13,nodeshape=:rect,titlefontsize=10,title=latexstring(replace((A5),"*"=>""," "=>"")))
"+2H(X1,X2,X3)-2H(X3)+1H(X1,X3)+1H(X2,X3)-1H(X1,X2,X3)-1H(X3)+2H(X1,X3)+2H(X)+2H(Y)-2H(X,Y)"

With simplification simplifyH(A5) we get

Using the functions PlotIE or PlotInformationExpression, it is easy to visualize the tree graph of the canonical decomposition.

using InformationInequalities
using LaTeXStrings
using Plots
E="2I(X;Y|Z)+3H(Z)"
#plotIE(E,nodecolor=:forestgreen)
plotIE(E,nodecolor=:lightgreen,curves=false,nodesize=0.2,edgecolor=:lightgray,nodeshape=:rect,title=latexstring(LinearInformationExpressionToCanonical(E))); # Hide
savefig("gplotEx0.svg");

Another topic TBD

For now duplicate and see if it works (FixMe)

Given a (real or complex) interval matrix $A\in\mathbb{IC}^{n\times n}$, we define the eigenvalue set

\[\mathbf{\Lambda}=\{\lambda\in\mathbb{C}: \lambda\text{ is an eigenvalue of }A\text{ for some }A\in\mathbf{A}\}.\]

While characterizing the solution set $\mathbf{\Lambda}$ (or even its hull) is computationally challenging, the package offers the function TBD which contains an interval box containing $\mathbf{\Lambda}$.

Note

At the moment, eigenbox is not rigorous, that is the computations for the non-interval eigenvalue problem solved internally are carried out using normal non-verified floating point computations.

To demonstrate the functionality, let us consider the following interval matrix

using InformationInequalities

A = [3 2 1
     2 2 2
     0 1 2]
3×3 Matrix{Int64}:
 3  2  1
 2  2  2
 0  1  2

To get a qualitative evaluation of the enclosure, we can simulate the solution set of $\mathbf{A}$ using Montecarlo, as it is done in the following example

using LinearAlgebra;
using Plots
N = 1000

evalues = zeros(ComplexF64, 4, N)

for i in 1:N
    evalues[:, i] = eigvals(rand(4,4))
end

rpart = real.(evalues)
ipart = imag.(evalues)

plot(; ratio=1, label="enclosure")
scatter!(rpart[1, :], ipart[1, :]; label="λ₁")
scatter!(rpart[2, :], ipart[2, :]; label="λ₂")
scatter!(rpart[3, :], ipart[3, :]; label="λ₃")
scatter!(rpart[4, :], ipart[4, :]; label="λ₄")
xlabel!("real")
ylabel!("imag")

Internally, the generical interval eigenvalue problem is