From a1f7f05e73f18d1efd5551c14411271f36b7d50a Mon Sep 17 00:00:00 2001 From: Sheehan Olver Date: Mon, 17 Feb 2025 16:18:22 +0000 Subject: [PATCH 1/3] Add grammatrix(::KronPolynomial) --- src/rect.jl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/rect.jl b/src/rect.jl index 9ee2454..c7cf4c3 100644 --- a/src/rect.jl +++ b/src/rect.jl @@ -77,6 +77,8 @@ end KronTrav(PA'QA, PB'QB) end +grammatrix(P::KronPolynomial) = KronTrav(grammatrix.(P.args)...) + struct ApplyPlan{T, F, Pl} f::F From 2c4575a96e1ee3354691186f1d7bb64ef15e795a Mon Sep 17 00:00:00 2001 From: Sheehan Olver Date: Wed, 5 Mar 2025 16:23:45 -0600 Subject: [PATCH 2/3] fix arg order --- src/rect.jl | 14 ++++++-------- test/test_rect.jl | 10 ++++++++++ 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/rect.jl b/src/rect.jl index c7cf4c3..ecf12f3 100644 --- a/src/rect.jl +++ b/src/rect.jl @@ -62,22 +62,22 @@ function weaklaplacian(P::RectPolynomial) A,B = P.args Δ_A,Δ_B = weaklaplacian(A), weaklaplacian(B) M_A,M_B = grammatrix(A), grammatrix(B) - KronTrav(Δ_A,M_B) + KronTrav(M_A,Δ_B) + KronTrav(M_B,Δ_A) + KronTrav(Δ_B,M_A) end function \(P::RectPolynomial, Q::RectPolynomial) PA,PB = P.args QA,QB = Q.args - krontrav(PA\QA, PB\QB) + krontrav(PB\QB, PA\QA) end @simplify function *(Ac::QuasiAdjoint{<:Any,<:RectPolynomial}, B::RectPolynomial) PA,PB = Ac'.args QA,QB = B.args - KronTrav(PA'QA, PB'QB) + KronTrav(PB'QB, PA'QA) end -grammatrix(P::KronPolynomial) = KronTrav(grammatrix.(P.args)...) +grammatrix(P::KronPolynomial) = KronTrav(reverse(grammatrix.(P.args))...) struct ApplyPlan{T, F, Pl} @@ -104,10 +104,8 @@ function *(A::TensorPlan, B::AbstractArray) B end -function checkpoints(P::RectPolynomial) - x,y = checkpoints.(P.args) - SVector.(x, y') -end +checkpoints(P::ProductDomain) = tensorgrid(checkpoints.(components(P))...) +tensorgrid(x,y) = SVector.(x, y') function plan_transform(P::KronPolynomial{d,<:Any,<:Fill}, B::Tuple{Block{1}}, dims=1:1) where d @assert dims == 1 diff --git a/test/test_rect.jl b/test/test_rect.jl index b7cf90f..2f8dde0 100644 --- a/test/test_rect.jl +++ b/test/test_rect.jl @@ -61,6 +61,16 @@ using Base: oneto @test (Y * (TU \ f))[KR] ≈ (TU \ h)[KR] end + @testset "gram matrix" begin + P = Legendre() + Q = Ultraspherical(3/2) + PQ = RectPolynomial(P, Q) + M = grammatrix(PQ) + f = expand(PQ, splat((x,y) -> exp(x*cos(y + 1)))) + g = expand(PQ, splat((x,y) -> sin(x*cos(y + 1)+2))) + @test coefficients(g)[1:100]'M[1:100,1:100] * coefficients(f)[1:100] ≈ sum(expand(T², 𝐱 -> f[𝐱]g[𝐱])) + end + @testset "Conversion" begin T = ChebyshevT() U = ChebyshevU() From 3d92cbf7965d5817559c95adee069e5c0ab13649 Mon Sep 17 00:00:00 2001 From: Sheehan Olver Date: Wed, 5 Mar 2025 16:24:07 -0600 Subject: [PATCH 3/3] v0.9.2 --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index c0c5e44..d70897d 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "MultivariateOrthogonalPolynomials" uuid = "4f6956fd-4f93-5457-9149-7bfc4b2ce06d" -version = "0.9.1" +version = "0.9.2" [deps] ArrayLayouts = "4c555306-a7a7-4459-81d9-ec55ddd5c99a"