@@ -461,10 +461,26 @@ function \(w_A::WeightedSemiclassicalJacobi{T}, w_B::WeightedSemiclassicalJacobi
461461 Δb = B. b- A. b
462462 Δc = B. c- A. c
463463
464- if (wA. a == A. a) && (wA. b == A. b) && (wA. c == A. c) && (wB. a == B. a) && (wB. b == B. b) && (wB. c == B. c) && isinteger (A. a) && isinteger (A. b) && isinteger (A. c) && isinteger (B. a) && isinteger (B. b) && isinteger (B. c)
465- # k = (A \ SemiclassicalJacobiWeight(A.t,Δa,Δb,Δc))[1]
466- k = sumquotient (SemiclassicalJacobiWeight (B. t,B. a,B. b,B. c),SemiclassicalJacobiWeight (A. t,A. a,A. b,A. c))
467- return (ApplyArray (* ,Diagonal (Fill (k,∞)),(B \ A)))'
464+ # k = (A \ SemiclassicalJacobiWeight(A.t,Δa,Δb,Δc))[1]
465+ if isone (- wA. b) && isone (- wB. b)
466+ @assert A. a + 1 == B. a && A. c + 1 == B. c
467+ Q = SemiclassicalJacobi (B. t, B. a, one (B. b), B. c, B)
468+ P = SemiclassicalJacobi (A. t, A. a, one (A. b), A. c, A)
469+ wP = Weighted (P)
470+ wQ = Weighted (Q)
471+ R22 = wP \ wQ
472+ r11 = A. t - 1
473+ qw0 = SemiclassicalJacobiWeight (Q. t, Q. a, zero (Q. b), Q. c)
474+ pw0 = SemiclassicalJacobiWeight (P. t, P. a, zero (P. b), P. c)
475+ r21 = wP[:, 1 : 2 ] \ (qw0 .- r11 .* pw0)
476+ d0 = Vcat (r11, R22[band (0 )])
477+ d1 = Vcat (r21[begin ], R22[band (- 1 )])
478+ d2 = Vcat (r21[begin + 1 ], R22[band (- 2 )])
479+ data = Hcat (d0, d1, d2)
480+ return _BandedMatrix (data' , 1 : ∞, 2 , 0 )
481+ elseif (wA. a == A. a) && (wA. b == A. b) && (wA. c == A. c) && (wB. a == B. a) && (wB. b == B. b) && (wB. c == B. c) && isinteger (A. a) && isinteger (A. b) && isinteger (A. c) && isinteger (B. a) && isinteger (B. b) && isinteger (B. c)
482+ k = sumquotient (SemiclassicalJacobiWeight (B. t,B. a,B. b,B. c),SemiclassicalJacobiWeight (A. t,A. a,A. b,A. c))
483+ return (ApplyArray (* ,Diagonal (Fill (k,∞)),(B \ A)))'
468484 elseif wA. a == wB. a && wA. b == wB. b && wA. c == wB. c # fallback to Christoffel–Darboux
469485 A \ B
470486 elseif wA. a+ 1 == wB. a && wA. b == wB. b && wA. c == wB. c
0 commit comments