Skip to content

Commit d6f9375

Browse files
committed
Take the first iteration out of the loop to avoid if
1 parent e12006c commit d6f9375

File tree

1 file changed

+11
-16
lines changed

1 file changed

+11
-16
lines changed

src/ClassicalOrthogonalPolynomials.jl

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -326,14 +326,13 @@ function gaussradau(P, n::Integer, endpt)
326326
β = supdiagonaldata(J)
327327
T = eltype(P)
328328
endpt = T(endpt)
329-
p0 = zero(T)
330-
p1 = one(T)
331-
for i in 1:n
329+
p0 = one(T)
330+
p1 = (endpt - α[1]) * p0
331+
for i in 2:n
332332
# Evaluate the monic polynomials πₙ₋₁(endpt), πₙ(endpt)
333333
_p1 = p0
334334
p0 = p1
335-
p1 = (endpt - α[i]) * p0
336-
i > 1 && (p1 -= β[i - 1]^2 * _p1)
335+
p1 = (endpt - α[i]) * p0 - β[i - 1]^2 * _p1
337336
end
338337
a = endpt - β[end]^2 * p0 / p1
339338
α′ = vcat(@view(α[begin:end-1]), a)
@@ -357,22 +356,18 @@ function gausslobatto(P, n::Integer)
357356
β = supdiagonaldata(J)
358357
T = eltype(P)
359358
a, b = T(a), T(b)
360-
p0a = zero(T)
361-
p1a = one(T)
362-
p0b = zero(T)
363-
p1b = one(T)
364-
for i in 1:(n+1)
359+
p0a = one(T)
360+
p0b = one(T)
361+
p1a = (a - α[1]) * p0a
362+
p1b = (b - α[1]) * p0b
363+
for i in 2:(n+1)
365364
# Evaluate the monic polynomials πₙ₋₁(a), πₙ₋₁(b), πₙ(a), πₙ(b)
366365
_p1a = p0a
367366
_p1b = p0b
368367
p0a = p1a
369368
p0b = p1b
370-
p1a = (a - α[i]) * p0a
371-
p1b = (b - α[i]) * p0b
372-
if i > 1
373-
p1a -= β[i - 1]^2 * _p1a
374-
p1b -= β[i - 1]^2 * _p1b
375-
end
369+
p1a = (a - α[i]) * p0a - β[i - 1]^2 * _p1a
370+
p1b = (b - α[i]) * p0b - β[i - 1]^2 * _p1b
376371
end
377372
# Solve Eq. 3.1.2.8
378373
Δ = p1a * p0b - p1b * p0a # This could underflow/overflow for large n

0 commit comments

Comments
 (0)