VB Integration Example

← All NMath Code Examples


Imports System

Imports CenterSpace.NMath.Core

Namespace CenterSpace.NMath.Examples.VisualBasic

  A .NET example in Visual Basic showing how to create integrator objects for greater control
  over how numerical integration is performed.
  Module IntegrationExample

    Private Function MyFunction(ByVal X As Double) As Double
      Return Math.Sqrt(X)
    End Function

    Sub Main()


      Console.WriteLine("Known exact integral of f from 1 to 4 = 4.6666666...")

      As shown in the OneVariableFunctionExample, the Integrate() method
      on OneVariableFunction computes the integral of a function over a
      given interval.
      Dim D As Func(Of Double, Double) = AddressOf MyFunction
      Dim F As New OneVariableFunction(D)
      Console.Write("Estimate using default Romberg integrator = ")
      Console.WriteLine(F.Integrate(1, 4))

      To perform integration, every OneVariableFunction has an IIntegrator
      object associated with it. NMath Core integration classes such as
      RombergIntegrator and GaussKronrodIntegrator implement the IIntegrator
      interface. The default integrator for a OneVariableFunction is an instance
      of RombergIntegrator.

      Instances of class RombergIntegrator compute successive Romberg
      approximations of increasing order until the estimated error in the
      approximation is less than a specified error tolerance, or until the
      maximum order is reached. To achieve greater control over how integration
      is performed, you can instantiate your own RombergIntegrator.
      Dim Romberg As New RombergIntegrator()

      The Tolerance property gets and sets the error tolerance used in computing
      integrals. MaximumOrder gets and sets the maximum order.
      Romberg.Tolerance = 0.0000000001
      Romberg.MaximumOrder = 20

      The Integrate() method on RombergIntegrator accepts a
      OneVariableFunction and an interval over which to integrate.
      Console.Write("Estimate using customized Romberg integrator = ")
      Console.WriteLine(Romberg.Integrate(F, 1, 4))

      After computing an estimate, a RombergIntegrator holds a record of
      the iteration process. Read-only properties are provided for accessing
      this information.
      Console.Write("Order of estimate = ")
      Console.Write("Error estimate = ")

      ToleranceMet gets a boolean value indicating whether or not the error
      estimate for the integral approximation is less than the tolerance.
      if ( romberg.ToleranceMet ) 
        Console.WriteLine("The estimate is within the error tolerance.")
        Console.WriteLine("The estimate is NOT within the error tolerance.")
      End If

      Tableau gets the entire matrix of successive approximations
      computed while computing a Romberg estimate. The rows are the order
      of approximation. The columns are the level of approximation.
      The first column contains the trapezoidal approximations,
      the second column the Simpson’s rule approximations, the third
      column the Boole’s rule approximations, and so on, up to the Order
      of the approximation just computed.
      Console.WriteLine("Romberg Tableau...")

      The automatic GaussKronrodIntegrator class uses Gauss-Kronrod rules with
      increasing number of points. Approximation ends when the estimated error
      is less than a specified error tolerance, or when the maximum number of
      points is reached. The Gauss-Kronrod method is especially suited for
      non-singular oscillating integrands.
      Dim GK As New GaussKronrodIntegrator()
      Console.Write("Estimate using Gauss-Kronrod automatic integrator = ")
      Console.WriteLine(GK.Integrate(F, 1, 4))

      NMath Core also includes Gauss-Kronrod classes for different numbers of
      Kronrod points (2n+1, beginning with a Gauss 10-point rule). For instance,
      GaussKronrod21Integrator approximates integrals using the Gauss 10-point
      and the Kronrod 21-point rule.
      Dim GK21 As New GaussKronrod21Integrator()
      Console.Write("Estimate using Gauss-Kronrod 21 integrator = ")
      Console.WriteLine(GK21.Integrate(F, 1, 4))

      Console.WriteLine("Press Enter Key")

    End Sub
  End Module
End Namespace

← All NMath Code Examples