NEWTON
Updated: 15 April 2018
Use the scalar function NEWTON to find the root of a univariate function.
Syntax
SELECT [wct].[NEWTON] (
<@Func, nvarchar(max),>
,<@VarName, nvarchar(4000),>
,<@X, float,>
,<@DFunc, nvarchar(max),>
,<@MaxIter, int,>
,<@tol, float,>)
Arguments
Input Name | Description |
@Func | The function to be evaluated, as a string. The function must be in the form of a SELECT statement. |
@VarName | The name of the variable |
@X | The starting value for the evaluation |
@DFunc | A function to compute the derivative. If NULL, a numeric derivate will be computed |
@MaxIter | Maximum number of iterations |
@tol | Absolute tolerance |
Return Type
Remarks
- If @Func or @Dfunc returns a NULL then NULL Is returned.
- If @Func or @Dfunc is not a valid SELECT statement then NULL is returned.
- If the derivative of x evaluates to zero, then NULL Is returned.
- If no solution is found then NULL is returned.
- If @X is NULL then @X = 0.
- If @MaxIter is NULL then @MaxIter = 100
- If @tol is NULL then @tol = 0.
- If @tol <= 0 then @tol = 0.0000000149011612
- Available in XLeratorDB / math 2008 only
Examples
Example #1
Let’s find the rout of the Legendre polynomial of degree 5.
SELECT
wct.NEWTON(
'SELECT (63 * POWER(@x,5) - 70 * POWER(@x,3) + 15 * @x)/8e+00'
,'@x'
,1.0
,NULL
,NULL
,NULL
) as newton
This produces the following result.
Example #2
Same as the previous example, except that we supply the derivate function rather than have NEWTON use a finite difference calculation.
SELECT
wct.NEWTON(
'SELECT (63 * POWER(@x,5) - 70 * POWER(@x,3) + 15 * @x)/8e+00'
,'@x'
,1.0
,'SELECT (315 * POWER(@x,4) - 210 * POWER(@x,2) + 15)/8e+00'
,NULL
,NULL
) as newton
This produces the following result.
Example #3
In this example we call the XLeratorDB PRICE function to calculate the yield on a bond using the NEWTON function and compare that with value returned by the XLeratorDB YIELD function
SELECT
wct.NEWTON(
'SELECT wct.PRICE(
''2018-04-25''
,''2025-05-15''
,.04
,@Y
,100
,2
,0) - 98.25'
,'@Y'
,.04
,NULL
,NULL
,1E-08
) as newton
,wct.YIELD(
'2018-04-25'
,'2025-05-15'
,.04
,98.25
,100
,2
,0) as yield
This produces the following result.
See Also