using System; using CenterSpace.NMath.Core; namespace CenterSpace.NMath.Examples.CSharp { class TwoVariableIntegrationExample { /// <summary> /// A .NET example in C# showing how to integrate over two variables. /// </summary> static void Main( string[] args ) { // Integrate the function F over the area where 0 < x < 1 and 0 < y < 3 // First create the integrand var integrand = new MultiVariableFunction( new Func<DoubleVector, double>( F ) ); // Create the integrator with defaults var integrator = new TwoVariableIntegrator(); Console.WriteLine(); Console.WriteLine( "Calculating the integral of ( x + 10 ) * y^2" ); Console.WriteLine( "where 0 < x < 1 and 0 < y < 3" ); Console.WriteLine(); double integral = integrator.Integrate( integrand, 0, 1, 0, 3 ); Console.WriteLine( "integral is... " + integral ); Console.WriteLine(); // What if one of the bounds is not constant but a function? // Here the upper bound of y is 3x + 5. var yUpper = new OneVariableFunction( new Func<double, double>( Y ) ); // Integrate the function, F, over the area where 0 < x < 1 and 0 < y < ( 3x + 5 ) Console.WriteLine( "where 0 < x < 1 and 0 < y < 3x + 5" ); Console.WriteLine(); integral = integrator.Integrate( integrand, 0, 1, 0, yUpper ); Console.WriteLine( "integral is... " + integral ); Console.WriteLine(); Console.WriteLine( "switch to Romberg" ); Console.WriteLine(); integrator.DxIntegrator = new RombergIntegrator(); integrator.DyIntegrator = new RombergIntegrator(); integral = integrator.Integrate( integrand, 0, 1, 0, yUpper ); Console.WriteLine( "integral is... " + integral ); Console.WriteLine(); Console.WriteLine(); Console.WriteLine( "Press Enter Key" ); Console.Read(); } private static double F( DoubleVector v ) { return ( v[0] + 10 ) * ( v[1] * v[1] ); } private static double Y( double x ) { return ( 3 * x ) + 5; } } // class } // namespace← All NMath Code Examples