From 33a84c783368e8d938e1327d2603853e38204157 Mon Sep 17 00:00:00 2001 From: leios Date: Fri, 12 Oct 2018 06:55:32 +0900 Subject: [PATCH 1/3] adding largescale fixes to Julia code. Whoever wrote the last version clearly didn't know what they were doing... --- .../thomas_algorithm/code/julia/thomas.jl | 40 +++++++++++++++---- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/contents/thomas_algorithm/code/julia/thomas.jl b/contents/thomas_algorithm/code/julia/thomas.jl index 22c4f3e51..9c1280855 100644 --- a/contents/thomas_algorithm/code/julia/thomas.jl +++ b/contents/thomas_algorithm/code/julia/thomas.jl @@ -1,23 +1,47 @@ -function(a::Vector{Float64}, b::Vector{Float64}, c::Vector{Float64}, - d::Vector{Float64}, soln::Vector{Float64}) +function thomas(a::Vector{Float64}, b::Vector{Float64}, c::Vector{Float64}, + d::Vector{Float64}, n::Int64) + + soln = Vector{Float64}(undef, n) + # Setting initial elements - c[0] = c[0] / b[0] - d[0] = d[0] / b[0] + c[1] = c[1] / b[1] + d[1] = d[1] / b[1] - for i = 1:n + for i = 2:n # Scale factor is for c and d - scale = 1 / (b[i] - c[i-1]*a[i]) + scale = 1.0 / (b[i] - c[i-1]*a[i]) c[i] = c[i] * scale d[i] = (d[i] - a[i] * d[i-1]) * scale end # Set the last solution for back-substitution - soln[n-1] = d[n-1] + soln[n] = d[n] # Back-substitution - for i = n-2:0 + for i = n-1:-1:1 soln[i] = d[i] - c[i] * soln[i+1] end + return soln + +end + +function main() + a = [0.0, 2.0, 3.0] + b = [1.0, 3.0, 6.0] + c = [4.0, 5.0, 0.0] + d = [7.0, 5.0, 3.0] + + println("The system,") + println(a) + println(b) + println(c) + println(d) + println("Has the solution:") + + soln = thomas(a, b, c, d, 3) + + println(soln) end +main() From 1257b8f38c79a92514481b5040f900aca39431f3 Mon Sep 17 00:00:00 2001 From: James Schloss Date: Fri, 12 Oct 2018 11:01:52 +0900 Subject: [PATCH 2/3] changing notation --- .../thomas_algorithm/code/julia/thomas.jl | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/contents/thomas_algorithm/code/julia/thomas.jl b/contents/thomas_algorithm/code/julia/thomas.jl index 9c1280855..a29270c60 100644 --- a/contents/thomas_algorithm/code/julia/thomas.jl +++ b/contents/thomas_algorithm/code/julia/thomas.jl @@ -1,28 +1,26 @@ function thomas(a::Vector{Float64}, b::Vector{Float64}, c::Vector{Float64}, d::Vector{Float64}, n::Int64) - soln = Vector{Float64}(undef, n) + x = d + c_prime = c # Setting initial elements - c[1] = c[1] / b[1] - d[1] = d[1] / b[1] + c_prime[1] = c_prime[1] / b[1] + x[1] = x[1] / b[1] for i = 2:n - # Scale factor is for c and d - scale = 1.0 / (b[i] - c[i-1]*a[i]) - c[i] = c[i] * scale - d[i] = (d[i] - a[i] * d[i-1]) * scale + # Scale factor is for c_prime and x + scale = 1.0 / (b[i] - c_prime[i-1]*a[i]) + c_prime[i] = c_prime[i] * scale + x[i] = (x[i] - a[i] * x[i-1]) * scale end - # Set the last solution for back-substitution - soln[n] = d[n] - # Back-substitution for i = n-1:-1:1 - soln[i] = d[i] - c[i] * soln[i+1] + x[i] = x[i] - c_prime[i] * x[i+1] end - return soln + return x end From 8cbc63fe94e6f4cdaf5a87948f65ddecabc6e4b1 Mon Sep 17 00:00:00 2001 From: leios Date: Sat, 13 Oct 2018 11:56:12 +0900 Subject: [PATCH 3/3] requested changes --- contents/thomas_algorithm/code/julia/thomas.jl | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/contents/thomas_algorithm/code/julia/thomas.jl b/contents/thomas_algorithm/code/julia/thomas.jl index a29270c60..bdea7436a 100644 --- a/contents/thomas_algorithm/code/julia/thomas.jl +++ b/contents/thomas_algorithm/code/julia/thomas.jl @@ -1,23 +1,23 @@ function thomas(a::Vector{Float64}, b::Vector{Float64}, c::Vector{Float64}, d::Vector{Float64}, n::Int64) - x = d - c_prime = c + x = copy(d) + c_prime = copy(c) # Setting initial elements - c_prime[1] = c_prime[1] / b[1] - x[1] = x[1] / b[1] + c_prime[1] /= b[1] + x[1] /= b[1] for i = 2:n # Scale factor is for c_prime and x scale = 1.0 / (b[i] - c_prime[i-1]*a[i]) - c_prime[i] = c_prime[i] * scale + c_prime[i] *= scale x[i] = (x[i] - a[i] * x[i-1]) * scale end # Back-substitution for i = n-1:-1:1 - x[i] = x[i] - c_prime[i] * x[i+1] + x[i] -= (c_prime[i] * x[i+1]) end return x