mirror of
https://github.com/aportelli/LatAnalyze.git
synced 2024-11-10 08:55:37 +00:00
slight optimisation of the quadratic interpolation
This commit is contained in:
parent
e950e18639
commit
ff968efd94
@ -92,7 +92,7 @@ double TabFunction::operator()(const double *arg) const
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case InterpType::QUADRATIC: {
|
case InterpType::QUADRATIC: {
|
||||||
double xs[3], ys[3], as[3];
|
double xs[3], ys[3], ds[3], d01, d02, d12;
|
||||||
auto it = nearest(x);
|
auto it = nearest(x);
|
||||||
if (it == value_.begin()) {
|
if (it == value_.begin()) {
|
||||||
it = next(it);
|
it = next(it);
|
||||||
@ -106,18 +106,17 @@ double TabFunction::operator()(const double *arg) const
|
|||||||
ys[1] = it->second;
|
ys[1] = it->second;
|
||||||
xs[2] = next(it)->first;
|
xs[2] = next(it)->first;
|
||||||
ys[2] = next(it)->second;
|
ys[2] = next(it)->second;
|
||||||
|
ds[0] = x - xs[0];
|
||||||
|
ds[1] = x - xs[1];
|
||||||
|
ds[2] = x - xs[2];
|
||||||
|
d01 = xs[0] - xs[1];
|
||||||
|
d02 = xs[0] - xs[2];
|
||||||
|
d12 = xs[1] - xs[2];
|
||||||
|
|
||||||
// Lagrange polynomial coefficient computation
|
// Lagrange polynomial coefficient computation
|
||||||
as[0]
|
result = ds[1]/d01*ds[2]/d02*ys[0]
|
||||||
= (x - xs[1]) / (xs[0] - xs[1])
|
-ds[0]/d01*ds[2]/d12*ys[1]
|
||||||
* (x - xs[2]) / (xs[0] - xs[2]);
|
+ds[0]/d02*ds[1]/d12*ys[2];
|
||||||
as[1]
|
|
||||||
= (x - xs[0]) / (xs[1] - xs[0])
|
|
||||||
* (x - xs[2]) / (xs[1] - xs[2]);
|
|
||||||
as[2]
|
|
||||||
= (x - xs[0]) / (xs[2] - xs[0])
|
|
||||||
* (x - xs[1]) / (xs[2] - xs[1]);
|
|
||||||
result = as[0] * ys[0] + as[1] * ys[1] + as[2] * ys[2];
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
Loading…
Reference in New Issue
Block a user