NMath User's Guide

TOC | Previous | Next | Index

34.2 Integrating Functions of Two Variables (.NET, C#, CSharp, VB, Visual Basic, F#)

The Integrate() method on TwoVariableIntegrator integrates a given two-variable function over a given region. For example, to compute the double integral:

 

 

 

First write the function:

Code Example – C# integration

private double F( DoubleVector v )
{
  return 1.0 / ( 1.0 - ( v[0] * v[0] * v[1] * v[1] ) );
}

Code Example – VB integration

Function F(V As DoubleVector) As Double
  Return 1.0 / (1.0 - (V(0) * V(0) * V(1) * V(1)))
End Function

Then encapsulate the function as a MultiVariableFunction:

Code Example – C# integration

var function = new MultiVariableFunction(
  new Func<DoubleVector, double>( F ) );

Code Example – VB integration

Dim MultiFunction As New MultiVariableFunction(
  New Func(Of DoubleVector, Double)(F))

Finally, compute the integral:

Code Example – C# integration

var integrator = new TwoVariableIntegrator();
double xLower = 0;
double xUpper = 1;
double yLower = 0;
double yUpper = 1;
double integral = integrator.Integrate( function, xLower, xUpper, 
  yLower, yUpper );

Code Example – VB integration

Dim Integrator As New TwoVariableIntegrator()
Dim XLower As Double = 0
Dim XUpper As Double = 1
Dim YLower As Double = 0
Dim YUpper As Double = 1
Dim Integral As Double = integrator.Integrate(MultiFunction, 
  XLower, XUpper, YLower, YUpper)

The code above explicitly sets the x and y bounds. You can also set the y lower bound, y upper bound, or both, as a function of x. For example, to compute this double integral:

 

 

 

First define the function:

Code Example – C# integration

private double F( DoubleVector v )
{
  return ( 9.0 * v[0] * v[0] ) - ( 3.0 * v[1] );
}

Code Example – VB integration

Function F(V As DoubleVector) As Double
  Return (9.0 * V(0) * V(0)) - (3.0 * V(1))
End Function

Then encapsulate the function as a MultiVariableFunction:

Code Example – C# integration

var function = new MultiVariableFunction(
  new Func<DoubleVector, double>( F ) );

Code Example – VB integration

Dim function As New MultiVariableFunction(
  New Func(Of DoubleVector, Double)(F))

Then define the y bounding functions and encapsulate them as OneVariableFunction objects:

Code Example – C# integration

private double YUpperF( double x )
{
  return Math.Sqrt( 9.0 - ( x * x ) );
}



private double YLowerF( double x )
{
  return -YUpperF( x );
}



var yLowerFunction = new OneVariableFunction(
  new NMathFunctions.DoubleUnaryFunction( YLowerF ) );
var yUpperFunction = new OneVariableFunction(
  new NMathFunctions.DoubleUnaryFunction( YUpperF ) );

Code Example – VB integration

Function YUpperF(X As Double) As Double
  Return Math.Sqrt(9.0 - (X * X))
End Function



Function YLowerF(X As Double) As Double
  Return -YUpperF(X)
End Function



Dim YLowerFunction As New OneVariableFunction(
  New Func(Of Double, Double)(AddressOf YLowerF))
Dim YUpperFunction As New OneVariableFunction(
  New Func(Of Double, Double)(AddressOf YUpperF))

Finally, compute the integral:

Code Example – C# integration

var integrator = new TwoVariableIntegrator();
double xLower = -3;
double xUpper = 3;
double integral = integrator.Integrate( function, xLower, xUpper,
  yLowerFunction, yUpperFunction );

Code Example – VB integration

Dim Integrator As New TwoVariableIntegrator()
Dim XLower As Double = -3
Dim Xupper As Double = 3
Dim Integral As Double = integrator.Integrate(MultiFunction,
  XLower, XUpper, YLowerFunction, YUpperFunction)


Top

Top