Skip to content

Commit 884fdcc

Browse files
authored
Merge pull request #243 from danielwe/transformation
Fix incorrect substitution for finite domain transformation
2 parents e7cdd8e + 7a279b5 commit 884fdcc

File tree

2 files changed

+35
-20
lines changed

2 files changed

+35
-20
lines changed

src/infinity_handling.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ function substitute_t(t::Number, lb::Number, ub::Number)
3333
lb + t * den * u, den^2 * u
3434
else
3535
den = (ub - lb) * oftype(t, 0.5)
36-
lb - t * den, den
36+
lb + (1 + t) * den, den
3737
end
3838
end
3939
function substitute_t(t::AbstractVector, lb::AbstractVector, ub::AbstractVector)

test/inf_integral_tests.jl

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -50,70 +50,85 @@ problems = (
5050
domain = (@SVector[-Inf, -Inf], @SVector[Inf, 0]),
5151
solution = 0.5
5252
),
53-
(; # 5. single-variable infinite limit: Gaussian
53+
(; # 5. multi-variate mixed infinite/finite: Gaussian * quadratic
54+
f = (x, p) -> pdf(Normal(0.00, 1.00), x[1]) * x[2]^2,
55+
domain = (@SVector[-Inf, 1], @SVector[Inf, 4]),
56+
solution = 21.0
57+
),
58+
(; # 6. multi-variate mixed semi-infinite lower limit/finite: Gaussian * quadratic
59+
f = (x, p) -> pdf(Normal(0.00, 1.00), x[1]) * x[2]^2,
60+
domain = (@SVector[0.00, 1], @SVector[Inf, 4]),
61+
solution = 10.5
62+
),
63+
(; # 7. multi-variate mixed semi-infinite upper limit/finite: Gaussian * quadratic
64+
f = (x, p) -> pdf(Normal(0.00, 1.00), x[1]) * x[2]^2,
65+
domain = (@SVector[-Inf, 1], @SVector[0.00, 4]),
66+
solution = 10.5
67+
),
68+
(; # 8. single-variable infinite limit: Gaussian
5469
f = (x, p) -> pdf(Normal(0.00, 1.00), x),
5570
domain = (-Inf, Inf),
5671
solution = 1.0
5772
),
58-
(; # 6. single-variable flipped infinite limit: Gaussian
73+
(; # 9. single-variable flipped infinite limit: Gaussian
5974
f = (x, p) -> pdf(Normal(0.00, 1.00), x),
6075
domain = (Inf, -Inf),
6176
solution = -1.0
6277
),
63-
(; # 7. single-variable semi-infinite upper limit: Gaussian
78+
(; # 10. single-variable semi-infinite upper limit: Gaussian
6479
f = (x, p) -> pdf(Normal(0.00, 1.00), x),
6580
domain = (0.00, Inf),
6681
solution = 0.5
6782
),
68-
(; # 8. single-variable flipped, semi-infinite upper limit: Gaussian
83+
(; # 11. single-variable flipped, semi-infinite upper limit: Gaussian
6984
f = (x, p) -> pdf(Normal(0.00, 1.00), x),
7085
domain = (0.00, -Inf),
7186
solution = -0.5
7287
),
73-
(; # 9. single-variable semi-infinite lower limit: Gaussian
88+
(; # 12. single-variable semi-infinite lower limit: Gaussian
7489
f = (x, p) -> pdf(Normal(0.00, 1.00), x),
7590
domain = (-Inf, 0.00),
7691
solution = 0.5
7792
),
78-
(; # 10. single-variable flipped, semi-infinite lower limit: Gaussian
93+
(; # 13. single-variable flipped, semi-infinite lower limit: Gaussian
7994
f = (x, p) -> pdf(Normal(0.00, 1.00), x),
8095
domain = (Inf, 0.00),
8196
solution = -0.5
8297
),
83-
(; # 11. single-variable infinite limit: Lorentzian
98+
(; # 14. single-variable infinite limit: Lorentzian
8499
f = (x, p) -> 1 / (x^2 + 1),
85100
domain = (-Inf, Inf),
86101
solution = pi / 1
87102
),
88-
(; # 12. single-variable shifted, semi-infinite lower limit: Lorentzian
103+
(; # 15. single-variable shifted, semi-infinite lower limit: Lorentzian
89104
f = (x, p) -> 1 / ((x - 2)^2 + 1),
90105
domain = (-Inf, 2),
91106
solution = pi / 2
92107
),
93-
(; # 13. single-variable shifted, semi-infinite upper limit: Lorentzian
108+
(; # 16. single-variable shifted, semi-infinite upper limit: Lorentzian
94109
f = (x, p) -> 1 / ((x - 2)^2 + 1),
95110
domain = (2, Inf),
96111
solution = pi / 2
97112
),
98-
(; # 14. single-variable flipped, shifted, semi-infinite lower limit: Lorentzian
113+
(; # 17. single-variable flipped, shifted, semi-infinite lower limit: Lorentzian
99114
f = (x, p) -> 1 / ((x - 2)^2 + 1),
100115
domain = (Inf, 2),
101116
solution = -pi / 2
102117
),
103-
(; # 15. single-variable flipped, shifted, semi-infinite upper limit: Lorentzian
118+
(; # 18. single-variable flipped, shifted, semi-infinite upper limit: Lorentzian
104119
f = (x, p) -> 1 / ((x - 2)^2 + 1),
105120
domain = (2, -Inf),
106121
solution = -pi / 2
107122
),
108-
(; # 16. single-variable finite limits: constant
109-
f = (x, p) -> 1.0,
110-
domain = (1, 3),
111-
solution = 2
123+
(; # 19. single-variable finite limits: quadratic
124+
f = (x, p) -> x^2,
125+
domain = (1, 4),
126+
solution = 21
112127
),
113-
(; # 17. single-variable flipped, finite limits: constant
114-
f = (x, p) -> 1.0,
115-
domain = (3, 1),
116-
solution = -2
128+
(; # 20. single-variable flipped, finite limits: quadratic
129+
f = (x, p) -> x^2,
130+
domain = (4, 1),
131+
solution = -21
117132
)
118133
)
119134

0 commit comments

Comments
 (0)