Skip to content

Commit cb37073

Browse files
authored
Logkernel evaluated at ±1 (#52)
* Support logkernel evaluate at ±1 * v0.3.6
1 parent dd12614 commit cb37073

File tree

3 files changed

+17
-6
lines changed

3 files changed

+17
-6
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "SingularIntegrals"
22
uuid = "d7440221-8b5e-42fc-909c-0567823f424a"
33
authors = ["Sheehan Olver <solver@mac.com>"]
4-
version = "0.3.5"
4+
version = "0.3.6"
55

66
[deps]
77
ArrayLayouts = "4c555306-a7a7-4459-81d9-ec55ddd5c99a"

src/logkernel.jl

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ end
4242
"""
4343
logkernel(P)
4444
45-
applies the log kernel log(abs(x-t)) to the columns of a quasi matrix, i.e., `(log.(abs.(x - x')) * P)`
45+
applies the log kernel log(abs(x-t)) to the columns of a quasi matrix, i.e., `(log.(abs.(x - x')) * P)`
4646
"""
4747
logkernel(P, z...) = logkernel_layout(MemoryLayout(P), P, z...)
4848

@@ -145,10 +145,12 @@ function complexlogkernel_recurrence(wP::Weighted{<:Any,<:ChebyshevU})
145145
(2*(n .+ 2)) ./ (n .+ 3), Zeros{R}(∞), (n .+ 2) .* (n .- 1) ./ (n .* (n .+ 3))
146146
end
147147

148+
149+
zlog(z) = ifelse(iszero(z), z, z*log(z))
148150
function complexlogkernel_ics(P::Weighted{<:Any,<:Legendre}, z::Number)
149151
T = promote_type(eltype(P), typeof(z))
150-
r0 = (1 + z)log(1 + z) - (z-1)log(z-1) - 2one(T)
151-
r1 = (z+1)*r0/2 + 1 - (z+1)log(z+1)
152+
r0 = zlog(1 + z) - zlog(z-1) - 2one(T)
153+
r1 = (z+1)*r0/2 + 1 - zlog(z+1)
152154
r2 = z*r1 + 2*one(T)/3
153155
r0,r1,r2
154156
end

test/test_logkernel.jl

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,13 @@ using ClassicalOrthogonalPolynomials: affine
2626
@test complexlogkernel(exp.(x), 2 + im) sum(log.((2+im) .- x) .* exp.(x))
2727
@test_throws ArgumentError complexlogkernel(Jacobi(0.1,0.2), 2+im)
2828
end
29+
30+
@testset "endpoints" begin
31+
@test complexlogkernel(exp.(x), 1) logkernel(exp.(x), 1) -1.9569548200977875
32+
@test real(complexlogkernel(exp.(x), -1+0im)) logkernel(exp.(x), -1) 0.27395419528475684
33+
@test complexlogkernel(exp.(x), -1+0.0im) 0.27395419528475684+7.38400687288264im
34+
@test complexlogkernel(exp.(x), -1-0.0im) 0.27395419528475684-7.38400687288264im
35+
end
2936
end
3037

3138
@testset "LogKernelPoint" begin
@@ -37,10 +44,12 @@ end
3744
@test L isa LogKernelPoint{Float64,ComplexF64,ComplexF64,Float64,ChebyshevInterval{Float64}}
3845
@test (L * wU)[1:5] [ -1.2919202947616695, -0.20965486677056738, 0.6799687631764493, 0.13811497572177128, -0.2289481463304956]
3946

40-
@test L * (wU / wU \ @.(exp(x) * sqrt(1 - x^2))) -1.4812979070884382
47+
fU = wU / wU \ @.(exp(x) * sqrt(1 - x^2))
48+
@test L * fU logkernel(fU, z) -1.4812979070884382
4149

4250
wT = Weighted(ChebyshevT())
43-
@test L * (wT / wT \ @.(exp(x) / sqrt(1 - x^2))) -1.9619040529776954 #mathematica
51+
fT = (wT / wT \ @.(exp(x) / sqrt(1 - x^2)))
52+
@test L * fT logkernel(fT, z) -1.9619040529776954 #mathematica
4453
end
4554

4655
@testset "Real point" begin

0 commit comments

Comments
 (0)