Skip to content

Commit 23e6798

Browse files
committed
Add optional extrapolation methods
1 parent ccd89d7 commit 23e6798

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

src/integral_inverses.jl

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,10 @@ struct LinearInterpolationIntInv{uType, tType, itpType, T} <:
4141
extrapolation_right::ExtrapolationType.T
4242
iguesser::Guesser{tType}
4343
itp::itpType
44-
function LinearInterpolationIntInv(u, t, A)
44+
function LinearInterpolationIntInv(u, t, A, extrapolation_left = A.extrapolation_left,
45+
extrapolation_right = A.extrapolation_right)
4546
new{typeof(u), typeof(t), typeof(A), eltype(u)}(
46-
u, t, A.extrapolation_left, A.extrapolation_right, Guesser(t), A)
47+
u, t, extrapolation_left, extrapolation_right, Guesser(t), A)
4748
end
4849
end
4950

@@ -57,9 +58,13 @@ function get_I(A::AbstractInterpolation)
5758
I
5859
end
5960

60-
function invert_integral(A::LinearInterpolation{<:AbstractVector{<:Number}})
61+
function invert_integral(A::LinearInterpolation{<:AbstractVector{<:Number}},
62+
extrapolation_left::ExtrapolationType.T = A.extrapolation_left,
63+
extrapolation_right::ExtrapolationType.T = A.extrapolation_right)
6164
!invertible_integral(A) && throw(IntegralNotInvertibleError())
62-
return LinearInterpolationIntInv(A.t, get_I(A), A)
65+
66+
return LinearInterpolationIntInv(
67+
A.t, get_I(A), A, extrapolation_left, extrapolation_right)
6368
end
6469

6570
function _interpolate(
@@ -92,9 +97,11 @@ struct ConstantInterpolationIntInv{uType, tType, itpType, T} <:
9297
extrapolation_right::ExtrapolationType.T
9398
iguesser::Guesser{tType}
9499
itp::itpType
95-
function ConstantInterpolationIntInv(u, t, A)
100+
function ConstantInterpolationIntInv(
101+
u, t, A, extrapolation_left = A.extrapolation_left,
102+
extrapolation_right = A.extrapolation_right)
96103
new{typeof(u), typeof(t), typeof(A), eltype(u)}(
97-
u, t, A.extrapolation_left, A.extrapolation_right, Guesser(t), A
104+
u, t, extrapolation_left, extrapolation_right, Guesser(t), A
98105
)
99106
end
100107
end
@@ -103,9 +110,12 @@ function invertible_integral(A::ConstantInterpolation{<:AbstractVector{<:Number}
103110
return all(A.u .> 0)
104111
end
105112

106-
function invert_integral(A::ConstantInterpolation{<:AbstractVector{<:Number}})
113+
function invert_integral(A::ConstantInterpolation{<:AbstractVector{<:Number}},
114+
extrapolation_left::ExtrapolationType.T = A.extrapolation_left,
115+
extrapolation_right::ExtrapolationType.T = A.extrapolation_right)
107116
!invertible_integral(A) && throw(IntegralNotInvertibleError())
108-
return ConstantInterpolationIntInv(A.t, get_I(A), A)
117+
return ConstantInterpolationIntInv(
118+
A.t, get_I(A), A, extrapolation_left, extrapolation_right)
109119
end
110120

111121
function _interpolate(

0 commit comments

Comments
 (0)