@@ -162,12 +162,14 @@ julia> J0[0],J0[0.5]
162162(1.0, 1.0)
163163```
164164"""
165- struct Jacobi{T} <: AbstractJacobi{T}
166- a:: T
167- b:: T
168- Jacobi {T} (a, b) where T = new {T} (convert (T ,a), convert (T ,b))
165+ struct Jacobi{T,V } <: AbstractJacobi{T}
166+ a:: V
167+ b:: V
168+ Jacobi {T,V } (a, b) where {T,V} = new {T,V } (convert (V ,a), convert (V ,b))
169169end
170170
171+ Jacobi {T} (a:: V , b:: V ) where {T,V} = Jacobi {T,V} (a, b)
172+ Jacobi {T} (a, b) where T = Jacobi {T} (promote (a,b)... )
171173Jacobi (a:: V , b:: T ) where {T,V} = Jacobi {float(promote_type(T,V))} (a, b)
172174
173175AbstractQuasiArray {T} (w:: Jacobi ) where T = Jacobi {T} (w. a, w. b)
@@ -273,15 +275,16 @@ axes(::AbstractJacobi{T}) where T = (Inclusion{T}(ChebyshevInterval{real(T)}()),
273275== (P:: Legendre , Q:: Jacobi ) = Jacobi (P) == Q
274276== (P:: Jacobi , Q:: Legendre ) = P == Jacobi (Q)
275277== (A:: WeightedJacobi , B:: WeightedJacobi ) = A. args == B. args
276- == (A:: WeightedJacobi , B:: Jacobi{T} ) where T = A == JacobiWeight (zero (T ),zero (T )).* B
278+ == (A:: WeightedJacobi , B:: Jacobi{T,V } ) where {T,V} = A == JacobiWeight (zero (V ),zero (V )).* B
277279== (A:: WeightedJacobi , B:: Legendre ) = A == Jacobi (B)
278280== (A:: Legendre , B:: WeightedJacobi ) = Jacobi (A) == B
279- == (A:: Jacobi{T} , B:: WeightedJacobi ) where T = JacobiWeight (zero (T ),zero (T )).* A == B
281+ == (A:: Jacobi{T,V } , B:: WeightedJacobi ) where {T,V} = JacobiWeight (zero (V ),zero (V )).* A == B
280282== (A:: Legendre , B:: Weighted{<:Any,<:AbstractJacobi} ) = A == B. P
281283== (A:: Weighted{<:Any,<:AbstractJacobi} , B:: Legendre ) = A. P == B
282284
283285show (io:: IO , P:: Jacobi ) = summary (io, P)
284- summary (io:: IO , P:: Jacobi ) = print (io, " Jacobi($(P. a) , $(P. b) )" )
286+ summary (io:: IO , P:: Jacobi{Float64} ) = print (io, " Jacobi($(P. a) , $(P. b) )" )
287+ summary (io:: IO , P:: Jacobi{T} ) where T = print (io, " Jacobi{$T }($(P. a) , $(P. b) )" )
285288
286289# ##
287290# transforms
@@ -523,22 +526,22 @@ diff(S::Jacobi; dims=1) = ApplyQuasiMatrix(*, Jacobi(S.a+1,S.b+1), _BandedMatrix
523526
524527function diff (S:: Jacobi{T} , m:: Integer ; dims= 1 ) where T
525528 D = _BandedMatrix ((pochhammer .((S. a + S. b+ 1 ): ∞, m)/ convert (T, 2 )^ m)' , ℵ₀, - m, m)
526- ApplyQuasiMatrix (* , Jacobi (S. a+ m,S. b+ m), D)
529+ ApplyQuasiMatrix (* , Jacobi {T} (S. a+ m,S. b+ m), D)
527530end
528531
529532
530533# L_6^t
531- function diff (WS:: HalfWeighted{:a,<:Any ,<:Jacobi} ; dims= 1 )
534+ function diff (WS:: HalfWeighted{:a,T ,<:Jacobi} ; dims= 1 ) where T
532535 S = WS. P
533536 a,b = S. a, S. b
534- ApplyQuasiMatrix (* , HalfWeighted {:a} (Jacobi (a- 1 ,b+ 1 )), Diagonal (- (a: ∞)))
537+ ApplyQuasiMatrix (* , HalfWeighted {:a} (Jacobi {T} (a- 1 ,b+ 1 )), Diagonal (- (a: ∞)))
535538end
536539
537540# L_6
538- function diff (WS:: HalfWeighted{:b,<:Any ,<:Jacobi} ; dims= 1 )
541+ function diff (WS:: HalfWeighted{:b,T ,<:Jacobi} ; dims= 1 ) where T
539542 S = WS. P
540543 a,b = S. a, S. b
541- ApplyQuasiMatrix (* , HalfWeighted {:b} (Jacobi (a+ 1 ,b- 1 )), Diagonal (b: ∞))
544+ ApplyQuasiMatrix (* , HalfWeighted {:b} (Jacobi {T} (a+ 1 ,b- 1 )), Diagonal (b: ∞))
542545end
543546
544547for ab in (:(:a ), :(:b ))
@@ -549,7 +552,7 @@ for ab in (:(:a), :(:b))
549552end
550553
551554
552- function diff (WS:: Weighted{<:Any ,<:Jacobi} ; dims= 1 )
555+ function diff (WS:: Weighted{T ,<:Jacobi} ; dims= 1 ) where T
553556 # L_1^t
554557 S = WS. P
555558 a,b = S. a, S. b
@@ -560,13 +563,13 @@ function diff(WS::Weighted{<:Any,<:Jacobi}; dims=1)
560563 elseif iszero (b)
561564 diff (HalfWeighted {:a} (S))
562565 else
563- ApplyQuasiMatrix (* , Weighted (Jacobi (a- 1 , b- 1 )), _BandedMatrix ((- 2 * (1 : ∞))' , ℵ₀, 1 ,- 1 ))
566+ ApplyQuasiMatrix (* , Weighted (Jacobi {T} (a- 1 , b- 1 )), _BandedMatrix ((- 2 * (1 : ∞))' , ℵ₀, 1 ,- 1 ))
564567 end
565568end
566569
567570
568571# Jacobi(a-1,b-1)\ (D*w*Jacobi(a,b))
569- function diff (WS:: WeightedJacobi ; dims= 1 )
572+ function diff (WS:: WeightedJacobi{T} ; dims= 1 ) where T
570573 w,S = WS. args
571574 a,b = S. a, S. b
572575 if isorthogonalityweighted (WS) # L_1^t
@@ -582,22 +585,22 @@ function diff(WS::WeightedJacobi; dims=1)
582585 # D * ((1+x)^w.b * P^(a,b)) == D * ((1+x)^(w.b-b) * (1+x)^b * P^(a,b))
583586 # == (1+x)^(w.b-1) * (w.b-b) * P^(a,b) + (1+x)^(w.b-b) * D*((1+x)^b*P^(a,b))
584587 # == (1+x)^(w.b-1) * P^(a+1,b) ((w.b-b) * C2 + C1 * W)
585- W = HalfWeighted {:b} (Jacobi (a+ 1 , b- 1 )) \ diff (HalfWeighted {:b} (S))
586- J = Jacobi (a+ 1 ,b) # range Jacobi
587- C1 = J \ Jacobi (a+ 1 , b- 1 )
588- C2 = J \ Jacobi (a,b)
588+ W = HalfWeighted {:b} (Jacobi {T} (a+ 1 , b- 1 )) \ diff (HalfWeighted {:b} (S))
589+ J = Jacobi {T} (a+ 1 ,b) # range Jacobi
590+ C1 = J \ Jacobi {T} (a+ 1 , b- 1 )
591+ C2 = J \ Jacobi {T} (a,b)
589592 ApplyQuasiMatrix (* , JacobiWeight (w. a,w. b- 1 ) .* J, (w. b- b) * C2 + C1 * W)
590593 elseif iszero (w. b)
591- W = HalfWeighted {:a} (Jacobi (a- 1 , b+ 1 )) \ diff (HalfWeighted {:a} (S))
592- J = Jacobi (a,b+ 1 ) # range Jacobi
593- C1 = J \ Jacobi (a- 1 , b+ 1 )
594- C2 = J \ Jacobi (a,b)
594+ W = HalfWeighted {:a} (Jacobi {T} (a- 1 , b+ 1 )) \ diff (HalfWeighted {:a} (S))
595+ J = Jacobi {T} (a,b+ 1 ) # range Jacobi
596+ C1 = J \ Jacobi {T} (a- 1 , b+ 1 )
597+ C2 = J \ Jacobi {T} (a,b)
595598 ApplyQuasiMatrix (* , JacobiWeight (w. a- 1 ,w. b) .* J, - (w. a- a) * C2 + C1 * W)
596599 elseif iszero (a) && iszero (b) # Legendre
597600 # D * ((1+x)^w.b * (1-x)^w.a * P))
598601 # == (1+x)^(w.b-1) * (1-x)^(w.a-1) * ((1-x) * (w.b) * P - (1+x) * w.a * P + (1-x^2) * D * P)
599602 # == (1+x)^(w.b-1) * (1-x)^(w.a-1) * ((1-x) * (w.b) * P - (1+x) * w.a * P + P * L * W)
600- J = Jacobi (a+ 1 ,b+ 1 ) # range space
603+ J = Jacobi {T} (a+ 1 ,b+ 1 ) # range space
601604 W = J \ diff (S)
602605 X = jacobimatrix (S)
603606 L = S \ Weighted (J)
@@ -608,9 +611,9 @@ function diff(WS::WeightedJacobi; dims=1)
608611 # == (1+x)^(w.b-1) * (1-x)^(w.a-1) * ((1-x) * (w.b-b) * P^(a,b) + (1+x) * (a-w.a) * P^(a,b))
609612 # + (1+x)^(w.b-b) * (1-x)^(w.a-a) * D * ((1+x)^b * (1-x)^a * P^(a,b)))
610613
611- W = Weighted (Jacobi (a- 1 ,b- 1 )) \ diff (Weighted (S))
614+ W = Weighted (Jacobi {T} (a- 1 ,b- 1 )) \ diff (Weighted (S))
612615 X = jacobimatrix (S)
613- C = S \ Jacobi (a- 1 ,b- 1 )
616+ C = S \ Jacobi {T} (a- 1 ,b- 1 )
614617 (JacobiWeight (w. a- 1 ,w. b- 1 ) .* S) * (((w. b- b+ a- w. a)* I+ (a- w. a- w. b+ b) * X) + C* W)
615618 end
616619end
0 commit comments