In [1]:
using yinsGraph
In [65]:
include("sampler.jl")
include("randTrees.jl")
include("solvers.jl")
Out[65]:
In [ ]:
In [99]:
a = grid2(30,30,isotropy=10);
@time t = randishKruskal(a)
@time st = compStretches(t,a);
sum(st)/nnz(a)
Out[99]:
In [98]:
t
Out[98]:
In [100]:
@time at = augmentTree(t,a,convert(Int,4*round(sqrt(size(a)[1]))))
Out[100]:
In [ ]:
In [ ]:
In [82]:
la = lap(a)
la[1,1] = la[1,1] + 1
lat = lap(at)
lat[1,1] = lat[1,1] + 1;
In [83]:
@time F = cholfact(lat)
Out[83]:
In [84]:
@show nnz(lat)
n = size(la)[1]
b = randn(n);
In [9]:
using IterativeSolvers
In [85]:
@time y = cg(la,b)
norm(b - la*y[1])
Out[85]:
In [56]:
y[2]
In [ ]:
In [86]:
@time z = cg(la, b, F)
norm(b-la*z[1])
Out[86]:
In [95]:
b = randn(n)
b = b / norm(b)
for i in 1:10
b = F \ (la * b)
@show norm(b)
b = b / norm(b)
end
In [96]:
E = eigs(x -> (F \ la * x))
In [58]:
@time fla = cholfact(la);
In [60]:
@time w = fla \ b
norm(b - la*w)
Out[60]:
In [62]:
@profile at = augmentTree(t,a,convert(Int,round(sqrt(size(a)[1]))))
Out[62]:
In [103]:
function augTreeSolver{Tv,Ti}(ddmat::SparseMatrixCSC{Tv,Ti})
adjmat = -triu(ddmat,1)
adjmat = adjmat + adjmat'
tree = randishKruskal(adjmat)
augtree = augmentTree(tree,adjmat,convert(Int,round(sqrt(size(a)[1]))))
n = size(ddmat)[1]
Dx = spdiagm(ddmat*ones(n))
augDD = Dx + spdiagm(augtree*ones(n)) - augtree
F = cholfact(augDD)
f(b) = cg(ddmat, b, F)
return f
end
Out[103]:
In [104]:
f = augTreeSolver(la)
Out[104]:
In [105]:
n = size(la)[1]
Out[105]:
In [106]:
b = randn(n)
x = f(b)
Out[106]:
In [108]:
norm(la*x[1]-b)
Out[108]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [15]:
y[1]
Out[15]:
In [ ]:
In [ ]:
In [ ]:
In [102]:
(x,y) = grid2coords(30);
plotGraph(at,x,y,"red",dots=false)
plotGraph(t,x,y,dots=false)
Out[102]:
In [14]:
x, y = grid2coords(50)
plotGraph(t2, x, y, dots = false)
Out[14]:
In [ ]: