Advertisement
Guest User

Untitled

a guest
Dec 28th, 2017
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Julia 2.35 KB | None | 0 0
  1. module Blocksys
  2.  
  3. export load_matrix, load_vector, compute_vector, save_vector, gaussian_elimination!
  4.  
  5. bcomputed = true
  6.  
  7. function load_matrix(filename::String)
  8.     open(filename) do f
  9.         line = readline(f)
  10.         (n, l) = split(line)
  11.         (n, l) = (parse(Int64, n), parse(Int64, l))
  12.         Is = Array{Int64, 1}()
  13.         Js = Array{Int64, 1}()
  14.         Vs = Array{Float64, 1}()
  15.         println("n: ", n, ", l: ", l)
  16.         while !eof(f)
  17.             line = split(readline(f))
  18.             push!(Is, parse(Int64, line[1]))
  19.             push!(Js, parse(Int64, line[2]))
  20.             push!(Vs, parse(Float64, line[3]))
  21.         end
  22.         return (sparse(Is, Js, Vs), n, l)
  23.     end
  24. end
  25.  
  26. function load_vector(filename::String)
  27.     open(filename) do f
  28.         line = readline(f)
  29.         n = parse(Int64, line)
  30.         b = Vector{Float64}()
  31.         while !eof(f)
  32.             line = readline(f)
  33.             push!(b, parse(Float64, line))
  34.         end
  35.         global bcomputed = false
  36.         return b
  37.     end
  38. end
  39.  
  40. function gaussian_elimination!(A::SparseMatrixCSC{Float64, Int64}, n::Int64, l::Int64)
  41.     for k = 1:n-l
  42.         println("col: ", k)
  43.         rowToReset = k + l +l - 1
  44.         for i = k+1:rowToReset
  45.             A[i, k] = 0
  46.         end
  47.     end
  48.     show(IOContext(STDOUT), "text/plain", full(A))
  49. end
  50.  
  51. function compute_vector(A::SparseMatrixCSC{Float64, Int64}, n::Int64)
  52.     b = zeros(Float64, n)
  53.     vals = nonzeros(A)
  54.     rows = rowvals(A)
  55.     for i = 1:n
  56.         for j in nzrange(A, i)
  57.             b[rows[j]] += vals[j]
  58.         end
  59.     end
  60.     global bcomputed = true
  61.     return b
  62. end
  63.  
  64. function save_vector(x::Vector{Float64}, filename::String)
  65.     open(filename, "w") do f
  66.         length = size(x, 1)
  67.         if bcomputed
  68.             exactX = ones(length)
  69.             relativeError = norm(exactX - x) / norm(exactX)
  70.             println(f, relativeError)
  71.         end
  72.         for i = 1:length
  73.             println(f, x[i])
  74.         end
  75.     end
  76. end
  77.  
  78.  
  79. loaded = load_matrix("A.txt")
  80. println("n: ", loaded[2], ", l: ", loaded[3])
  81. show(IOContext(STDOUT), "text/plain", full(loaded[1]))
  82. println()
  83. gaussian_elimination!(loaded[1], loaded[2], loaded[3])
  84. #=
  85. tic()
  86. bvector = compute_vector(loaded[1], loaded[2])
  87. toc()
  88. println("b: ", bvector)
  89. =#
  90.  
  91. loadedB = load_vector("b50k.txt")
  92. #save_vector(loadedB, "test.txt")
  93. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement