Browse Source

interpolation: refactoring for access to coefficient/weight computation

Signed-off-by: Christoph Ruegg <git@cdrnet.ch>
pull/2/head
Christoph Ruegg 17 years ago
parent
commit
f8bfc46151
  1. 23
      src/Managed/Interpolation/Algorithms/CubicHermiteSplineInterpolation.cs
  2. 33
      src/Managed/Interpolation/Algorithms/FloaterHormannRationalInterpolation.cs
  3. 20
      src/Managed/Interpolation/Algorithms/LinearSplineInterpolation.cs

23
src/Managed/Interpolation/Algorithms/CubicHermiteSplineInterpolation.cs

@ -96,6 +96,27 @@ namespace MathNet.Numerics.Interpolation.Algorithms
IList<double> samplePoints,
IList<double> sampleValues,
IList<double> sampleDerivatives)
{
double[] coefficients = EvaluateSplineCoefficients(
samplePoints,
sampleValues,
sampleDerivatives);
_spline.Initialize(samplePoints, coefficients);
}
/// <summary>
/// Evaluate the spline coefficients as used
/// internally by this interpolation algorithm.
/// </summary>
/// <param name="samplePoints">Sample Points t, sorted ascending.</param>
/// <param name="sampleValues">Sample Values x(t)</param>
/// <param name="sampleDerivatives">Sample Derivatives x'(t)</param>
/// <returns>Spline Coefficient Vector</returns>
public static double[] EvaluateSplineCoefficients(
IList<double> samplePoints,
IList<double> sampleValues,
IList<double> sampleDerivatives)
{
if (null == samplePoints)
{
@ -136,7 +157,7 @@ namespace MathNet.Numerics.Interpolation.Algorithms
coefficients[j + 3] = ((2 * (sampleValues[i] - sampleValues[i + 1])) + (sampleDerivatives[i] * delta) + (sampleDerivatives[i + 1] * delta)) / delta3;
}
_spline.Initialize(samplePoints, coefficients);
return coefficients;
}
/// <summary>

33
src/Managed/Interpolation/Algorithms/FloaterHormannRationalInterpolation.cs

@ -101,7 +101,12 @@ namespace MathNet.Numerics.Interpolation.Algorithms
throw new ArgumentNullException("samplePoints");
}
Initialize(samplePoints, sampleValues, Math.Min(3, samplePoints.Count - 1));
double[] weights = EvaluateBarycentricWeights(
samplePoints,
sampleValues,
Math.Min(3, samplePoints.Count - 1));
_barycentric.Initialize(samplePoints, sampleValues, weights);
}
/// <summary>
@ -117,6 +122,30 @@ namespace MathNet.Numerics.Interpolation.Algorithms
IList<double> samplePoints,
IList<double> sampleValues,
int order)
{
double[] weights = EvaluateBarycentricWeights(
samplePoints,
sampleValues,
order);
_barycentric.Initialize(samplePoints, sampleValues, weights);
}
/// <summary>
/// Evaluate the barycentric weights as used
/// internally by this interpolation algorithm.
/// </summary>
/// <param name="samplePoints">Sample Points t</param>
/// <param name="sampleValues">Sample Values x(t)</param>
/// <param name="order">
/// Order of the interpolation scheme, 0 &lt;= order &lt;= N.
/// In most cases a value between 3 and 8 gives good results.
/// </param>
/// <returns>Barycentric Weight Vector</returns>
public static double[] EvaluateBarycentricWeights(
IList<double> samplePoints,
IList<double> sampleValues,
int order)
{
if (null == samplePoints)
{
@ -203,7 +232,7 @@ namespace MathNet.Numerics.Interpolation.Algorithms
weights[perm[i]] = sortedWeights[i];
}
_barycentric.Initialize(samplePoints, sampleValues, weights);
return weights;
}
/// <summary>

20
src/Managed/Interpolation/Algorithms/LinearSplineInterpolation.cs

@ -92,6 +92,24 @@ namespace MathNet.Numerics.Interpolation.Algorithms
public void Initialize(
IList<double> samplePoints,
IList<double> sampleValues)
{
double[] coefficients = EvaluateSplineCoefficients(
samplePoints,
sampleValues);
_spline.Initialize(samplePoints, coefficients);
}
/// <summary>
/// Evaluate the spline coefficients as used
/// internally by this interpolation algorithm.
/// </summary>
/// <param name="samplePoints">Sample Points t, sorted ascending.</param>
/// <param name="sampleValues">Sample Values x(t)</param>
/// <returns>Spline Coefficient Vector</returns>
public static double[] EvaluateSplineCoefficients(
IList<double> samplePoints,
IList<double> sampleValues)
{
if (null == samplePoints)
{
@ -123,7 +141,7 @@ namespace MathNet.Numerics.Interpolation.Algorithms
coefficients[j + 3] = 0;
}
_spline.Initialize(samplePoints, coefficients);
return coefficients;
}
/// <summary>

Loading…
Cancel
Save