Extreme Optimization >
Mathematics Library for .NET >
QuickStart Samples >
NewtonEquationSolver QuickStart Sample (VB.NET)
Extreme Optimization Mathematics Library for .NET
NewtonEquationSolver QuickStart Sample (VB.NET)
Illustrates the use of the NewtonRaphsonSolver
class (Extreme.Mathematics.EquationSolvers namespace) for solving
equations and related functions for numerical differentiation
(Extreme.Mathematics.Calculus namespace) in Visual Basic .NET.
C# code
Back to QuickStart Samples
' The NewtonRaphsonSolver class resides in the
' Extreme.Mathematics.EquationSolvers namespace.
Imports Extreme.Mathematics.EquationSolvers
' Function delegates reside in the Extreme.Mathematics
' namespace.
Imports Extreme.Mathematics
' Special functions reside in the Extreme.Mathematics.SpecialFunctions
' namespace.
Imports Extreme.Mathematics.SpecialFunctions
' The NumericalDifferentiator class resides in the
' Extreme.Mathematics.Calculus namespace.
Imports Extreme.Mathematics.Calculus
Namespace Extreme.Mathematics.QuickStart.VB
' Illustrates the use of the Newton-Raphson equation solver
' in the Extreme.Mathematics.EquationSolvers namespace of the Extreme
' Optimization Mathematics Library for .NET.
Module NewtonEquationSolver
Sub Main()
' The Newton-Raphson solver is used to solve
' non-linear equations in one variable.
'
' The algorithm starts with one starting value,
' and uses the target function and its derivative
' to iteratively find a closer approximation to
' the root of the target function.
'
' The properties and methods that give you control
' over the iteration are shared by all classes
' that implement iterative algorithms.
'
' Target function
'
' The function we are trying to solve must be
' provided as a RealFunction. For more
' information about this delegate, see the
' Functions QuickStart sample.
Dim f As RealFunction = _
New RealFunction(AddressOf Math.Sin)
' The Newton-Raphson method also requires knowledge
' of the derivative:
Dim df As RealFunction = _
New RealFunction(AddressOf Math.Cos)
' Now let's create the NewtonRaphsonSolver object.
Dim solver As NewtonRaphsonSolver = _
New NewtonRaphsonSolver()
' Set the target function and its derivative:
solver.TargetFunction = f
solver.DerivativeOfTargetFunction = df
' Set the initial guess:
solver.InitialGuess = 4
' These values can also be passed in a constructor:
Dim solver2 As NewtonRaphsonSolver = _
New NewtonRaphsonSolver(f, df, 4)
Console.WriteLine("Newton-Raphson Solver: sin(x) = 0")
Console.WriteLine(" Initial guess: 4")
Dim result As Double = solver.Solve()
' The Status property indicates
' the result of running the algorithm.
Console.WriteLine(" Result: {0}", _
solver.Status)
' The result is also available through the
' Result property.
Console.WriteLine(" Solution: {0}", solver.Result)
' You can find out the estimated error of the result
' through the EstimatedError property:
Console.WriteLine(" Estimated error: {0}", _
solver.EstimatedError)
Console.WriteLine(" # iterations: {0}", _
solver.IterationsNeeded)
'
' When you don't have the derivative...
'
' You can still use this class if you don't have
' the derivative of the target function. In this
' case, use the static CreateDelegate method of the
' NumericalDifferentiator class (Extreme.Mathematics.Calculus
' namespace) to create a RealFunction
' that represents the numerical derivative of the
' target function:
f = New RealFunction(AddressOf Bessel.J0)
solver.TargetFunction = f
solver.DerivativeOfTargetFunction = _
NumericalDifferentiator.CreateDelegate(f)
solver.InitialGuess = 5
Console.WriteLine("Zero of Bessel function near x=5:")
result = solver.Solve()
Console.WriteLine(" Result: {0}", _
solver.Status)
Console.WriteLine(" Solution: {0}", solver.Result)
Console.WriteLine(" Estimated error: {0}", _
solver.EstimatedError)
Console.WriteLine(" # iterations: {0}", _
solver.IterationsNeeded)
'
' Controlling the process
'
Console.WriteLine("Same with modified parameters:")
' You can set the maximum # of iterations:
' If the solution cannot be found in time, the
' Status will return a value of
' AlgorithmStatus.IterationLimitExceeded
solver.MaxIterations = 10
' You can specify how convergence is to be tested
' through the ConvergenceCriterion property:
solver.ConvergenceCriterion = _
ConvergenceCriterion.WithinRelativeTolerance
' And, of course, you can set the absolute or
' relative tolerance.
solver.RelativeTolerance = 0.00000000000001
' In this example, the absolute tolerance will be
' ignored.
solver.AbsoluteTolerance = 0.0001
solver.InitialGuess = 5
result = solver.Solve()
Console.WriteLine(" Result: {0}", _
solver.Status)
Console.WriteLine(" Solution: {0}", solver.Result)
' The estimated error will be less than 5e-14
Console.WriteLine(" Estimated error: {0}", _
solver.EstimatedError)
Console.WriteLine(" # iterations: {0}", _
solver.IterationsNeeded)
Console.Write("Press Enter key to exit...")
Console.ReadLine()
End Sub
End Module
End Namespace
Copyright 2004-2008,
Extreme Optimization. All rights reserved.
Extreme Optimization, Complexity made simple, M#, and M
Sharp are trademarks of ExoAnalytics Inc.
Microsoft, Visual C#, Visual Basic, Visual Studio, Visual
Studio.NET, and the Visual Studio Logo are registered trademarks of Microsoft Corporation