Basic Polynomials in Visual Basic QuickStart Sample

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

View this sample in: C# F# IronPython

Option Infer On

' The Polynomial class resides in the Numerics.NET.Curves namespace.
Imports Numerics.NET.Curves

Module BasicPolynomials

    ' Illustrates the basic use of the Polynomial class in the 
    ' Numerics.NET.Curve namespace of Numerics.NET.
    Sub Main()
        ' The license is verified at runtime. We're using
        ' a 30 day trial key here. For more information, see
        '     https://numerics.net/trial-key
        Numerics.NET.License.Verify("64542-18980-57619-62268")

        ' All curves inherit from the Curve abstract base
        ' class. The Polynomial class overrides implements all
        ' the methods and properties of the Curve class,
        ' and adds a few more.

        ' Index variable.
        Dim index As Int32

        '
        ' Polynomial constructors
        '

        ' The Polynomial class has multiple constructors. Each
        ' constructor derives from a different way to define
        ' a polynomial or parabola.

        ' 1st option: a polynomial of a specified degree.
        Dim polynomial1 As New Polynomial(3)
        ' Now set the coefficients individually.
        ' The constant term has index 0:
        polynomial1.Coefficient(3) = 1
        polynomial1.Coefficient(2) = 1
        polynomial1.Coefficient(1) = 0
        polynomial1.Coefficient(0) = -2
        ' 2nd option: specify the coefficients in the constructor
        ' as an array of doubles:
        Dim coefficients = New Double() {1, 1, 0, -2}
        Dim polynomial2 As New Polynomial(coefficients)

        ' In addition, you can create a polynomial that
        ' has certain roots using the static FromRoots
        ' method:
        Dim roots = New Double() {1, 2, 3, 4}
        Dim polynomial3 As Polynomial = Polynomial.FromRoots(roots)
        ' Or you can construct the interpolating polynomial
        ' by calling the static GetInterpolatingPolynomial
        ' method. The parameters are two Double arrays 
        ' containing the x values and y values respectively.
        Dim xValues = New Double() {1, 2, 3, 4}
        Dim yValues = New Double() {1, 4, 10, 8}
        Dim polynomial4 = Polynomial.GetInterpolatingPolynomial(xValues, yValues)

        ' The ToString method gives a common string
        ' representation of the polynomial:
        Console.WriteLine($"polynomial3 = {polynomial3.ToString()}")

        '
        ' 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.
        '
        ' For polynomials, the parameters are the coefficients
        ' of the polynomial. The constant term has index 0:
        Console.WriteLine("polynomial1.ParameterCount = {0}",
                polynomial1.Parameters.Count)
        ' Parameters can easily be retrieved:            
        Console.Write("polynomial1 parameters:")
        For index = 0 To polynomial1.Parameters.Count - 1
            Console.Write("{0} ", polynomial1.Parameters(index))
        Next
        Console.WriteLine()
        ' We can see that polynomial2 defines the same polynomial 
        ' curve as polynomial1, but polynomial2 is different:
        Console.Write("polynomial2 parameters:")
        For index = 0 To polynomial2.Parameters.Count - 1
            Console.Write("{0} ", polynomial2.Parameters(index))
        Next
        Console.WriteLine()
        ' Parameters can also be set:
        polynomial1.Parameters(0) = 1

        ' The degree of the polynomial is returned by
        ' the Degree property:
        Console.WriteLine("Degree of polynomial3 = {0}",
                polynomial3.Degree)

        '
        ' Curve Methods
        '

        ' The ValueAt method returns the y value of the
        ' curve at the specified x value:
        Console.WriteLine("polynomial1.ValueAt(2) = {0}",
                polynomial1.ValueAt(2))

        ' The SlopeAt method returns the slope of the curve
        ' a the specified x value:
        Console.WriteLine("polynomial1.SlopeAt(2) = {0}",
                polynomial1.SlopeAt(2))

        ' You can also create a new curve that is the 
        ' derivative of the original:
        Dim derivative = polynomial1.GetDerivative()
        Console.WriteLine("Slope at 2 (derivative) = {0}",
                derivative.ValueAt(2))
        ' For a polynomial, the derivative is a Quadratic curve
        ' if the degree is equal to three:
        Console.WriteLine("Type of derivative: {0}",
                derivative.GetType().FullName)
        Console.Write("Derivative parameters: ")
        For index = 0 To derivative.Parameters.Count - 1
            Console.Write("{0} ", derivative.Parameters(index))
        Next
        Console.WriteLine()
        ' If the degree is 4 or higher, the derivative is
        ' once again a polynomial:
        Console.WriteLine("Type of derivative for polynomial3: {0}",
                polynomial3.GetDerivative().GetType().FullName)

        ' You can get a Line that is the tangent to a curve
        ' at a specified x value using the TangentAt method:
        Dim tangent = polynomial1.TangentAt(2)
        Console.WriteLine("Tangent line at 2:")
        Console.WriteLine($"  Y-intercept = {tangent.Parameters(0)}")
        Console.WriteLine($"  Slope = {tangent.Parameters(1)}")

        ' For many curves, you can evaluate a definite
        ' integral exactly:
        Console.WriteLine("Integral of polynomial1 between 0 and 1 = {0}",
                polynomial1.Integral(0, 1))

        ' You can find the zeroes or roots of the curve
        ' by calling the FindRoots method. Note that this
        ' method only returns the real roots.
        roots = polynomial1.FindRoots()
        Console.WriteLine("Number of roots of polynomial1 = {0}",
                roots.Length)
        Console.WriteLine($"Value of root 1 = {roots(0)}")
        ' Let's find polynomial3's roots again:
        roots = polynomial3.FindRoots()
        Console.WriteLine("Number of roots of polynomial3: {0}",
                roots.Length)
        Console.WriteLine($"Value of root = {roots(0)}")
        Console.WriteLine($"Value of root = {roots(1)}")
        ' Root finding isn't an exact science. Note the 
        ' round-off error in these values:
        Console.WriteLine($"Value of root = {roots(2)}")
        Console.WriteLine($"Value of root = {roots(3)}")

        ' For more advanced uses of the Polynomial class,
        ' see the AdvancedPolynomials QuickStart sample.

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

    End Sub

End Module