From 47efcea3ba7681f80b0b568c1e9090ed860056c7 Mon Sep 17 00:00:00 2001 From: Daniel VandenHeuvel <95613936+DanielVandH@users.noreply.github.com> Date: Sat, 1 Nov 2025 09:01:02 +0000 Subject: [PATCH 1/2] Remove band --- src/SemiclassicalOrthogonalPolynomials.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/SemiclassicalOrthogonalPolynomials.jl b/src/SemiclassicalOrthogonalPolynomials.jl index 9dcb571..193ac07 100644 --- a/src/SemiclassicalOrthogonalPolynomials.jl +++ b/src/SemiclassicalOrthogonalPolynomials.jl @@ -448,8 +448,8 @@ function \(A::SemiclassicalJacobi, B::SemiclassicalJacobi{T}) where {T} Bᵗᵃ⁰ᶜ = SemiclassicalJacobi(B.t, B.a, zero(B.b), B.c, A) Bᵗᵃ¹ᶜ = SemiclassicalJacobi(B.t, B.a, one(B.a), B.c, A) Rᵦₐ₁ᵪᵗᵃ⁰ᶜ = Weighted(Bᵗᵃ⁰ᶜ) \ Weighted(Bᵗᵃ¹ᶜ) - b1 = Rᵦₐ₁ᵪᵗᵃ⁰ᶜ[band(0)] - b0 = Vcat(one(T), Rᵦₐ₁ᵪᵗᵃ⁰ᶜ[band(-1)]) + b1 = Rᵦₐ₁ᵪᵗᵃ⁰ᶜ.dv + b0 = Vcat(one(T), Rᵦₐ₁ᵪᵗᵃ⁰ᶜ.ev) Rᵦₐ₋₁ᵪᵗᵃ⁰ᶜ = Bidiagonal(b0, b1, :U) # Then convert Bᵗᵃ⁰ᶜ into A and complete Rₐ₀ᵪᴬ = UpperTriangular(A \ Bᵗᵃ⁰ᶜ) From 382aa560a1f8403aeba7af534555495aabdbad78 Mon Sep 17 00:00:00 2001 From: Daniel VandenHeuvel <95613936+DanielVandH@users.noreply.github.com> Date: Thu, 27 Nov 2025 02:16:17 +0000 Subject: [PATCH 2/2] Use dispatch to get around issue --- src/SemiclassicalOrthogonalPolynomials.jl | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/SemiclassicalOrthogonalPolynomials.jl b/src/SemiclassicalOrthogonalPolynomials.jl index 193ac07..f6d3167 100644 --- a/src/SemiclassicalOrthogonalPolynomials.jl +++ b/src/SemiclassicalOrthogonalPolynomials.jl @@ -440,6 +440,9 @@ function copy(L::Ldiv{SemiclassicalJacobiLayout,SemiclassicalJacobiLayout}) (inv(M_Q) * L') * M_P end +_get_bands(R) = (R[band(0)], R[band(-1)]) +_get_bands(R::Bidiagonal) = (R.dv, R.ev) + function \(A::SemiclassicalJacobi, B::SemiclassicalJacobi{T}) where {T} if A.b == -1 && B.b ≠ -1 return UpperTriangular(ApplyArray(inv, B \ A)) @@ -448,8 +451,8 @@ function \(A::SemiclassicalJacobi, B::SemiclassicalJacobi{T}) where {T} Bᵗᵃ⁰ᶜ = SemiclassicalJacobi(B.t, B.a, zero(B.b), B.c, A) Bᵗᵃ¹ᶜ = SemiclassicalJacobi(B.t, B.a, one(B.a), B.c, A) Rᵦₐ₁ᵪᵗᵃ⁰ᶜ = Weighted(Bᵗᵃ⁰ᶜ) \ Weighted(Bᵗᵃ¹ᶜ) - b1 = Rᵦₐ₁ᵪᵗᵃ⁰ᶜ.dv - b0 = Vcat(one(T), Rᵦₐ₁ᵪᵗᵃ⁰ᶜ.ev) + b1, _b0 = _get_bands(Rᵦₐ₁ᵪᵗᵃ⁰ᶜ) + b0 = Vcat(one(T), _b0) Rᵦₐ₋₁ᵪᵗᵃ⁰ᶜ = Bidiagonal(b0, b1, :U) # Then convert Bᵗᵃ⁰ᶜ into A and complete Rₐ₀ᵪᴬ = UpperTriangular(A \ Bᵗᵃ⁰ᶜ)