From 1d9e559ecfd602ef3e638969fea8e4c3cd190cbd Mon Sep 17 00:00:00 2001 From: anastasia21112 Date: Mon, 23 Sep 2024 13:07:57 -0400 Subject: [PATCH 01/10] reducing to 32x32 --- benchmarks/LinearSolve/MatrixDepot.jmd | 35 ++++++++++++++++++-------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/benchmarks/LinearSolve/MatrixDepot.jmd b/benchmarks/LinearSolve/MatrixDepot.jmd index f979359cc..69a54d966 100644 --- a/benchmarks/LinearSolve/MatrixDepot.jmd +++ b/benchmarks/LinearSolve/MatrixDepot.jmd @@ -48,9 +48,34 @@ for z in 1:length(allmatrices_md.content[1].rows) A = convert(SparseMatrixCSC, A) n = size(A, 1) matrix_size[z] = n + + mtx_copy = A + + + + + while size(condensed, 1) > 32 || size(condensed, 2) > 32 + rows, cols = size(mtx_copy) + new_rows = div(rows, 2) + new_cols = div(cols, 2) + condensed = zeros(Int, new_rows, new_cols) + + for r in 1:2:rows-1 + for c in 1:2:cols-1 + block = matrix[r:r+1, c:c+1] + condensed[div(r-1, 2) + 1, div(c-1, 2) + 1] = (length(nonzeros(block)) >= 3) ? 1 : 0 + end + end + + mtx_copy = condensed + end + + percentage_sparsity[z] = length(nonzeros(A)) / n^2 @info "$n × $n" + spaced_out_sparsity = length(nonzeros(mtx_copy)) * percentage_sparsity[z] + n > 500 && error("Skipping too large matrices") b = rand(rng, n) @@ -65,16 +90,6 @@ for z in 1:length(allmatrices_md.content[1].rows) times[z,j] = bt end - #= - p = bar(algnames, times[z, :]; - ylabel = "Time/s", - yscale = :log10, - title = "Time on $(currMTX)", - fmt = :png, - legend = :outertopright) - display(p) - =# - println("successfully factorized $(currMTX)") catch e matrix = allmatrices_md.content[1].rows[z] From e65a86d83cf1e8105d02ed307e6664307e851a7b Mon Sep 17 00:00:00 2001 From: anastasia21112 Date: Mon, 23 Sep 2024 13:09:54 -0400 Subject: [PATCH 02/10] plotting spaced out sparsity --- benchmarks/LinearSolve/MatrixDepot.jmd | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/benchmarks/LinearSolve/MatrixDepot.jmd b/benchmarks/LinearSolve/MatrixDepot.jmd index 69a54d966..62b87920a 100644 --- a/benchmarks/LinearSolve/MatrixDepot.jmd +++ b/benchmarks/LinearSolve/MatrixDepot.jmd @@ -32,6 +32,7 @@ allmatrices_md = listnames("*/*") @info "Total number of matrices: $(allmatrices_md.content[1].rows)" times = fill(NaN, length(allmatrices_md.content[1].rows), length(algs)) percentage_sparsity = fill(NaN, length(allmatrices_md.content[1].rows)) +spaced_out_sparsity = fill(NaN, length(allmatrices_md.content[1].rows)) matrix_size = fill(NaN, length(allmatrices_md.content[1].rows)) ``` @@ -50,10 +51,7 @@ for z in 1:length(allmatrices_md.content[1].rows) matrix_size[z] = n mtx_copy = A - - - - + while size(condensed, 1) > 32 || size(condensed, 2) > 32 rows, cols = size(mtx_copy) new_rows = div(rows, 2) @@ -74,7 +72,7 @@ for z in 1:length(allmatrices_md.content[1].rows) percentage_sparsity[z] = length(nonzeros(A)) / n^2 @info "$n × $n" - spaced_out_sparsity = length(nonzeros(mtx_copy)) * percentage_sparsity[z] + spaced_out_sparsity[z] = length(nonzeros(mtx_copy)) * percentage_sparsity[z] n > 500 && error("Skipping too large matrices") @@ -137,6 +135,18 @@ p = scatter(matrix_size, times; legend = :outertopright) ``` +```julia +p = scatter(spaced_out_sparsity, times; + ylabel = "Time/s", + yscale = :log10, + xlabel = "Spaced Out Sparsity", + xscale = :log10, + label = algnames_transpose, + title = "Factorization Time vs Spaced Out Sparsity", + fmt = :png, + legend = :outertopright) +``` + ## Appendix From d94b888c6ce18d5a771a0e15c07c99bd43ff3d97 Mon Sep 17 00:00:00 2001 From: anastasia21112 Date: Wed, 9 Oct 2024 21:29:58 -0400 Subject: [PATCH 03/10] fixing plot bug --- benchmarks/LinearSolve/MatrixDepot.jmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmarks/LinearSolve/MatrixDepot.jmd b/benchmarks/LinearSolve/MatrixDepot.jmd index 62b87920a..cba3a878e 100644 --- a/benchmarks/LinearSolve/MatrixDepot.jmd +++ b/benchmarks/LinearSolve/MatrixDepot.jmd @@ -50,7 +50,7 @@ for z in 1:length(allmatrices_md.content[1].rows) n = size(A, 1) matrix_size[z] = n - mtx_copy = A + mtx_copy = copy(A) while size(condensed, 1) > 32 || size(condensed, 2) > 32 rows, cols = size(mtx_copy) @@ -60,7 +60,7 @@ for z in 1:length(allmatrices_md.content[1].rows) for r in 1:2:rows-1 for c in 1:2:cols-1 - block = matrix[r:r+1, c:c+1] + block = mtx_copy[r:r+1, c:c+1] condensed[div(r-1, 2) + 1, div(c-1, 2) + 1] = (length(nonzeros(block)) >= 3) ? 1 : 0 end end From f3294de94a337881d5e73805b94b6afa97e9997a Mon Sep 17 00:00:00 2001 From: anastasia21112 Date: Fri, 11 Oct 2024 09:10:02 -0400 Subject: [PATCH 04/10] bug fixing --- benchmarks/LinearSolve/MatrixDepot.jmd | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/benchmarks/LinearSolve/MatrixDepot.jmd b/benchmarks/LinearSolve/MatrixDepot.jmd index cba3a878e..1c7483d3f 100644 --- a/benchmarks/LinearSolve/MatrixDepot.jmd +++ b/benchmarks/LinearSolve/MatrixDepot.jmd @@ -51,16 +51,24 @@ for z in 1:length(allmatrices_md.content[1].rows) matrix_size[z] = n mtx_copy = copy(A) - + + @info "$n × $n" + n > 500 && error("Skipping too large matrices") + + rows, cols = size(mtx_copy) + new_rows = div(rows, 2) + new_cols = div(cols, 2) + condensed = zeros(Int, new_rows, new_cols) + while size(condensed, 1) > 32 || size(condensed, 2) > 32 rows, cols = size(mtx_copy) new_rows = div(rows, 2) new_cols = div(cols, 2) - condensed = zeros(Int, new_rows, new_cols) + condensed = sparse(zeros(Int, new_rows, new_cols)) for r in 1:2:rows-1 for c in 1:2:cols-1 - block = mtx_copy[r:r+1, c:c+1] + block = sparse(mtx_copy[r:r+1, c:c+1]) condensed[div(r-1, 2) + 1, div(c-1, 2) + 1] = (length(nonzeros(block)) >= 3) ? 1 : 0 end end @@ -70,11 +78,10 @@ for z in 1:length(allmatrices_md.content[1].rows) percentage_sparsity[z] = length(nonzeros(A)) / n^2 - @info "$n × $n" - + spaced_out_sparsity[z] = length(nonzeros(mtx_copy)) * percentage_sparsity[z] - n > 500 && error("Skipping too large matrices") + b = rand(rng, n) u0 = rand(rng, n) @@ -99,6 +106,8 @@ for z in 1:length(allmatrices_md.content[1].rows) println(e) end end + +print(percentage_sparsity) ``` ```julia From 8bf5f7308ace0743d13ae0d26966b39d74b475f4 Mon Sep 17 00:00:00 2001 From: anastasia21112 Date: Tue, 19 Nov 2024 08:34:16 -0500 Subject: [PATCH 05/10] testing percentage away from banded matrix --- benchmarks/LinearSolve/MatrixDepot.jmd | 29 ++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/benchmarks/LinearSolve/MatrixDepot.jmd b/benchmarks/LinearSolve/MatrixDepot.jmd index f979359cc..3cecb0b15 100644 --- a/benchmarks/LinearSolve/MatrixDepot.jmd +++ b/benchmarks/LinearSolve/MatrixDepot.jmd @@ -33,6 +33,7 @@ allmatrices_md = listnames("*/*") times = fill(NaN, length(allmatrices_md.content[1].rows), length(algs)) percentage_sparsity = fill(NaN, length(allmatrices_md.content[1].rows)) matrix_size = fill(NaN, length(allmatrices_md.content[1].rows)) +bandedness = fill(NaN, length(allmatrices_md.content[1].rows)) ``` ```julia @@ -65,6 +66,22 @@ for z in 1:length(allmatrices_md.content[1].rows) times[z,j] = bt end + total_band_positions = 0 + non_zero_in_band = 0 + bandwidth = 5 + for r in 1:n + for c in 1:n + if abs(r - c) <= bandwidth + total_band_positions += 1 # This position belongs to the band + if A[r, c] != 0 + non_zero_in_band += 1 # This element is non-zero in the band + end + end + end + end + + percentage_filled = non_zero_in_band / total_band_positions * 100 + bandedness[z] = percentage_filled #= p = bar(algnames, times[z, :]; ylabel = "Time/s", @@ -110,6 +127,18 @@ p = scatter(percentage_sparsity, times; legend = :outertopright) ``` +```julia +p = scatter(bandedness, times; + ylabel = "Time/s", + yscale = :log10, + xlabel = "Bandedness", + xscale = :log10, + label = algnames_transpose, + title = "Factorization Time vs Bandedness", + fmt = :png, + legend = :outertopright) +``` + ```julia p = scatter(matrix_size, times; ylabel = "Time/s", From 7cdd89b98f0a73e844d5cf1d8c3870c5b6117f57 Mon Sep 17 00:00:00 2001 From: anastasia21112 Date: Wed, 20 Nov 2024 09:14:38 -0500 Subject: [PATCH 06/10] fixing errors --- benchmarks/LinearSolve/MatrixDepot.jmd | 27 ++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/benchmarks/LinearSolve/MatrixDepot.jmd b/benchmarks/LinearSolve/MatrixDepot.jmd index 1c7483d3f..a6b1045fd 100644 --- a/benchmarks/LinearSolve/MatrixDepot.jmd +++ b/benchmarks/LinearSolve/MatrixDepot.jmd @@ -53,14 +53,15 @@ for z in 1:length(allmatrices_md.content[1].rows) mtx_copy = copy(A) @info "$n × $n" - n > 500 && error("Skipping too large matrices") + n > 100 && error("Skipping too large matrices") rows, cols = size(mtx_copy) new_rows = div(rows, 2) new_cols = div(cols, 2) condensed = zeros(Int, new_rows, new_cols) - while size(condensed, 1) > 32 || size(condensed, 2) > 32 + while size(mtx_copy, 1) > 32 || size(mtx_copy, 2) > 32 + rows, cols = size(mtx_copy) new_rows = div(rows, 2) new_cols = div(cols, 2) @@ -68,20 +69,20 @@ for z in 1:length(allmatrices_md.content[1].rows) for r in 1:2:rows-1 for c in 1:2:cols-1 - block = sparse(mtx_copy[r:r+1, c:c+1]) - condensed[div(r-1, 2) + 1, div(c-1, 2) + 1] = (length(nonzeros(block)) >= 3) ? 1 : 0 + block = mtx_copy[r:min(r+1, rows), c:min(c+1, cols)] + condensed[div(r-1, 2) + 1, div(c-1, 2) + 1] = (length(nonzeros(block)) >= 2) ? 1 : 0 end end - + mtx_copy = condensed + end - + percentage_sparsity[z] = length(nonzeros(A)) / n^2 spaced_out_sparsity[z] = length(nonzeros(mtx_copy)) * percentage_sparsity[z] - b = rand(rng, n) u0 = rand(rng, n) @@ -107,7 +108,17 @@ for z in 1:length(allmatrices_md.content[1].rows) end end -print(percentage_sparsity) +percentage_sparsity = percentage_sparsity[.!isnan.(percentage_sparsity)] +spaced_out_sparsity = spaced_out_sparsity[.!isnan.(spaced_out_sparsity)] +spaced_out_sparsity = replace(spaced_out_sparsity, 0 => 1e-10) +matrix_size = matrix_size[.!isnan.(matrix_size)] +new_times = [] +for row in eachrow(times) + if !any(isnan, row) # Check if the row does not contain NaN values + push!(new_times, row) # Append the row to the list + end +end +times = new_times ``` ```julia From bf39232011fae03c2c49762d85a238e974428ff8 Mon Sep 17 00:00:00 2001 From: anastasia21112 Date: Sat, 23 Nov 2024 16:22:09 -0500 Subject: [PATCH 07/10] fixing graphs --- benchmarks/LinearSolve/MatrixDepot.jmd | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/benchmarks/LinearSolve/MatrixDepot.jmd b/benchmarks/LinearSolve/MatrixDepot.jmd index a6b1045fd..952c6e598 100644 --- a/benchmarks/LinearSolve/MatrixDepot.jmd +++ b/benchmarks/LinearSolve/MatrixDepot.jmd @@ -48,12 +48,13 @@ for z in 1:length(allmatrices_md.content[1].rows) A = mdopen(currMTX).A A = convert(SparseMatrixCSC, A) n = size(A, 1) - matrix_size[z] = n + mtx_copy = copy(A) @info "$n × $n" n > 100 && error("Skipping too large matrices") + matrix_size[z] = n rows, cols = size(mtx_copy) new_rows = div(rows, 2) @@ -112,13 +113,8 @@ percentage_sparsity = percentage_sparsity[.!isnan.(percentage_sparsity)] spaced_out_sparsity = spaced_out_sparsity[.!isnan.(spaced_out_sparsity)] spaced_out_sparsity = replace(spaced_out_sparsity, 0 => 1e-10) matrix_size = matrix_size[.!isnan.(matrix_size)] -new_times = [] -for row in eachrow(times) - if !any(isnan, row) # Check if the row does not contain NaN values - push!(new_times, row) # Append the row to the list - end -end -times = new_times +nanrows = any(isnan, times; dims=2) +times = times[.!vec(nanrows), :] ``` ```julia From 9d9c2e3137b4b2065c570ef847616a48045ec6f5 Mon Sep 17 00:00:00 2001 From: anastasia21112 Date: Mon, 25 Nov 2024 22:06:33 -0500 Subject: [PATCH 08/10] testing with a smaller subset --- benchmarks/LinearSolve/MatrixDepot.jmd | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/benchmarks/LinearSolve/MatrixDepot.jmd b/benchmarks/LinearSolve/MatrixDepot.jmd index 952c6e598..4e589955a 100644 --- a/benchmarks/LinearSolve/MatrixDepot.jmd +++ b/benchmarks/LinearSolve/MatrixDepot.jmd @@ -37,7 +37,8 @@ matrix_size = fill(NaN, length(allmatrices_md.content[1].rows)) ``` ```julia -for z in 1:length(allmatrices_md.content[1].rows) +# for z in 1:length(allmatrices_md.content[1].rows) +for z in 1:200 try matrix = allmatrices_md.content[1].rows[z] matrix = string(matrix[1]) @@ -54,7 +55,7 @@ for z in 1:length(allmatrices_md.content[1].rows) @info "$n × $n" n > 100 && error("Skipping too large matrices") - matrix_size[z] = n + rows, cols = size(mtx_copy) new_rows = div(rows, 2) @@ -79,12 +80,6 @@ for z in 1:length(allmatrices_md.content[1].rows) end - - percentage_sparsity[z] = length(nonzeros(A)) / n^2 - - spaced_out_sparsity[z] = length(nonzeros(mtx_copy)) * percentage_sparsity[z] - - b = rand(rng, n) u0 = rand(rng, n) @@ -96,7 +91,9 @@ for z in 1:length(allmatrices_md.content[1].rows) alias_b = true)) times[z,j] = bt end - + matrix_size[z] = n + percentage_sparsity[z] = length(nonzeros(A)) / n^2 + spaced_out_sparsity[z] = length(nonzeros(mtx_copy)) * percentage_sparsity[z] println("successfully factorized $(currMTX)") catch e matrix = allmatrices_md.content[1].rows[z] From 1d4cf3c797606059d5179d43a2d5465cc0ffd352 Mon Sep 17 00:00:00 2001 From: anastasia21112 Date: Mon, 25 Nov 2024 22:26:26 -0500 Subject: [PATCH 09/10] running for all matrices --- benchmarks/LinearSolve/MatrixDepot.jmd | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/benchmarks/LinearSolve/MatrixDepot.jmd b/benchmarks/LinearSolve/MatrixDepot.jmd index 4e589955a..5de98d14e 100644 --- a/benchmarks/LinearSolve/MatrixDepot.jmd +++ b/benchmarks/LinearSolve/MatrixDepot.jmd @@ -37,8 +37,7 @@ matrix_size = fill(NaN, length(allmatrices_md.content[1].rows)) ``` ```julia -# for z in 1:length(allmatrices_md.content[1].rows) -for z in 1:200 +for z in 1:length(allmatrices_md.content[1].rows) try matrix = allmatrices_md.content[1].rows[z] matrix = string(matrix[1]) From 8eba943448a88638a96d9ec599d54b19e20b7205 Mon Sep 17 00:00:00 2001 From: anastasia21112 Date: Thu, 28 Nov 2024 12:21:15 -0700 Subject: [PATCH 10/10] plotting bandedness for 5, 10, 20 --- benchmarks/LinearSolve/MatrixDepot.jmd | 105 +++++++++++++++++-------- 1 file changed, 72 insertions(+), 33 deletions(-) diff --git a/benchmarks/LinearSolve/MatrixDepot.jmd b/benchmarks/LinearSolve/MatrixDepot.jmd index b8cb954e6..9f8de473f 100644 --- a/benchmarks/LinearSolve/MatrixDepot.jmd +++ b/benchmarks/LinearSolve/MatrixDepot.jmd @@ -30,11 +30,35 @@ cols = [:red, :blue, :green, :magenta, :turqoise] # one color per alg allmatrices_md = listnames("*/*") @info "Total number of matrices: $(allmatrices_md.content[1].rows)" + times = fill(NaN, length(allmatrices_md.content[1].rows), length(algs)) percentage_sparsity = fill(NaN, length(allmatrices_md.content[1].rows)) spaced_out_sparsity = fill(NaN, length(allmatrices_md.content[1].rows)) matrix_size = fill(NaN, length(allmatrices_md.content[1].rows)) -bandedness = fill(NaN, length(allmatrices_md.content[1].rows)) +bandedness_five = fill(NaN, length(allmatrices_md.content[1].rows)) +bandedness_ten = fill(NaN, length(allmatrices_md.content[1].rows)) +bandedness_twenty = fill(NaN, length(allmatrices_md.content[1].rows)) + +function compute_bandedness(A, bandwidth) + n = size(A, 1) + total_band_positions = 0 + non_zero_in_band = 0 + bandwidth = bandwidth + for r in 1:n + for c in 1:n + if abs(r - c) <= bandwidth + total_band_positions += 1 # This position belongs to the band + if A[r, c] != 0 + non_zero_in_band += 1 # This element is non-zero in the band + end + end + end + end + + percentage_filled = non_zero_in_band / total_band_positions * 100 + return percentage_filled +end + ``` ```julia @@ -50,18 +74,16 @@ for z in 1:length(allmatrices_md.content[1].rows) A = convert(SparseMatrixCSC, A) n = size(A, 1) - mtx_copy = copy(A) @info "$n × $n" n > 100 && error("Skipping too large matrices") - + ## COMPUTING SPACED OUT SPARSITY rows, cols = size(mtx_copy) new_rows = div(rows, 2) new_cols = div(cols, 2) condensed = zeros(Int, new_rows, new_cols) - while size(mtx_copy, 1) > 32 || size(mtx_copy, 2) > 32 rows, cols = size(mtx_copy) @@ -74,12 +96,11 @@ for z in 1:length(allmatrices_md.content[1].rows) block = mtx_copy[r:min(r+1, rows), c:min(c+1, cols)] condensed[div(r-1, 2) + 1, div(c-1, 2) + 1] = (length(nonzeros(block)) >= 2) ? 1 : 0 end - end - - mtx_copy = condensed - + end + mtx_copy = condensed end + ## COMPUTING FACTORIZATION TIME b = rand(rng, n) u0 = rand(rng, n) @@ -92,22 +113,13 @@ for z in 1:length(allmatrices_md.content[1].rows) times[z,j] = bt end - total_band_positions = 0 - non_zero_in_band = 0 - bandwidth = 5 - for r in 1:n - for c in 1:n - if abs(r - c) <= bandwidth - total_band_positions += 1 # This position belongs to the band - if A[r, c] != 0 - non_zero_in_band += 1 # This element is non-zero in the band - end - end - end - end + bandedness_five[z] = compute_bandedness(A, 5) + bandedness_ten[z] = compute_bandedness(A, 10) + bandedness_twenty[z] = compute_bandedness(A, 20) + percentage_sparsity[z] = length(nonzeros(A)) / n^2 + spaced_out_sparsity[z] = length(nonzeros(mtx_copy)) * percentage_sparsity[z] + matrix_size[z] = n - percentage_filled = non_zero_in_band / total_band_positions * 100 - bandedness[z] = percentage_filled #= p = bar(algnames, times[z, :]; ylabel = "Time/s", @@ -133,6 +145,12 @@ end percentage_sparsity = percentage_sparsity[.!isnan.(percentage_sparsity)] spaced_out_sparsity = spaced_out_sparsity[.!isnan.(spaced_out_sparsity)] spaced_out_sparsity = replace(spaced_out_sparsity, 0 => 1e-10) +bandedness_five = bandedness_five[.!isnan.(bandedness_five)] +bandedness_five = replace(bandedness_five, 0 => 1e-10) +bandedness_ten = bandedness_ten[.!isnan.(bandedness_ten)] +bandedness_ten = replace(bandedness_ten, 0 => 1e-10) +bandedness_twenty = bandedness_twenty[.!isnan.(bandedness_twenty)] +bandedness_twenty = replace(bandedness_twenty, 0 => 1e-10) matrix_size = matrix_size[.!isnan.(matrix_size)] nanrows = any(isnan, times; dims=2) times = times[.!vec(nanrows), :] @@ -161,41 +179,62 @@ p = scatter(percentage_sparsity, times; ``` ```julia -p = scatter(bandedness, times; +p = scatter(matrix_size, times; ylabel = "Time/s", yscale = :log10, - xlabel = "Bandedness", + xlabel = "Matrix Size", xscale = :log10, label = algnames_transpose, - title = "Factorization Time vs Bandedness", + title = "Factorization Time vs Matrix Size", fmt = :png, legend = :outertopright) ``` ```julia -p = scatter(matrix_size, times; +p = scatter(spaced_out_sparsity, times; ylabel = "Time/s", yscale = :log10, - xlabel = "Matrix Size", + xlabel = "Spaced Out Sparsity", xscale = :log10, label = algnames_transpose, - title = "Factorization Time vs Matrix Size", + title = "Factorization Time vs Spaced Out Sparsity", fmt = :png, legend = :outertopright) ``` ```julia -p = scatter(spaced_out_sparsity, times; +p = scatter(bandedness_five, times; ylabel = "Time/s", yscale = :log10, - xlabel = "Spaced Out Sparsity", + xlabel = "Bandedness", xscale = :log10, label = algnames_transpose, - title = "Factorization Time vs Spaced Out Sparsity", + title = "Factorization Time vs Bandedness, Bandwidth=5", + fmt = :png, + legend = :outertopright) +``` +```julia +p = scatter(bandedness_ten, times; + ylabel = "Time/s", + yscale = :log10, + xlabel = "Bandedness", + xscale = :log10, + label = algnames_transpose, + title = "Factorization Time vs Bandedness, Bandwidth=10", + fmt = :png, + legend = :outertopright) +``` +```julia +p = scatter(bandedness_twenty, times; + ylabel = "Time/s", + yscale = :log10, + xlabel = "Bandedness", + xscale = :log10, + label = algnames_transpose, + title = "Factorization Time vs Bandedness, Bandwidth=20", fmt = :png, legend = :outertopright) ``` - ## Appendix