# using IJulia # notebook() push!(LOAD_PATH, pwd()) using MaxPlus set_tropical_display(0) Base.show(io::IO, ::MIME"text/latex", x::MI) = show(io, MIME"text/plain", x) Base.show(io::IO, ::MIME"text/latex", A::MIAbstractVecOrMat) = show(io, MIME"text/plain", A) a = MI(1.0); b = MI(3.5); c = MI(5) typeof(a), typeof(b), typeof(c) a, a.λ, typeof(a), typeof(a.λ) c, c.λ, typeof(c), typeof(c.λ) a, plustimes(a), typeof(a), typeof(plustimes(a)) a + a, plustimes(a) + plustimes(a) d = 1.0 typeof(d), typeof(c), typeof(c + d), typeof((c + d).λ), c + d f = 1 typeof(f), typeof(c), typeof(c + f), typeof((c + f).λ), c + f MP(MI(4)) MI(MP(4)) MI(MP([4 5])) # MI(4) + MP(4); as well as MI(4) * MP(4); mi0, mi1, mitop, zero(MI), one(MI) # Classic Julia-style display set_tropical_display(0) J = MI([+Inf 0; 0 +Inf]) # Display 0 as e set_tropical_display(2) J # Display +Inf as ε set_tropical_display(3) J # Display +Inf as ε and 0 as e set_tropical_display(4) J # Display +Inf as a . set_tropical_display(1) J a = MI(1); b = MI(3); c = MI(5); (a, b, c) a + b a + b == b + a a + b + c == (a + b) + c == a + (b + c) a + b + c # ≜ min(a, b, c) == min(1, 3, 5) a + mi0 == mi0 + a == a a + mi0 == mi0 + a == a (a, mi0), (a + mi0), (mi0 + a) a + 0 == 0 + a == a a, 0, a + 0 a + a # ≜ min(a, a) == min(1, 1) == 1 a * b # ≜ a + b == 1 + 3 == 4 a * b == b * a a * b * c == (a * b) * c == a * (b * c) a * b * c a * mie == mie * a == a a * mi1 == mi1 * a == a a * mi0 == mi0 * a == mi0 a * mi0 == mi0 * a == mi0 mitop * mi0 a * a # ≜ a + a == 1 + 1 == 2 (a + b) * c == (a * c) + (b * c) # => min(a, b) + c == min(a + c, b + c) (a * c) + (b * c) MI(2)^5 # ==> 2 * 5 MI(2)^0 # ==> 2 * 0 MI(2)^-1 # ==> 2 * -1 inv(MI(2)) MI(1:5) MI(1:0.5:3) [MI(1) 2; 3.5 4.0] MI([1 2; 3 4]) f = 3; a = MI(1) [f a f + f a + a] [mi0 2; 3.5 4] using SparseArrays; set_tropical_display(0); S = MI(sparse([1 2; 0 4])) S = sparse(MI([1 2; +Inf 4])) i,j,d = findnz(S) S = MI(sparse([1; 2; 3], [1; 2; 3], [42; 0; 5])) S = sparse([1; 2; 3], [1; 2; 3], MI([42; +Inf; 5])) S = MI([1; 2; 3], [1; 2; 3], MI([0; +Inf; 5])) A = MI([4 0; 7 +Inf]) plustimes(A) Z = spzeros(MI,2,2) plustimes(Z) Matrix(plustimes(Z)) full(Z), dense(Z), Matrix(Z) sparsevec([1, 3], MI([0, -Inf])) MI(sparsevec([1, 3], [0, -Inf])) MI([1, 3], [0, -Inf]) using LinearAlgebra I Matrix{MI}(I, 2, 2) miI Matrix(miI, 2, 2) Matrix(miI, 2, 2) == eye(MI,2,2), Matrix{MI}(I, 2, 2) == eye(MI,2,2) J = eye(MI,2,2) J = eye(MI,2) # Equivalent to eye(MI, 2,2) J = eye(MI,3,2) A = MI([1.0 -Inf; 0.0 4]) J = eye(A) O = ones(MI,2,2) O = ones(MI,2) # /!\ N'est pas équivalent à ones(MI,2,2) /!\ A = MI([1.0 -Inf; 0.0 4]) J = ones(A) Z = zeros(MI,2,2) Z = zeros(MI,2,3) Z = zeros(MI,2) Z = spzeros(MI,2,2) Z = spzeros(MI,2,3) Z = spzeros(MI,2) Z = full(zeros(MI,2,2)) diagm(MP([1,2,3])) spdiagm(MP([1,2,3])) A = MI([2; 8]) 4 .+ A A .+ 4.0 4 .* A A .* 4.0 MI([1 6; 8 3]) + MI([2 5; 3 3]) A = MI([4 3; 7 +Inf]) A * A A * A == A^2 A = MI([4 3; 7 +Inf]) sparse(A) A * sparse(A) == sparse(A) * A == sparse(A) * sparse(A) A^5 A^0 MI([2 0; mi0 5]) * MI([2; 8]) MI([2 8]) * MI([2 0; mi0 5]) A = MI([4 3; 7 +Inf]) A * eye(MI, 2,2) == eye(MI, 2,2) * A == A A * zeros(MI, 2,2) == zeros(MI, 2,2) * A == zeros(MI, 2,2) A + zeros(MI, 2,2) == zeros(MI, 2,2) + A == A set_tropical_display(0) LaTeX(stdout, eye(MI, 2,2)) set_tropical_display(2) LaTeX(stdout, eye(MI, 2,2)) set_tropical_display(1) LaTeX(stdout, zeros(MI, 2,2))