Extreme Optimization >
User's Guide >
Mathematics Library >
Solving Equations >
Methods Using Derivatives
Extreme Optimization User's Guide
User's Guide
Up: Solving Equations Next: Solving Systems of Nonlinear Equations Previous: Root Bracketing Solvers Contents
Methods that use the Derivative
Newton devised a method to solve equations using values of the function and its first derivative. It is
implemented by the NewtonRaphsonSolver
class.
The NewtonRaphsonSolver class has two constructors. The first takes no parameters. The function
to solve and its derivative must be set using the TargetFunction and DerivativeOfTargetFunction
properties, which are both RealFunction delegates. The initial
guess must be set using the InitialGuess property.
The second constructor takes these three properties as its three parameters.
| C# | Copy Code |
RealFunction f = new RealFunction(Math.Sin);
RealFunction df = new RealFunction(Math.Cos);
// Use the parameterless constructor:
NewtonRaphsonSolver solver = new NewtonRaphsonSolver();
// Then set the target function and its derivative:
solver.TargetFunction = f;
solver.DerivativeOfTargetFunction = df;
// and the initial guess:
solver.InitialGuess = 4;
// Or specify all three directly in the constructor:
NewtonRaphsonSolver solver2 = new NewtonRaphsonSolver(f, df, 4); |
| Visual Basic | Copy Code |
Dim f As RealFunction = New RealFunction(AddressOf Math.Sin)
Dim df As RealFunction = New RealFunction(AddressOf Math.Cos)
' Use the parameterless constructor:
Dim solver As NewtonRaphsonSolver = New NewtonRaphsonSolver()
' Then set the target function and its derivative:
solver.TargetFunction = f
solver.DerivativeOfTargetFunction = df
' and the initial guess:
solver.InitialGuess = 4
' Or specify all three directly in the constructor:
Dim solver2 As NewtonRaphsonSolver = New NewtonRaphsonSolver(f, df, 4) |
The iteration can be controlled as outlined before by setting the AbsoluteTolerance, RelativeTolerance, ConvergenceCriterion, MaxIterations properties. The Solve method calculates the
zero of the target function:
| C# | Copy Code |
Console.WriteLine("Newton-Raphson Solver: sin(x) = 0");
Console.WriteLine(" Initial guess: 4");
double result = solver.Solve();
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); |
| Visual Basic | Copy Code |
Console.WriteLine("Newton-Raphson Solver: sin(x) = 0")
Console.WriteLine(" Initial guess: 4")
Dim result As Double = 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) |
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:
| C# | Copy Code |
solver.TargetFunction = f = new RealFunction(Bessel.J0);
solver.DerivativeOfTargetFunction = NumericalDifferentiator.CreateDelegate(f);
solver.InitialGuess = 5;
Console.WriteLine("Zero of Bessel function near x=5:");
result = solver.Solve();
Console.WriteLine(" Solution: {0}", solver.Result);
Console.WriteLine(" # iterations: {0}", solver.IterationsNeeded); |
| Visual Basic | Copy Code |
solver.TargetFunction = f = New RealFunction(Bessel.J0)
solver.DerivativeOfTargetFunction = NumericalDifferentiator.CreateDelegate(f)
solver.InitialGuess = 5
Console.WriteLine("Zero of Bessel function near x=5:")
result = solver.Solve()
Console.WriteLine(" Solution: {0}", solver.Result)
Console.WriteLine(" # iterations: {0}", solver.IterationsNeeded) |
It should be noted, however, that this technique requires significantly more function evaluations. If it is
possible to find an interval that contains the root, the preferred method is to use one of the root bracketing
solvers from the previous section.
Reference
Newton, I. Methodus fluxionum et serierum infinitarum. 1664-1671.
Up: Solving Equations Next: Solving Systems of Nonlinear Equations Previous: Root Bracketing Solvers Contents
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