/// <summary> /// Create an Akima cubic spline interpolation based on arbitrary points. /// Akima splines are cubic splines which are stable to outliers. /// </summary> /// <param name="points">The sample points t. Supports both lists and arrays.</param> /// <param name="values">The sample point values x(t). Supports both lists and arrays.</param> /// <returns> /// An interpolation scheme optimized for the given sample points and values, /// which can then be used to compute interpolations and extrapolations /// on arbitrary points. /// </returns> public static IInterpolationMethod CreateAkimaCubicSpline( IList<double> points, IList<double> values) { AkimaSplineInterpolation method = new AkimaSplineInterpolation(); method.Init(points, values); return method; }
CreateAkimaCubicSpline( IList <double> points, IList <double> values) { AkimaSplineInterpolation method = new AkimaSplineInterpolation(); method.Init(points, values); return(method); }
/// <summary> /// Run example /// </summary> /// <seealso cref="http://en.wikipedia.org/wiki/Spline_interpolation">Spline interpolation</seealso> public void Run() { // 1. Generate 10 samples of the function x*x-2*x on interval [0, 10] Console.WriteLine(@"1. Generate 10 samples of the function x*x-2*x on interval [0, 10]"); double[] points; var values = SignalGenerator.EquidistantInterval(TargetFunction, 0, 10, 10, out points); Console.WriteLine(); // 2. Create akima spline interpolation var method = new AkimaSplineInterpolation(points, values); Console.WriteLine(@"2. Create akima spline interpolation based on arbitrary points"); Console.WriteLine(); // 3. Check if interpolation support integration Console.WriteLine(@"3. Support integration = {0}", ((IInterpolation)method).SupportsIntegration); Console.WriteLine(); // 4. Check if interpolation support differentiation Console.WriteLine(@"4. Support differentiation = {0}", ((IInterpolation)method).SupportsDifferentiation); Console.WriteLine(); // 5. Differentiate at point 5.2 Console.WriteLine(@"5. Differentiate at point 5.2 = {0}", method.Differentiate(5.2)); Console.WriteLine(); // 6. Integrate at point 5.2 Console.WriteLine(@"6. Integrate at point 5.2 = {0}", method.Integrate(5.2)); Console.WriteLine(); // 7. Interpolate ten random points and compare to function results Console.WriteLine(@"7. Interpolate ten random points and compare to function results"); var rng = new MersenneTwister(1); for (var i = 0; i < 10; i++) { // Generate random value from [0, 10] var point = rng.NextDouble() * 10; Console.WriteLine(@"Interpolate at {0} = {1}. Function({0}) = {2}", point.ToString("N05"), method.Interpolate(point).ToString("N05"), TargetFunction(point).ToString("N05")); } Console.WriteLine(); }