Browse Source

Interpolation: use Array.BinarySearch in segment search in splines (via Candy Chiu)

provider
Christoph Ruegg 12 years ago
parent
commit
3354b68483
  1. 17
      src/Numerics/Interpolation/CubicSpline.cs
  2. 17
      src/Numerics/Interpolation/LinearSpline.cs
  3. 17
      src/Numerics/Interpolation/QuadraticSpline.cs
  4. 8
      src/Numerics/Interpolation/StepInterpolation.cs

17
src/Numerics/Interpolation/CubicSpline.cs

@ -523,22 +523,13 @@ namespace MathNet.Numerics.Interpolation
/// </summary>
int LeftSegmentIndex(double t)
{
int low = 0;
int high = _x.Length - 1;
while (low != high - 1)
int index = Array.BinarySearch(_x, t);
if (index < 0)
{
int middle = (low + high)/2;
if (_x[middle] > t)
{
high = middle;
}
else
{
low = middle;
}
index = ~index - 1;
}
return low;
return Math.Min(Math.Max(index, 0), _x.Length - 2);
}
}
}

17
src/Numerics/Interpolation/LinearSpline.cs

@ -202,22 +202,13 @@ namespace MathNet.Numerics.Interpolation
/// </summary>
int LeftSegmentIndex(double t)
{
int low = 0;
int high = _x.Length - 1;
while (low != high - 1)
int index = Array.BinarySearch(_x, t);
if (index < 0)
{
int middle = (low + high)/2;
if (_x[middle] > t)
{
high = middle;
}
else
{
low = middle;
}
index = ~index - 1;
}
return low;
return Math.Min(Math.Max(index, 0), _x.Length - 2);
}
}
}

17
src/Numerics/Interpolation/QuadraticSpline.cs

@ -157,22 +157,13 @@ namespace MathNet.Numerics.Interpolation
/// </summary>
int LeftSegmentIndex(double t)
{
int low = 0;
int high = _x.Length - 1;
while (low != high - 1)
int index = Array.BinarySearch(_x, t);
if (index < 0)
{
int middle = (low + high)/2;
if (_x[middle] > t)
{
high = middle;
}
else
{
low = middle;
}
index = ~index - 1;
}
return low;
return Math.Min(Math.Max(index, 0), _x.Length - 2);
}
}
}

8
src/Numerics/Interpolation/StepInterpolation.cs

@ -193,13 +193,7 @@ namespace MathNet.Numerics.Interpolation
int LeftBracketIndex(double t)
{
int index = Array.BinarySearch(_x, t);
if (index >= 0)
{
return index;
}
index = ~index;
return index - 1;
return index >= 0 ? index : ~index - 1;
}
}
}

Loading…
Cancel
Save