Browse Source

Interpolation: clean up old overly complicated formatting

optimization-1
Christoph Ruegg 13 years ago
parent
commit
e32a80ee9e
  1. 39
      src/Numerics/Interpolation/AkimaSplineInterpolation.cs
  2. 10
      src/Numerics/Interpolation/BarycentricInterpolation.cs
  3. 8
      src/Numerics/Interpolation/BulirschStoerRationalInterpolation.cs
  4. 23
      src/Numerics/Interpolation/CubicHermiteSplineInterpolation.cs
  5. 100
      src/Numerics/Interpolation/CubicSplineInterpolation.cs
  6. 22
      src/Numerics/Interpolation/EquidistantPolynomialInterpolation.cs
  7. 33
      src/Numerics/Interpolation/FloaterHormannRationalInterpolation.cs
  8. 17
      src/Numerics/Interpolation/LinearSplineInterpolation.cs
  9. 14
      src/Numerics/Interpolation/NevillePolynomialInterpolation.cs
  10. 8
      src/Numerics/Interpolation/SplineInterpolation.cs

39
src/Numerics/Interpolation/AkimaSplineInterpolation.cs

@ -60,9 +60,7 @@ namespace MathNet.Numerics.Interpolation
/// </summary> /// </summary>
/// <param name="samplePoints">Sample Points t, sorted ascending.</param> /// <param name="samplePoints">Sample Points t, sorted ascending.</param>
/// <param name="sampleValues">Sample Values x(t)</param> /// <param name="sampleValues">Sample Values x(t)</param>
public AkimaSplineInterpolation( public AkimaSplineInterpolation(IList<double> samplePoints, IList<double> sampleValues)
IList<double> samplePoints,
IList<double> sampleValues)
{ {
_spline = new CubicHermiteSplineInterpolation(); _spline = new CubicHermiteSplineInterpolation();
Initialize(samplePoints, sampleValues); Initialize(samplePoints, sampleValues);
@ -92,14 +90,9 @@ namespace MathNet.Numerics.Interpolation
/// </summary> /// </summary>
/// <param name="samplePoints">Sample Points t, sorted ascending.</param> /// <param name="samplePoints">Sample Points t, sorted ascending.</param>
/// <param name="sampleValues">Sample Values x(t)</param> /// <param name="sampleValues">Sample Values x(t)</param>
public void Initialize( public void Initialize(IList<double> samplePoints, IList<double> sampleValues)
IList<double> samplePoints,
IList<double> sampleValues)
{ {
double[] derivatives = EvaluateSplineDerivatives( double[] derivatives = EvaluateSplineDerivatives(samplePoints, sampleValues);
samplePoints,
sampleValues);
_spline.Initialize(samplePoints, sampleValues, derivatives); _spline.Initialize(samplePoints, sampleValues, derivatives);
} }
@ -110,9 +103,7 @@ namespace MathNet.Numerics.Interpolation
/// <param name="samplePoints">Sample Points t, sorted ascending.</param> /// <param name="samplePoints">Sample Points t, sorted ascending.</param>
/// <param name="sampleValues">Sample Values x(t)</param> /// <param name="sampleValues">Sample Values x(t)</param>
/// <returns>Spline Derivative Vector</returns> /// <returns>Spline Derivative Vector</returns>
public static double[] EvaluateSplineDerivatives( public static double[] EvaluateSplineDerivatives(IList<double> samplePoints, IList<double> sampleValues)
IList<double> samplePoints,
IList<double> sampleValues)
{ {
if (null == samplePoints) if (null == samplePoints)
{ {
@ -188,18 +179,10 @@ namespace MathNet.Numerics.Interpolation
/// <param name="samplePoints">Sample Points t, sorted ascending.</param> /// <param name="samplePoints">Sample Points t, sorted ascending.</param>
/// <param name="sampleValues">Sample Values x(t)</param> /// <param name="sampleValues">Sample Values x(t)</param>
/// <returns>Spline Coefficient Vector</returns> /// <returns>Spline Coefficient Vector</returns>
public static double[] EvaluateSplineCoefficients( public static double[] EvaluateSplineCoefficients(IList<double> samplePoints, IList<double> sampleValues)
IList<double> samplePoints,
IList<double> sampleValues)
{ {
double[] derivatives = EvaluateSplineDerivatives( double[] derivatives = EvaluateSplineDerivatives(samplePoints, sampleValues);
samplePoints, return CubicHermiteSplineInterpolation.EvaluateSplineCoefficients(samplePoints, sampleValues, derivatives);
sampleValues);
return CubicHermiteSplineInterpolation.EvaluateSplineCoefficients(
samplePoints,
sampleValues,
derivatives);
} }
/// <summary> /// <summary>
@ -213,12 +196,8 @@ namespace MathNet.Numerics.Interpolation
/// <param name="index2">Index of the third sample.</param> /// <param name="index2">Index of the third sample.</param>
/// <returns>The derivative approximation.</returns> /// <returns>The derivative approximation.</returns>
static double DifferentiateThreePoint( static double DifferentiateThreePoint(
IList<double> samplePoints, IList<double> samplePoints, IList<double> sampleValues,
IList<double> sampleValues, int indexT, int index0, int index1, int index2)
int indexT,
int index0,
int index1,
int index2)
{ {
double x0 = sampleValues[index0]; double x0 = sampleValues[index0];
double x1 = sampleValues[index1]; double x1 = sampleValues[index1];

10
src/Numerics/Interpolation/BarycentricInterpolation.cs

@ -69,10 +69,7 @@ namespace MathNet.Numerics.Interpolation
/// <param name="samplePoints">Sample Points t (no sorting assumed)</param> /// <param name="samplePoints">Sample Points t (no sorting assumed)</param>
/// <param name="sampleValues">Sample Values x(t)</param> /// <param name="sampleValues">Sample Values x(t)</param>
/// <param name="barycentricWeights">Barycentric weights w(t)</param> /// <param name="barycentricWeights">Barycentric weights w(t)</param>
public BarycentricInterpolation( public BarycentricInterpolation(IList<double> samplePoints, IList<double> sampleValues, IList<double> barycentricWeights)
IList<double> samplePoints,
IList<double> sampleValues,
IList<double> barycentricWeights)
{ {
Initialize(samplePoints, sampleValues, barycentricWeights); Initialize(samplePoints, sampleValues, barycentricWeights);
} }
@ -102,10 +99,7 @@ namespace MathNet.Numerics.Interpolation
/// <param name="samplePoints">Sample Points t</param> /// <param name="samplePoints">Sample Points t</param>
/// <param name="sampleValues">Sample Values x(t)</param> /// <param name="sampleValues">Sample Values x(t)</param>
/// <param name="barycentricWeights">Barycentric weights w(t)</param> /// <param name="barycentricWeights">Barycentric weights w(t)</param>
public void Initialize( public void Initialize(IList<double> samplePoints, IList<double> sampleValues, IList<double> barycentricWeights)
IList<double> samplePoints,
IList<double> sampleValues,
IList<double> barycentricWeights)
{ {
if (null == samplePoints) if (null == samplePoints)
{ {

8
src/Numerics/Interpolation/BulirschStoerRationalInterpolation.cs

@ -65,9 +65,7 @@ namespace MathNet.Numerics.Interpolation
/// </summary> /// </summary>
/// <param name="samplePoints">Sample Points t</param> /// <param name="samplePoints">Sample Points t</param>
/// <param name="sampleValues">Sample Values x(t)</param> /// <param name="sampleValues">Sample Values x(t)</param>
public BulirschStoerRationalInterpolation( public BulirschStoerRationalInterpolation(IList<double> samplePoints, IList<double> sampleValues)
IList<double> samplePoints,
IList<double> sampleValues)
{ {
Initialize(samplePoints, sampleValues); Initialize(samplePoints, sampleValues);
} }
@ -96,9 +94,7 @@ namespace MathNet.Numerics.Interpolation
/// </summary> /// </summary>
/// <param name="samplePoints">Sample Points t</param> /// <param name="samplePoints">Sample Points t</param>
/// <param name="sampleValues">Sample Values x(t)</param> /// <param name="sampleValues">Sample Values x(t)</param>
public void Initialize( public void Initialize(IList<double> samplePoints, IList<double> sampleValues)
IList<double> samplePoints,
IList<double> sampleValues)
{ {
if (null == samplePoints) if (null == samplePoints)
{ {

23
src/Numerics/Interpolation/CubicHermiteSplineInterpolation.cs

@ -61,10 +61,7 @@ namespace MathNet.Numerics.Interpolation
/// <param name="samplePoints">Sample Points t, sorted ascending.</param> /// <param name="samplePoints">Sample Points t, sorted ascending.</param>
/// <param name="sampleValues">Sample Values x(t)</param> /// <param name="sampleValues">Sample Values x(t)</param>
/// <param name="sampleDerivatives">Sample Derivatives x'(t)</param> /// <param name="sampleDerivatives">Sample Derivatives x'(t)</param>
public CubicHermiteSplineInterpolation( public CubicHermiteSplineInterpolation(IList<double> samplePoints, IList<double> sampleValues, IList<double> sampleDerivatives)
IList<double> samplePoints,
IList<double> sampleValues,
IList<double> sampleDerivatives)
{ {
_spline = new SplineInterpolation(); _spline = new SplineInterpolation();
Initialize(samplePoints, sampleValues, sampleDerivatives); Initialize(samplePoints, sampleValues, sampleDerivatives);
@ -95,16 +92,9 @@ namespace MathNet.Numerics.Interpolation
/// <param name="samplePoints">Sample Points t, sorted ascending.</param> /// <param name="samplePoints">Sample Points t, sorted ascending.</param>
/// <param name="sampleValues">Sample Values x(t)</param> /// <param name="sampleValues">Sample Values x(t)</param>
/// <param name="sampleDerivatives">Sample Derivatives x'(t)</param> /// <param name="sampleDerivatives">Sample Derivatives x'(t)</param>
public void Initialize( public void Initialize(IList<double> samplePoints, IList<double> sampleValues, IList<double> sampleDerivatives)
IList<double> samplePoints,
IList<double> sampleValues,
IList<double> sampleDerivatives)
{ {
double[] coefficients = EvaluateSplineCoefficients( double[] coefficients = EvaluateSplineCoefficients(samplePoints, sampleValues, sampleDerivatives);
samplePoints,
sampleValues,
sampleDerivatives);
_spline.Initialize(samplePoints, coefficients); _spline.Initialize(samplePoints, coefficients);
} }
@ -116,10 +106,7 @@ namespace MathNet.Numerics.Interpolation
/// <param name="sampleValues">Sample Values x(t)</param> /// <param name="sampleValues">Sample Values x(t)</param>
/// <param name="sampleDerivatives">Sample Derivatives x'(t)</param> /// <param name="sampleDerivatives">Sample Derivatives x'(t)</param>
/// <returns>Spline Coefficient Vector</returns> /// <returns>Spline Coefficient Vector</returns>
public static double[] EvaluateSplineCoefficients( public static double[] EvaluateSplineCoefficients(IList<double> samplePoints, IList<double> sampleValues, IList<double> sampleDerivatives)
IList<double> samplePoints,
IList<double> sampleValues,
IList<double> sampleDerivatives)
{ {
if (null == samplePoints) if (null == samplePoints)
{ {
@ -151,7 +138,7 @@ namespace MathNet.Numerics.Interpolation
if (samplePoints[i] <= samplePoints[i - 1]) if (samplePoints[i] <= samplePoints[i - 1])
throw new ArgumentException(Resources.Interpolation_Initialize_SamplePointsNotStrictlyAscendingOrder, "samplePoints"); throw new ArgumentException(Resources.Interpolation_Initialize_SamplePointsNotStrictlyAscendingOrder, "samplePoints");
double[] coefficients = new double[4*(samplePoints.Count - 1)]; var coefficients = new double[4*(samplePoints.Count - 1)];
for (int i = 0, j = 0; i < samplePoints.Count - 1; i++, j += 4) for (int i = 0, j = 0; i < samplePoints.Count - 1; i++, j += 4)
{ {

100
src/Numerics/Interpolation/CubicSplineInterpolation.cs

@ -60,15 +60,10 @@ namespace MathNet.Numerics.Interpolation
/// </summary> /// </summary>
/// <param name="samplePoints">Sample Points t, sorted ascending.</param> /// <param name="samplePoints">Sample Points t, sorted ascending.</param>
/// <param name="sampleValues">Sample Values x(t)</param> /// <param name="sampleValues">Sample Values x(t)</param>
public CubicSplineInterpolation( public CubicSplineInterpolation(IList<double> samplePoints, IList<double> sampleValues)
IList<double> samplePoints,
IList<double> sampleValues)
{ {
_spline = new CubicHermiteSplineInterpolation(); _spline = new CubicHermiteSplineInterpolation();
Initialize(samplePoints, sampleValues);
Initialize(
samplePoints,
sampleValues);
} }
/// <summary> /// <summary>
@ -81,22 +76,16 @@ namespace MathNet.Numerics.Interpolation
/// <param name="rightBoundaryCondition">Condition of the right boundary.</param> /// <param name="rightBoundaryCondition">Condition of the right boundary.</param>
/// <param name="rightBoundary">Right boundary value. Ignored in the parabolic case.</param> /// <param name="rightBoundary">Right boundary value. Ignored in the parabolic case.</param>
public CubicSplineInterpolation( public CubicSplineInterpolation(
IList<double> samplePoints, IList<double> samplePoints, IList<double> sampleValues,
IList<double> sampleValues, SplineBoundaryCondition leftBoundaryCondition, double leftBoundary,
SplineBoundaryCondition leftBoundaryCondition, SplineBoundaryCondition rightBoundaryCondition, double rightBoundary)
double leftBoundary,
SplineBoundaryCondition rightBoundaryCondition,
double rightBoundary)
{ {
_spline = new CubicHermiteSplineInterpolation(); _spline = new CubicHermiteSplineInterpolation();
Initialize( Initialize(
samplePoints, samplePoints, sampleValues,
sampleValues, leftBoundaryCondition, leftBoundary,
leftBoundaryCondition, rightBoundaryCondition, rightBoundary);
leftBoundary,
rightBoundaryCondition,
rightBoundary);
} }
/// <summary> /// <summary>
@ -123,18 +112,11 @@ namespace MathNet.Numerics.Interpolation
/// </summary> /// </summary>
/// <param name="samplePoints">Sample Points t, sorted ascending.</param> /// <param name="samplePoints">Sample Points t, sorted ascending.</param>
/// <param name="sampleValues">Sample Values x(t)</param> /// <param name="sampleValues">Sample Values x(t)</param>
public void Initialize( public void Initialize(IList<double> samplePoints, IList<double> sampleValues)
IList<double> samplePoints,
IList<double> sampleValues)
{ {
double[] derivatives = EvaluateSplineDerivatives( double[] derivatives = EvaluateSplineDerivatives(samplePoints, sampleValues,
samplePoints, SplineBoundaryCondition.SecondDerivative, 0.0,
sampleValues, SplineBoundaryCondition.SecondDerivative, 0.0);
SplineBoundaryCondition.SecondDerivative,
0.0,
SplineBoundaryCondition.SecondDerivative,
0.0);
_spline.Initialize(samplePoints, sampleValues, derivatives); _spline.Initialize(samplePoints, sampleValues, derivatives);
} }
@ -148,21 +130,14 @@ namespace MathNet.Numerics.Interpolation
/// <param name="rightBoundaryCondition">Condition of the right boundary.</param> /// <param name="rightBoundaryCondition">Condition of the right boundary.</param>
/// <param name="rightBoundary">Right boundary value. Ignored in the parabolic case.</param> /// <param name="rightBoundary">Right boundary value. Ignored in the parabolic case.</param>
public void Initialize( public void Initialize(
IList<double> samplePoints, IList<double> samplePoints, IList<double> sampleValues,
IList<double> sampleValues, SplineBoundaryCondition leftBoundaryCondition, double leftBoundary,
SplineBoundaryCondition leftBoundaryCondition, SplineBoundaryCondition rightBoundaryCondition, double rightBoundary)
double leftBoundary,
SplineBoundaryCondition rightBoundaryCondition,
double rightBoundary)
{ {
double[] derivatives = EvaluateSplineDerivatives( double[] derivatives = EvaluateSplineDerivatives(
samplePoints, samplePoints, sampleValues,
sampleValues, leftBoundaryCondition, leftBoundary,
leftBoundaryCondition, rightBoundaryCondition, rightBoundary);
leftBoundary,
rightBoundaryCondition,
rightBoundary);
_spline.Initialize(samplePoints, sampleValues, derivatives); _spline.Initialize(samplePoints, sampleValues, derivatives);
} }
@ -178,12 +153,9 @@ namespace MathNet.Numerics.Interpolation
/// <param name="rightBoundary">Right boundary value. Ignored in the parabolic case.</param> /// <param name="rightBoundary">Right boundary value. Ignored in the parabolic case.</param>
/// <returns>Spline Derivative Vector</returns> /// <returns>Spline Derivative Vector</returns>
public static double[] EvaluateSplineDerivatives( public static double[] EvaluateSplineDerivatives(
IList<double> samplePoints, IList<double> samplePoints, IList<double> sampleValues,
IList<double> sampleValues, SplineBoundaryCondition leftBoundaryCondition, double leftBoundary,
SplineBoundaryCondition leftBoundaryCondition, SplineBoundaryCondition rightBoundaryCondition, double rightBoundary)
double leftBoundary,
SplineBoundaryCondition rightBoundaryCondition,
double rightBoundary)
{ {
if (null == samplePoints) if (null == samplePoints)
{ {
@ -314,25 +286,15 @@ namespace MathNet.Numerics.Interpolation
/// <param name="rightBoundary">Right boundary value. Ignored in the parabolic case.</param> /// <param name="rightBoundary">Right boundary value. Ignored in the parabolic case.</param>
/// <returns>Spline Coefficient Vector</returns> /// <returns>Spline Coefficient Vector</returns>
public static double[] EvaluateSplineCoefficients( public static double[] EvaluateSplineCoefficients(
IList<double> samplePoints, IList<double> samplePoints, IList<double> sampleValues,
IList<double> sampleValues, SplineBoundaryCondition leftBoundaryCondition, double leftBoundary,
SplineBoundaryCondition leftBoundaryCondition, SplineBoundaryCondition rightBoundaryCondition, double rightBoundary)
double leftBoundary,
SplineBoundaryCondition rightBoundaryCondition,
double rightBoundary)
{ {
double[] derivatives = EvaluateSplineDerivatives( double[] derivatives = EvaluateSplineDerivatives(
samplePoints, samplePoints, sampleValues,
sampleValues, leftBoundaryCondition, leftBoundary,
leftBoundaryCondition, rightBoundaryCondition, rightBoundary);
leftBoundary, return CubicHermiteSplineInterpolation.EvaluateSplineCoefficients(samplePoints, sampleValues, derivatives);
rightBoundaryCondition,
rightBoundary);
return CubicHermiteSplineInterpolation.EvaluateSplineCoefficients(
samplePoints,
sampleValues,
derivatives);
} }
/// <summary> /// <summary>
@ -343,11 +305,7 @@ namespace MathNet.Numerics.Interpolation
/// <param name="c">The c-vector[n].</param> /// <param name="c">The c-vector[n].</param>
/// <param name="d">The d-vector[n], will be modified by this function.</param> /// <param name="d">The d-vector[n], will be modified by this function.</param>
/// <returns>The x-vector[n]</returns> /// <returns>The x-vector[n]</returns>
static double[] SolveTridiagonal( static double[] SolveTridiagonal(double[] a, double[] b, double[] c, double[] d)
double[] a,
double[] b,
double[] c,
double[] d)
{ {
double[] x = new double[a.Length]; double[] x = new double[a.Length];

22
src/Numerics/Interpolation/EquidistantPolynomialInterpolation.cs

@ -60,10 +60,7 @@ namespace MathNet.Numerics.Interpolation
/// <param name="leftBound">Left bound of the sample point interval.</param> /// <param name="leftBound">Left bound of the sample point interval.</param>
/// <param name="rightBound">Right bound of the sample point interval.</param> /// <param name="rightBound">Right bound of the sample point interval.</param>
/// <param name="sampleValues">Sample Values x(t) where t is equidistant over [a,b], i.e. x[i] = x(a+(b-a)*i/(n-1))</param> /// <param name="sampleValues">Sample Values x(t) where t is equidistant over [a,b], i.e. x[i] = x(a+(b-a)*i/(n-1))</param>
public EquidistantPolynomialInterpolation( public EquidistantPolynomialInterpolation(double leftBound, double rightBound, IList<double> sampleValues)
double leftBound,
double rightBound,
IList<double> sampleValues)
{ {
_barycentric = new BarycentricInterpolation(); _barycentric = new BarycentricInterpolation();
Initialize(leftBound, rightBound, sampleValues); Initialize(leftBound, rightBound, sampleValues);
@ -74,9 +71,7 @@ namespace MathNet.Numerics.Interpolation
/// </summary> /// </summary>
/// <param name="samplePoints">Equidistant Sample Points t = a+(b-a)*i/(n-1)</param> /// <param name="samplePoints">Equidistant Sample Points t = a+(b-a)*i/(n-1)</param>
/// <param name="sampleValues">Sample Values x(t) where t are equidistant over [a,b], i.e. x[i] = x(a+(b-a)*i/(n-1))</param> /// <param name="sampleValues">Sample Values x(t) where t are equidistant over [a,b], i.e. x[i] = x(a+(b-a)*i/(n-1))</param>
public EquidistantPolynomialInterpolation( public EquidistantPolynomialInterpolation(IList<double> samplePoints, IList<double> sampleValues)
IList<double> samplePoints,
IList<double> sampleValues)
{ {
_barycentric = new BarycentricInterpolation(); _barycentric = new BarycentricInterpolation();
Initialize(samplePoints, sampleValues); Initialize(samplePoints, sampleValues);
@ -107,10 +102,7 @@ namespace MathNet.Numerics.Interpolation
/// <param name="leftBound">Left bound of the sample point interval.</param> /// <param name="leftBound">Left bound of the sample point interval.</param>
/// <param name="rightBound">Right bound of the sample point interval.</param> /// <param name="rightBound">Right bound of the sample point interval.</param>
/// <param name="sampleValues">Sample Values x(t) where t are equidistant over [a,b], i.e. x[i] = x(a+(b-a)*i/(n-1))</param> /// <param name="sampleValues">Sample Values x(t) where t are equidistant over [a,b], i.e. x[i] = x(a+(b-a)*i/(n-1))</param>
public void Initialize( public void Initialize(double leftBound, double rightBound, IList<double> sampleValues)
double leftBound,
double rightBound,
IList<double> sampleValues)
{ {
if (null == sampleValues) if (null == sampleValues)
{ {
@ -140,9 +132,7 @@ namespace MathNet.Numerics.Interpolation
/// </summary> /// </summary>
/// <param name="samplePoints">Equidistant Sample Points t = a+(b-a)*i/(n-1)</param> /// <param name="samplePoints">Equidistant Sample Points t = a+(b-a)*i/(n-1)</param>
/// <param name="sampleValues">Sample Values x(t) where t are equidistant over [a,b], i.e. x[i] = x(a+(b-a)*i/(n-1))</param> /// <param name="sampleValues">Sample Values x(t) where t are equidistant over [a,b], i.e. x[i] = x(a+(b-a)*i/(n-1))</param>
public void Initialize( public void Initialize(IList<double> samplePoints, IList<double> sampleValues)
IList<double> samplePoints,
IList<double> sampleValues)
{ {
if (null == sampleValues) if (null == sampleValues)
{ {
@ -150,7 +140,6 @@ namespace MathNet.Numerics.Interpolation
} }
var weights = EvaluateBarycentricWeights(sampleValues.Count); var weights = EvaluateBarycentricWeights(sampleValues.Count);
_barycentric.Initialize(samplePoints, sampleValues, weights); _barycentric.Initialize(samplePoints, sampleValues, weights);
} }
@ -160,8 +149,7 @@ namespace MathNet.Numerics.Interpolation
/// </summary> /// </summary>
/// <param name="sampleCount">Count of Sample Values x(t).</param> /// <param name="sampleCount">Count of Sample Values x(t).</param>
/// <returns>Barycentric Weight Vector</returns> /// <returns>Barycentric Weight Vector</returns>
public static double[] EvaluateBarycentricWeights( public static double[] EvaluateBarycentricWeights(int sampleCount)
int sampleCount)
{ {
if (sampleCount < 1) if (sampleCount < 1)
{ {

33
src/Numerics/Interpolation/FloaterHormannRationalInterpolation.cs

@ -59,9 +59,7 @@ namespace MathNet.Numerics.Interpolation
/// </summary> /// </summary>
/// <param name="samplePoints">Sample Points t</param> /// <param name="samplePoints">Sample Points t</param>
/// <param name="sampleValues">Sample Values x(t)</param> /// <param name="sampleValues">Sample Values x(t)</param>
public FloaterHormannRationalInterpolation( public FloaterHormannRationalInterpolation(IList<double> samplePoints, IList<double> sampleValues)
IList<double> samplePoints,
IList<double> sampleValues)
{ {
_barycentric = new BarycentricInterpolation(); _barycentric = new BarycentricInterpolation();
Initialize(samplePoints, sampleValues); Initialize(samplePoints, sampleValues);
@ -76,10 +74,7 @@ namespace MathNet.Numerics.Interpolation
/// Order of the interpolation scheme, 0 &lt;= order &lt;= N. /// Order of the interpolation scheme, 0 &lt;= order &lt;= N.
/// In most cases a value between 3 and 8 gives good results. /// In most cases a value between 3 and 8 gives good results.
/// </param> /// </param>
public FloaterHormannRationalInterpolation( public FloaterHormannRationalInterpolation(IList<double> samplePoints, IList<double> sampleValues, int order)
IList<double> samplePoints,
IList<double> sampleValues,
int order)
{ {
_barycentric = new BarycentricInterpolation(); _barycentric = new BarycentricInterpolation();
Initialize(samplePoints, sampleValues, order); Initialize(samplePoints, sampleValues, order);
@ -112,18 +107,14 @@ namespace MathNet.Numerics.Interpolation
/// </remarks> /// </remarks>
/// <param name="samplePoints">Sample Points t (no sorting assumed)</param> /// <param name="samplePoints">Sample Points t (no sorting assumed)</param>
/// <param name="sampleValues">Sample Values x(t)</param> /// <param name="sampleValues">Sample Values x(t)</param>
public void Initialize( public void Initialize(IList<double> samplePoints, IList<double> sampleValues)
IList<double> samplePoints,
IList<double> sampleValues)
{ {
if (null == samplePoints) if (null == samplePoints)
{ {
throw new ArgumentNullException("samplePoints"); throw new ArgumentNullException("samplePoints");
} }
double[] weights = EvaluateBarycentricWeights( double[] weights = EvaluateBarycentricWeights(samplePoints, sampleValues,
samplePoints,
sampleValues,
Math.Min(3, samplePoints.Count - 1)); Math.Min(3, samplePoints.Count - 1));
_barycentric.Initialize(samplePoints, sampleValues, weights); _barycentric.Initialize(samplePoints, sampleValues, weights);
@ -138,16 +129,9 @@ namespace MathNet.Numerics.Interpolation
/// Order of the interpolation scheme, 0 &lt;= order &lt;= N. /// Order of the interpolation scheme, 0 &lt;= order &lt;= N.
/// In most cases a value between 3 and 8 gives good results. /// In most cases a value between 3 and 8 gives good results.
/// </param> /// </param>
public void Initialize( public void Initialize(IList<double> samplePoints, IList<double> sampleValues, int order)
IList<double> samplePoints,
IList<double> sampleValues,
int order)
{ {
double[] weights = EvaluateBarycentricWeights( double[] weights = EvaluateBarycentricWeights(samplePoints, sampleValues, order);
samplePoints,
sampleValues,
order);
_barycentric.Initialize(samplePoints, sampleValues, weights); _barycentric.Initialize(samplePoints, sampleValues, weights);
} }
@ -162,10 +146,7 @@ namespace MathNet.Numerics.Interpolation
/// In most cases a value between 3 and 8 gives good results. /// In most cases a value between 3 and 8 gives good results.
/// </param> /// </param>
/// <returns>Barycentric Weight Vector</returns> /// <returns>Barycentric Weight Vector</returns>
public static double[] EvaluateBarycentricWeights( public static double[] EvaluateBarycentricWeights(IList<double> samplePoints, IList<double> sampleValues, int order)
IList<double> samplePoints,
IList<double> sampleValues,
int order)
{ {
if (null == samplePoints) if (null == samplePoints)
{ {

17
src/Numerics/Interpolation/LinearSplineInterpolation.cs

@ -60,9 +60,7 @@ namespace MathNet.Numerics.Interpolation
/// </summary> /// </summary>
/// <param name="samplePoints">Sample Points t, sorted ascending.</param> /// <param name="samplePoints">Sample Points t, sorted ascending.</param>
/// <param name="sampleValues">Sample Values x(t)</param> /// <param name="sampleValues">Sample Values x(t)</param>
public LinearSplineInterpolation( public LinearSplineInterpolation(IList<double> samplePoints, IList<double> sampleValues)
IList<double> samplePoints,
IList<double> sampleValues)
{ {
_spline = new SplineInterpolation(); _spline = new SplineInterpolation();
Initialize(samplePoints, sampleValues); Initialize(samplePoints, sampleValues);
@ -92,14 +90,9 @@ namespace MathNet.Numerics.Interpolation
/// </summary> /// </summary>
/// <param name="samplePoints">Sample Points t, sorted ascending.</param> /// <param name="samplePoints">Sample Points t, sorted ascending.</param>
/// <param name="sampleValues">Sample Values x(t)</param> /// <param name="sampleValues">Sample Values x(t)</param>
public void Initialize( public void Initialize(IList<double> samplePoints, IList<double> sampleValues)
IList<double> samplePoints,
IList<double> sampleValues)
{ {
double[] coefficients = EvaluateSplineCoefficients( double[] coefficients = EvaluateSplineCoefficients(samplePoints, sampleValues);
samplePoints,
sampleValues);
_spline.Initialize(samplePoints, coefficients); _spline.Initialize(samplePoints, coefficients);
} }
@ -110,9 +103,7 @@ namespace MathNet.Numerics.Interpolation
/// <param name="samplePoints">Sample Points t, sorted ascending.</param> /// <param name="samplePoints">Sample Points t, sorted ascending.</param>
/// <param name="sampleValues">Sample Values x(t)</param> /// <param name="sampleValues">Sample Values x(t)</param>
/// <returns>Spline Coefficient Vector</returns> /// <returns>Spline Coefficient Vector</returns>
public static double[] EvaluateSplineCoefficients( public static double[] EvaluateSplineCoefficients(IList<double> samplePoints, IList<double> sampleValues)
IList<double> samplePoints,
IList<double> sampleValues)
{ {
if (null == samplePoints) if (null == samplePoints)
{ {

14
src/Numerics/Interpolation/NevillePolynomialInterpolation.cs

@ -71,9 +71,7 @@ namespace MathNet.Numerics.Interpolation
/// </summary> /// </summary>
/// <param name="samplePoints">Sample Points t</param> /// <param name="samplePoints">Sample Points t</param>
/// <param name="sampleValues">Sample Values x(t)</param> /// <param name="sampleValues">Sample Values x(t)</param>
public NevillePolynomialInterpolation( public NevillePolynomialInterpolation(IList<double> samplePoints, IList<double> sampleValues)
IList<double> samplePoints,
IList<double> sampleValues)
{ {
Initialize(samplePoints, sampleValues); Initialize(samplePoints, sampleValues);
} }
@ -102,9 +100,7 @@ namespace MathNet.Numerics.Interpolation
/// </summary> /// </summary>
/// <param name="samplePoints">Sample Points t</param> /// <param name="samplePoints">Sample Points t</param>
/// <param name="sampleValues">Sample Values x(t)</param> /// <param name="sampleValues">Sample Values x(t)</param>
public void Initialize( public void Initialize(IList<double> samplePoints, IList<double> sampleValues)
IList<double> samplePoints,
IList<double> sampleValues)
{ {
if (null == samplePoints) if (null == samplePoints)
{ {
@ -141,7 +137,7 @@ namespace MathNet.Numerics.Interpolation
/// <returns>Interpolated value x(t).</returns> /// <returns>Interpolated value x(t).</returns>
public double Interpolate(double t) public double Interpolate(double t)
{ {
double[] x = new double[_values.Count]; var x = new double[_values.Count];
_values.CopyTo(x, 0); _values.CopyTo(x, 0);
for (int level = 1; level < x.Length; level++) for (int level = 1; level < x.Length; level++)
@ -167,8 +163,8 @@ namespace MathNet.Numerics.Interpolation
/// <seealso cref="DifferentiateAll(double)"/> /// <seealso cref="DifferentiateAll(double)"/>
public double Differentiate(double t) public double Differentiate(double t)
{ {
double[] x = new double[_values.Count]; var x = new double[_values.Count];
double[] dx = new double[_values.Count]; var dx = new double[_values.Count];
_values.CopyTo(x, 0); _values.CopyTo(x, 0);
for (int level = 1; level < x.Length; level++) for (int level = 1; level < x.Length; level++)

8
src/Numerics/Interpolation/SplineInterpolation.cs

@ -69,9 +69,7 @@ namespace MathNet.Numerics.Interpolation
/// </summary> /// </summary>
/// <param name="samplePoints">Sample Points t (length: N), sorted ascending.</param> /// <param name="samplePoints">Sample Points t (length: N), sorted ascending.</param>
/// <param name="splineCoefficients">Spline Coefficients (length: 4*(N-1)).</param> /// <param name="splineCoefficients">Spline Coefficients (length: 4*(N-1)).</param>
public SplineInterpolation( public SplineInterpolation(IList<double> samplePoints, IList<double> splineCoefficients)
IList<double> samplePoints,
IList<double> splineCoefficients)
{ {
Initialize(samplePoints, splineCoefficients); Initialize(samplePoints, splineCoefficients);
} }
@ -100,9 +98,7 @@ namespace MathNet.Numerics.Interpolation
/// </summary> /// </summary>
/// <param name="samplePoints">Sample Points t (length: N), sorted ascending.</param> /// <param name="samplePoints">Sample Points t (length: N), sorted ascending.</param>
/// <param name="splineCoefficients">Spline Coefficients (length: 4*(N-1)).</param> /// <param name="splineCoefficients">Spline Coefficients (length: 4*(N-1)).</param>
public void Initialize( public void Initialize(IList<double> samplePoints, IList<double> splineCoefficients)
IList<double> samplePoints,
IList<double> splineCoefficients)
{ {
if (null == samplePoints) if (null == samplePoints)
{ {

Loading…
Cancel
Save