New Version 6.0!

Try it for free with our fully functional 60-day trial version.

Download now!

QuickStart Samples

Chebyshev Series QuickStart Sample (Visual Basic)

Illustrates the basic use of the ChebyshevSeries class in Visual Basic.

C# code F# code IronPython code Back to QuickStart Samples

Option Infer On

' The ChebyshevSeries class resides in the 
' Extreme.Mathematics.Curves namespace.
Imports Extreme.Mathematics.Curves
' The Constants class and Func(Of Double, Double) delegate reside in the 
' Extreme.Mathematics namespace.
Imports Extreme.Mathematics

Namespace Extreme.Numerics.QuickStart.VB

    Module ChebyshevExpansions

        ' Illustrates the use of the ChebyshevSeries class 
        ' in the Extreme.Mathematics.Curve namespace of the Extreme 
        ' Optimization Numerical Libraries for .NET.
        Sub Main()
            ' Chebyshev polynomials form an alternative basis
            ' for polynomials. A Chebyshev expansion is a 
            ' polynomial expressed as a sum of Chebyshev 
            ' polynomials.
            '
            ' Using the ChebyshevSeries class instead of 
            ' Polynomial can have two major advantages:
            '   1. They are numerically more stable. Higher
            '      accuracy is maintained even for large problems.
            '   2. When approximating other functions with
            '      polynomials, the coefficients in the
            '      Chebyshev expansion will tend to decrease
            '      in size, where those of the normal polynomial
            '      approximation will tend to oscillate wildly.

            ' Index variable.
            Dim index As Int32

            '
            ' Constructing Chebyshev expansions
            '

            ' Chebyshev expansions are defined over an interval.
            ' The first constructor requires you to specify the
            ' boundaries of the interval, and the coefficients
            ' of the expansion.
            Dim coefficients = New Double() {1, 0.5, -0.3, 0.1}
            Dim chebyshev1 As New ChebyshevSeries(0, 2, coefficients)
            ' If you omit the boundaries, they are assumed to be
            ' -1 and +1:
            Dim chebyshev2 As New ChebyshevSeries(coefficients)

            ' 
            ' Chebyshev approximations
            '

            ' A third way to construct a Chebyshev series is as an
            ' approximation to an arbitrary function. For more
            ' about the Func(Of Double, Double) delegate, see the
            ' FunctionDelegates QuickStart Sample.
            '
            ' Chebyshev expansions allow us to obtain an 
            ' excellent approximation at minimal cost.
            '
            ' The following creates a Chebyshev approximation
            ' of degree 7 to Cos(x) over the interval (0, 2):
            Dim cos As Func(Of Double, Double) = AddressOf Math.Cos
            Dim approximation1 =
                ChebyshevSeries.GetInterpolatingPolynomial(cos, 0, 2, 7)
            Console.WriteLine("Chebyshev approximation of cos(x):")
            For index = 0 To 7
                Console.WriteLine("  c{0} = {1}", index, _
                    approximation1.Parameters(index))
            Next

            ' The largest errors are approximately at the
            ' zeroes of the Chebyshev polynomial of degree 8:
            For index = 0 To 8
                Dim zero As Double = _
                    1 + Math.Cos(index * Constants.Pi / 8)
                Dim err As Double = _
                    approximation1.ValueAt(zero) - Math.Cos(zero)
                Console.WriteLine(" Error {0} = {1}", index, err)
            Next

            '
            ' Least squares approximations
            '

            ' We will now calculate the least squares polynomial
            ' of degree 7 through 33 points.
            ' First, calculate the points:
            Dim xValues = New Double(32) {}
            Dim yValues = New Double(32) {}
            For index = 0 To 32
                Dim angle As Double = index * Constants.Pi / 32
                xValues(index) = 1 + Math.Cos(angle)
                yValues(index) = Math.Cos(xValues(index))
            Next
            ' Next, define a ChebyshevBasis object for the
            ' approximation we want: interval (0,2) and degree
            ' is 7.
            Dim basis As New ChebyshevBasis(0, 2, 7)
            ' Now we can calculate the least squares fit:
            Dim approximation2 =
                CType(basis.LeastSquaresFit(xValues, yValues, xValues.Length),
                ChebyshevSeries)
            ' We can see it is close to the original 
            ' approximation we found earlier:
            For index = 0 To 7
                Console.WriteLine("  c{0} = {1}", index, _
                    approximation2.Parameters(index))
            Next

            Console.Write("Press Enter key to exit...")
            Console.ReadLine()

        End Sub

    End Module

End Namespace