Skip to content

Commit 1514f7a

Browse files
committed
replace newton method by analytic solution.
1 parent a1a089d commit 1514f7a

File tree

2 files changed

+4
-15
lines changed

2 files changed

+4
-15
lines changed

pineappl/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ rayon = "1.5.1"
3232
rustc-hash = "1.1.0"
3333
serde = { features = ["derive"], version = "1.0.130" }
3434
thiserror = "1.0.30"
35+
lambert_w = "1.2.31"
3536

3637
[dev-dependencies]
3738
lhapdf = { package = "managed-lhapdf", version = "0.3.4" }

pineappl/src/interpolation.rs

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,9 @@ mod applgrid {
1616
}
1717

1818
pub fn fx2(y: f64) -> f64 {
19-
let mut yp = y;
20-
let mut deltap = f64::INFINITY;
21-
22-
for _ in 0..10 {
23-
let x = (-yp).exp();
24-
let delta = (1.0 - x).mul_add(-5.0, y - yp);
25-
if (delta.abs() < 1e-15) && (delta >= deltap) {
26-
return x;
27-
}
28-
let deriv = x.mul_add(-5.0, -1.0);
29-
yp -= delta / deriv;
30-
deltap = delta;
31-
}
32-
33-
unreachable!();
19+
let z = -5.0 * (-y).exp();
20+
let w = lambert_w::lambert_w0(z);
21+
return -w / 5.0;
3422
}
3523

3624
pub fn fy2(x: f64) -> f64 {

0 commit comments

Comments
 (0)