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" diff --git a/src/rect.jl b/src/rect.jl index 9ee2454..9edeeaf 100644 --- a/src/rect.jl +++ b/src/rect.jl @@ -53,8 +53,8 @@ function jacobimatrix(::Val{2}, P::RectPolynomial) KronTrav(Y, Eye{eltype(Y)}(∞)) end function diff(P::KronPolynomial{N}, order::NTuple{N,Int}; dims...) where N - diffs = diff.(P.args, order) - RectPolynomial(basis.(diffs)...) * KronTrav(coefficients.(diffs)...) + diffs = map(diff, P.args, order) + RectPolynomial(map(basis, diffs)...) * KronTrav(reverse(map(coefficients, diffs))...) end @@ -164,7 +164,7 @@ end ## sum -function Base._sum(P::RectPolynomial, dims) +function Base._sum(P::RectPolynomial, dims::Int) @assert dims == 1 KronTrav(sum.(P.args; dims=1)...) end diff --git a/test/test_rect.jl b/test/test_rect.jl index b7cf90f..aca9598 100644 --- a/test/test_rect.jl +++ b/test/test_rect.jl @@ -155,6 +155,21 @@ using Base: oneto @test sum(f) ≈ 10.546408460894801 # empirical end + @testset "diff" begin + P = RectPolynomial(Legendre(),Legendre()) + f = expand(P, splat((x,y) -> 1)) + @test diff(f,(1,0))[SVector(0.1,0.2)] == diff(f,(0,1))[SVector(0.1,0.2)] == 0.0 + f = expand(P, splat((x,y) -> x)) + @test diff(f,(1,0))[SVector(0.1,0.2)] == 1.0 + @test diff(f,(0,1))[SVector(0.1,0.2)] == 0.0 + f = expand(P, splat((x,y) -> cos(x*exp(y)))) + @test diff(f,(1,0))[SVector(0.1,0.2)] ≈ -sin(0.1*exp(0.2))*exp(0.2) + @test diff(f,(0,1))[SVector(0.1,0.2)] ≈ -0.1*sin(0.1*exp(0.2))*exp(0.2) + @test diff(f,(2,0))[SVector(0.1,0.2)] ≈ -cos(0.1*exp(0.2))*exp(0.4) + @test diff(f,(1,1))[SVector(0.1,0.2)] ≈ -sin(0.1*exp(0.2))*exp(0.2) - 0.1*cos(0.1*exp(0.2))*exp(0.4) + @test diff(f,(0,2))[SVector(0.1,0.2)] ≈ -0.1*sin(0.1*exp(0.2))*exp(0.2) - 0.1^2*cos(0.1*exp(0.2))*exp(0.4) + end + @testset "KronTrav bug" begin W = Weighted(Ultraspherical(3/2)) D² = diff(W)'diff(W)