tensor_methods

Tensor Methods for DS and SC
git clone git://popovic.xyz/tensor_methods.git
Log | Files | Refs

main.jl (3834B)


      1 #/usr/bin/julia
      2 
      3 using LinearAlgebra
      4 using Plots
      5 using Plots.Measures
      6 using Distributions
      7 using LaTeXStrings
      8 using TSVD: tsvd
      9 using TensorToolbox: tenmat, ttm, contract # todo:implement
     10 
     11 include("arithmetic.jl")
     12 include("helpers.jl")
     13 include("ttmps.jl")
     14 
     15 function main()
     16     # Exercise 3a)
     17     n = 10
     18     d = 4
     19     p_Σ = []
     20     p_R = []
     21     global R_x = []; global R_y = []; global R_s = []; global R_z = []
     22     for (p, q) ∈ ([3, 4], [5, 7])
     23         X = [che_pol(sum([t_1/1, t_2/2, t_3/3, t_4/4]), p) for t_1 ∈ t(n), t_2 ∈ t(n), t_3 ∈ t(n), t_4 ∈ t(n)];
     24         Y = [che_pol(sum([t_1/1, t_2/2, t_3/3, t_4/4]), q) for t_1 ∈ t(n), t_2 ∈ t(n), t_3 ∈ t(n), t_4 ∈ t(n)];
     25         S = X .+ Y;
     26         Z = X .* Y;
     27         global X_Σ = []; global Y_Σ = []; global S_Σ = []; global Z_Σ = []
     28         global r_x = []; global r_y = []; global r_s = []; global r_z = []
     29         for k ∈ 1:d-1
     30             X_k = ttmps_unfold(X, k)
     31             Y_k = ttmps_unfold(Y, k)
     32             S_k = ttmps_unfold(S, k)
     33             Z_k = ttmps_unfold(Z, k)
     34             _, σ_x, _ = svd(X_k)
     35             _, σ_y, _ = svd(Y_k)
     36             _, σ_s, _ = svd(S_k)
     37             _, σ_z, _ = svd(Z_k)
     38             append!(X_Σ, [σ_x])
     39             append!(Y_Σ, [σ_y])
     40             append!(S_Σ, [σ_s])
     41             append!(Z_Σ, [σ_z])
     42             append!(r_x, rank(X_k))
     43             append!(r_y, rank(Y_k))
     44             append!(r_s, rank(S_k))
     45             append!(r_z, rank(Z_k))
     46         end
     47         append!(R_x, [r_x])
     48         append!(R_y, [r_y])
     49         append!(R_s, [r_s])
     50         append!(R_z, [r_z])
     51 
     52         p_σ = plot(layout = 4, margin=5mm, size=(800, 800), title="p=$p, q=$q", dpi=500)
     53         plot!(p_σ[1], X_Σ, markershape=:circle, ylabel=L"\Sigma_{X_k}", label=[L"X_1" L"X_2" L"X_3"])
     54         plot!(p_σ[2], Y_Σ, markershape=:circle, ylabel=L"\Sigma_{Y_k}", label=[L"Y_1" L"Y_2" L"Y_3"])
     55         plot!(p_σ[3], S_Σ, markershape=:circle, ylabel=L"\Sigma_{S_k}", label=[L"S_1" L"S_2" L"S_3"])
     56         plot!(p_σ[4], Z_Σ, markershape=:circle, ylabel=L"\Sigma_{Z_k}", label=[L"Z_1" L"Z_2" L"Z_3"])
     57         append!(p_Σ, [p_σ])
     58         p_r = plot(margin=5mm, size=(500, 350), title="p=$p, q=$q", ylabel=L"r_k", dpi=300)
     59         plot!(p_r, r_x, markershape=:circle, label=L"r_X")
     60         plot!(p_r, r_y, markershape=:circle, label=L"r_Y")
     61         plot!(p_r, r_s, markershape=:circle, label=L"r_S", alpha=0.5)
     62         plot!(p_r, r_z, markershape=:circle, label=L"r_Z")
     63         append!(p_R, [p_r])
     64     end
     65     savefig(p_Σ[1], "./plots/sigma_34.png")
     66     savefig(p_Σ[2], "./plots/sigma_57.png")
     67     savefig(p_R[1], "./plots/rank_34.png")
     68     savefig(p_R[2], "./plots/rank_57.png")
     69 
     70 
     71     # Exercise 3b)
     72     n = 10; p = 5; q = 7
     73     dims = [10 for i ∈ 1:4]
     74 
     75     X = [che_pol(sum([t_1/1, t_2/2, t_3/3, t_4/4]), p) for t_1 ∈ t(n), t_2 ∈ t(n), t_3 ∈ t(n), t_4 ∈ t(n)];
     76     Y = [che_pol(sum([t_1/1, t_2/2, t_3/3, t_4/4]), q) for t_1 ∈ t(n), t_2 ∈ t(n), t_3 ∈ t(n), t_4 ∈ t(n)];
     77     S = X .+ Y
     78     Z = X .* Y
     79 
     80     #C_x, r_x, σ_x, ϵ_x = tt_svd_ϵ(X, 1e-12);
     81     #C_y, r_y, σ_y, ϵ_y = tt_svd_ϵ(Y, 1e-12);
     82     C_x, σ_x, ϵ_x = tt_svd(X, R_x[2]);
     83     C_y, σ_y, ϵ_y = tt_svd(Y, R_y[2]);
     84     C_s = tt_add(C_x, C_y, 1, 1);
     85     C_z = tt_mult(C_x, C_y);
     86 
     87     ##Q_s, r_s = t_mpstt_ϵ(C_s, 1e-12);
     88     ##Q_z, r_z = t_mpstt_ϵ(C_z, 1e-7);
     89     Q_s = t_mpstt(C_s, R_s[2]);
     90     Q_z = t_mpstt(C_z, R_z[2]);
     91 
     92     println("Exercise 3b")
     93     println("|ttmps_eval(C_s) - S||_F/||S||_F = $(norm(S - ttmps_eval(C_s, dims))/norm(S))")
     94     println("|ttmps_eval(C_z) - Z||_F/||Z||_F = $(norm(Z - ttmps_eval(C_z, dims))/norm(Z))")
     95     println()
     96     println("|ttmps_eval(Q_s) - S||_F/||S||_F = $(norm(S - ttmps_eval(Q_s, dims))/norm(S))")
     97     println("|ttmps_eval(Q_z) - Z||_F/||Z||_F = $(norm(Z - ttmps_eval(Q_z, dims))/norm(Z))")
     98 end
     99 
    100 main()