# Cubic Splines in IronPython QuickStart Sample

Illustrates using natural and clamped cubic splines for interpolation using classes in the Numerics.NET.LinearAlgebra namespace in IronPython.

View this sample in: C# Visual Basic F#

```Python import numerics from Extreme.Mathematics import * # The CubicSpline class resides in the # Extreme.Mathematics.Curves namespace. from Extreme.Mathematics.Curves import * # Illustrates creating natural and clamped cubic splines using # the CubicSpline class in the Extreme.Mathematics.Curves # namespace of Extreme Numerics.NET. # A cubic spline is a piecewise curve that is made up # of pieces of cubic polynomials. Its value as well as its first # derivative are continuous, giving it a smooth appearance. # # Cubic splines are implemented by the CubicSpline class, # which inherits from PiecewiseCurve. # # For an example of piecewise constant and piecewise # linear curves, see the PiecewiseCurves QuickStart # Sample. # # # Creating Cubic Splines # # In order to define a spline curve completely, two extra # conditions must be imposed. # 'Natural' splines have zero second derivatives. This is # the default. # The data points are specified as double arrays containing # the x and y values: xValues = Vector([ 1, 2, 3, 4, 5, 6 ]) yValues = Vector([ 1, 3, 4, 3, 4, 2 ]) naturalSpline = CubicSpline(xValues, yValues) # 'Clamped' splines have a fixed slope or first derivative at the # leftmost and rightmost points. The slopes are specified as # two extra parameters in the constructor: clampedSpline = CubicSpline(xValues, yValues, -1, 1) # # Curve Parameters # # The shape of any curve is determined by a set of parameters. # These parameters can be retrieved and set through the # Parameters collection. The number of parameters for a curve # is given by this collection's Count property. # # Cubic splines have 2n+2 parameters, where n is the number of # data points. The first n parameters are the x-values. The next # n parameters are the y-values. The last two parameters are # the values of the derivative at the first and last point. For natural # splines, these parameters are unused. print "naturalSpline.Parameters.Count =", naturalSpline.Parameters.Count # Parameters can easily be retrieved: print "naturalSpline.Parameters[0] =", naturalSpline.Parameters[0] # Parameters can also be set: naturalSpline.Parameters[0] = 1 # # Piecewise curve methods and properties # # The NumberOfIntervals property returns the number of subintervals # on which the curve has unique definitions. print "Number of intervals:", naturalSpline.NumberOfIntervals # The IndexOf method returns the index of the interval # that contains a specific value. print "naturalSpline.IndexOf(1.4) =", naturalSpline.IndexOf(1.4) # The method returns -1 when the value is smaller than the lower bound # of the first interval, and NumberOfIntervals if the value is equal to or larger than # the upper bound of the last interval. # # Curve Methods # # The ValueAt method returns the y value of the # curve at the specified x value: print "naturalSpline.ValueAt(2.4) =", naturalSpline.ValueAt(2.4) # The SlopeAt method returns the slope of the curve # a the specified x value: print "naturalSpline.SlopeAt(2) =", naturalSpline.SlopeAt(2) # You can verify that the clamped spline has the correct slope at the end points: print "clampedSpline.SlopeAt(1) =", clampedSpline.SlopeAt(1) print "clampedSpline.SlopeAt(6) =", clampedSpline.SlopeAt(6) # Cubic splines do not have a defined derivative. The GetDerivative method # returns a GeneralCurve: derivative = naturalSpline.GetDerivative() print "Type of derivative:", derivative.GetType().ToString() print "derivative(2) =", derivative.ValueAt(2) # You can get a Line that is the tangent to a curve # at a specified x value using the TangentAt method: tangent = clampedSpline.TangentAt(2) print "Slope of tangent line at 2 =", tangent.Slope # The integral of a spline curve can be calculated exactly. This technique is # often used to approximate the integral of a tabulated function: print "Integral of naturalSpline between 1.4 and 4.6 =", naturalSpline.Integral(1.4, 4.6) ```