##
using Plots
##
using LinearAlgebra
using SparseArrays
mat(n) = sparse(Diagonal(exp2.(0:-1:-n+1)))
mat(5)
## Just to be clear, this is what NOT to do :)
function krylov_simple(A,b,k)
X = zeros(size(A,1),k+1)
X[:,1] = b
for i=1:k
X[:,i+1] = A*X[:,i]
end
return X
end
n = 20
@show cond(Array(mat(n)))
X = krylov_simple(mat(n), ones(n), 12)
@show cond(X)
## Let's plot it
n = 20
k = 12
A = mat(n)
X = krylov_simple(A, ones(n), k)
plot(map(i -> cond(X[:,1:i]), 1:k+1), yscale=:log10,
label="condition number of basis")
title!("matrix condition number $(cond(Array(A)))")
gui()
## Does this happen for a ranodm b?
X = krylov_simple(A, randn(n), k)
## What about a random matrix?
X = krylov_simple(randn(20,20), randn(n), 20)