Code indexing in gitaly is broken and leads to code not being visible to the user. We work on the issue with highest priority.

Skip to content
Snippets Groups Projects
Commit b0afea69 authored by ext-rogers_c's avatar ext-rogers_c
Browse files

Fixes #728

parent c80823a8
No related branches found
No related tags found
1 merge request!589Resolve "Error in AsymmetricEnge derivatives"
......@@ -142,8 +142,19 @@ void AsymmetricEnge::setX0End(double x0) {
}
double AsymmetricEnge::function(double x, int n) const {
return engeStart_m->getEnge(x-engeStart_m->getX0(), n)+
engeEnd_m->getEnge(-x-engeEnd_m->getX0(), n)-1;
// f(x) = E(x-x0) + E(-x-x0) - 1
// f^{(2n)} = E^{(2n)}(x-x0) + E^{(2n)}(-x-x0)
// f^{(2n+1)} = E^{(2n)}(x-x0) - E^{(2n)}(-x-x0)
if (n == 0) {
return engeStart_m->getEnge(x-engeStart_m->getX0(), n)+
engeEnd_m->getEnge(-x-engeEnd_m->getX0(), n)-1;
} else if (n%2) {
return engeStart_m->getEnge(x-engeStart_m->getX0(), n)-
engeEnd_m->getEnge(-x-engeEnd_m->getX0(), n);
} else {
return engeStart_m->getEnge(x-engeStart_m->getX0(), n)+
engeEnd_m->getEnge(-x-engeEnd_m->getX0(), n);
}
}
AsymmetricEnge* AsymmetricEnge::clone() const {
......
......@@ -25,3 +25,20 @@ TEST(AsymmetricEngeTest, FunctionTest) {
}
}
TEST(AsymmetricEngeTest, DerivativeTest) {
endfieldmodel::AsymmetricEnge enge({0.0, 1.0}, 10.0, 3.0,
{0.0, 4.0}, 11.0, 6.0);
double ds = 0.01;
for (int n = 1; n < 5; ++n) {
for (double s = -20.0; s < 20.0; s += 1.0) {
double fplus = enge.function(s+ds, n-1);
double fminus = enge.function(s-ds, n-1);
double test = enge.function(s, n);
double ref = (fplus-fminus)/2/ds;
double delta = abs(ref*1e-3);
EXPECT_NEAR(test, ref, delta) << s << " " << test << " " << ref;
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment