Data Analysis Mathematics Linear Algebra Statistics
New Version 8.1!

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

QuickStart Samples

Basic Integration QuickStart Sample (Visual Basic)

Illustrates the basic numerical integration classes in Visual Basic.

```Option Infer On

' The numerical integration classes reside in the
' Extreme.Mathematics.Calculus namespace.
Imports Extreme.Mathematics.Calculus
' Function delegates reside in the Extreme.Mathematics
' namespace.
Imports Extreme.Mathematics
Imports Extreme.Mathematics.Algorithms

Namespace Extreme.Numerics.QuickStart.VB
' Illustrates the use of the Newton-Raphson equation solver
' in the Extreme.Mathematics.EquationSolvers namespace of the Extreme
' Optimization Numerical Libraries for .NET.
Module BasicIntegration

Sub Main()
' Numerical integration algorithms fall into two
' This QuickStart Sample illustrates the use of
'
' All numerical integration classes derive from
' NumericalIntegrator. This abstract base class
' defines properties and methods that are shared
' by all numerical integration classes.

'
' The integrand
'
' The function we are integrating must be
' provided as a Func(Of Double, Double). For more
' Functions QuickStart sample.
Dim f As Func(Of Double, Double) = AddressOf Math.Sin
' Variable to hold the result:
Dim result As Double

'
' SimpsonIntegrator
'

' The simplest numerical integration algorithm
' is Simpson's rule.
Dim simpson As New SimpsonIntegrator()
' You can set the relative or absolute tolerance
' to which to evaluate the integral.
simpson.RelativeTolerance = 0.00001
' You can select the type of tolerance using the
' ConvergenceCriterion property:
simpson.ConvergenceCriterion = ConvergenceCriterion.WithinRelativeTolerance
' The Integrate method performs the actual
' integration:
result = simpson.Integrate(f, 0, 5)
Console.WriteLine("sin(x) on [0,2]")
Console.WriteLine("Simpson integrator:")
' The result is also available in the Result
' property:
Console.WriteLine("  Value: {0}", simpson.Result)
' To see whether the algorithm ended normally,
' inspect the Status property:
Console.WriteLine("  Status: {0}", simpson.Status)
' You can find out the estimated error of the result
' through the EstimatedError property:
Console.WriteLine("  Estimated error: {0}", simpson.EstimatedError)
' The number of iterations to achieve the result
' is available through the IterationsNeeded property.
Console.WriteLine("  Iterations: {0}", simpson.IterationsNeeded)
' The number of function evaluations is available
' through the EvaluationsNeeded property.
Console.WriteLine("  Function evaluations: {0}", simpson.EvaluationsNeeded)

'
' Gauss-Kronrod Integration
'

' Gauss-Kronrod integrators also use a fixed point
' scheme, but with certain optimizations in the
' choice of points where the integrand is evaluated.

' succession of 10, 21, 43, and 87 point rules
' to approximate the integral.
nagk.Integrate(f, 0, 5)
Console.WriteLine("  Value: {0}", nagk.Result)
Console.WriteLine("  Status: {0}", nagk.Status)
Console.WriteLine("  Estimated error: {0}", nagk.EstimatedError)
Console.WriteLine("  Iterations: {0}", nagk.IterationsNeeded)
Console.WriteLine("  Function evaluations: {0}", nagk.EvaluationsNeeded)

'
' Romberg Integration
'

' Romberg integration combines Simpson's Rule
' with a scheme to accelerate convergence.
' This algorithm is useful for smooth integrands.
Dim romberg As New RombergIntegrator()
result = romberg.Integrate(f, 0, 5)
Console.WriteLine("Romberg integration:")
Console.WriteLine("  Value: {0}", romberg.Result)
Console.WriteLine("  Status: {0}", romberg.Status)
Console.WriteLine("  Estimated error: {0}", romberg.EstimatedError)
Console.WriteLine("  Iterations: {0}", romberg.IterationsNeeded)
Console.WriteLine("  Function evaluations: {0}", romberg.EvaluationsNeeded)

' However, it breaks down if the integration
' algorithm contains singularities or
' discontinuities.
result = romberg.Integrate(f, 0, 1)
Console.WriteLine("Romberg on hard integrand:")
Console.WriteLine("  Value: {0}", romberg.Result)
Console.WriteLine("  Actual value: 100")
Console.WriteLine("  Status: {0}", romberg.Status)
Console.WriteLine("  Estimated error: {0}", romberg.EstimatedError)
Console.WriteLine("  Iterations: {0}", romberg.IterationsNeeded)
Console.WriteLine("  Function evaluations: {0}", romberg.EvaluationsNeeded)

Console.Write("Press Enter key to exit...")
End Sub

' Function that will cause difficulties to the
' simplistic integration algorithms.
Private Function HardIntegrand(ByVal x As Double) As Double
' This is put in because some integration rules
' evaluate the function at x=0.
If (x <= 0) Then
Return 0
End If
Return Math.Pow(x, -0.9) * Math.Log(1 / x)
End Function

End Module

End Namespace```