Skip to content

Commit 1f365b4

Browse files
leiosberquist
authored andcommitted
Fixing Julia for Thomas algorithm (#495)
1 parent 057dd6d commit 1f365b4

File tree

1 file changed

+37
-15
lines changed
  • contents/thomas_algorithm/code/julia

1 file changed

+37
-15
lines changed
Lines changed: 37 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,45 @@
1-
function(a::Vector{Float64}, b::Vector{Float64}, c::Vector{Float64},
2-
d::Vector{Float64}, soln::Vector{Float64})
1+
function thomas(a::Vector{Float64}, b::Vector{Float64}, c::Vector{Float64},
2+
d::Vector{Float64}, n::Int64)
3+
4+
x = copy(d)
5+
c_prime = copy(c)
6+
37
# Setting initial elements
4-
c[0] = c[0] / b[0]
5-
d[0] = d[0] / b[0]
6-
7-
for i = 1:n
8-
# Scale factor is for c and d
9-
scale = 1 / (b[i] - c[i-1]*a[i])
10-
c[i] = c[i] * scale
11-
d[i] = (d[i] - a[i] * d[i-1]) * scale
12-
end
8+
c_prime[1] /= b[1]
9+
x[1] /= b[1]
1310

14-
# Set the last solution for back-substitution
15-
soln[n-1] = d[n-1]
11+
for i = 2:n
12+
# Scale factor is for c_prime and x
13+
scale = 1.0 / (b[i] - c_prime[i-1]*a[i])
14+
c_prime[i] *= scale
15+
x[i] = (x[i] - a[i] * x[i-1]) * scale
16+
end
1617

1718
# Back-substitution
18-
for i = n-2:0
19-
soln[i] = d[i] - c[i] * soln[i+1]
19+
for i = n-1:-1:1
20+
x[i] -= (c_prime[i] * x[i+1])
2021
end
2122

23+
return x
24+
25+
end
26+
27+
function main()
28+
a = [0.0, 2.0, 3.0]
29+
b = [1.0, 3.0, 6.0]
30+
c = [4.0, 5.0, 0.0]
31+
d = [7.0, 5.0, 3.0]
32+
33+
println("The system,")
34+
println(a)
35+
println(b)
36+
println(c)
37+
println(d)
38+
println("Has the solution:")
39+
40+
soln = thomas(a, b, c, d, 3)
41+
42+
println(soln)
2243
end
2344

45+
main()

0 commit comments

Comments
 (0)