/********************************************************************/ /* Schroder's methods for root calculation, implemented in C. */ /* This is the 'generic' version for any function with derivatives */ /* ----------------------------------------------------------------*/ /* Reference: "On Infinitely Many Algorithms For Solving Equations"*/ /* by Ernst Schroder, Translated by G. W. Stewart. */ /* ----------------------------------------------------------------*/ /* Copyright (C) 1996 by Dann Corbit */ /* =================================================================*/ /* Inspired by the following reference: */ /* Local convergence rates can be made arbitrarily large. */ /* Ernst Schroder showed, over 100 years ago, how a family */ /* of explicit single-point formulas could be designed to */ /* have arbitrarily high orders of (local) convergence. */ /* You can obtain a translation of Schroder's paper at: */ /* */ /* ftp://ftp.cs.umd.edu/pub/papers/papers/2990/2990.ps.Z */ /* */ /* =================================================================*/ /* A posthumous thanks to Mr. Schroder, & thanks to Pete Stewart. */ /********************************************************************/ /* ** Notation: ** ** 'number' is a typedef for whatever numeric type is being used. ** ** 'ftype' is a typedef for a function taking a number and returning ** a number. ** ** f(x) is the original function. ** f1(x) is the first derivative of the function. ** f2(x) is the second derivative of the function. ** f3(x) is the third derivative of the function. ** f4(x) is the fourth derivative of the function. ** f5(x) is the fifth derivative of the function. ** f6(x) is the sixth derivative of the function. ** f7(x) is the seventh derivative of the function. ** f8(x) is the eighth derivative of the function. ** f9(x) is the ninth derivative of the function. ** f10(x) is the tenth derivative of the function. ** ** For internal function naming, the first letter is ** the series used, the second letter is always an l ** (which indicates non-zero lamda can be used) ** and the ending is the order of the method used. ** ** For instance: ** number al1(ftype f, ftype f1, number l, number x) ** Indicates that the function is ** Schroder's Method, Series A, Lamda variable, Omega = 1 ** and the function returns a number, takes two functions ** and two numbers and returns a number. */ typedef long double number; typedef number (*ftype) (number); number al1 (ftype f, ftype f1, number l, number x); number al2 (ftype f, ftype f1, ftype f2, number l, number x); number al3 (ftype f, ftype f1, ftype f2, ftype f3, number l, number x); number al4 (ftype f, ftype f1, ftype f2, ftype f3, ftype f4, number l, number x); number al5 (ftype f, ftype f1, ftype f2, ftype f3, ftype f4, ftype f5, number l, number x); number al6 (ftype f, ftype f1, ftype f2, ftype f3, ftype f4, ftype f5, ftype f6, number l, number x); number al7 (ftype f, ftype f1, ftype f2, ftype f3, ftype f4, ftype f5, ftype f6, ftype f7, number l, number x); number al8 (ftype f, ftype f1, ftype f2, ftype f3, ftype f4, ftype f5, ftype f6, ftype f7, ftype f8, number l, number x); number al9 (ftype f, ftype f1, ftype f2, ftype f3, ftype f4, ftype f5, ftype f6, ftype f7, ftype f8, ftype f9, number l, number x); number al10 (ftype f, ftype f1, ftype f2, ftype f3, ftype f4, ftype f5, ftype f6, ftype f7, ftype f8, ftype f9, ftype f10, number l, number x); number bl1 (ftype f, ftype f1, ftype f2, number l, number x); number bl2 (ftype f, ftype f1, ftype f2, ftype f3, number l, number x); number bl3 (ftype f, ftype f1, ftype f2, ftype f3, ftype f4, number l, number x); number bl4 (ftype f, ftype f1, ftype f2, ftype f3, ftype f4, ftype f5, number l, number x); number bl5 (ftype f, ftype f1, ftype f2, ftype f3, ftype f4, ftype f5, ftype f6, number l, number x); number bl6 (ftype f, ftype f1, ftype f2, ftype f3, ftype f4, ftype f5, ftype f6, ftype f7, number l, number x); number bl7 (ftype f, ftype f1, ftype f2, ftype f3, ftype f4, ftype f5, ftype f6, ftype f7, ftype f8, number l, number x); number bl8 (ftype f, ftype f1, ftype f2, ftype f3, ftype f4, ftype f5, ftype f6, ftype f7, ftype f8, ftype f9, number l, number x); number bl9 (ftype f, ftype f1, ftype f2, ftype f3, ftype f4, ftype f5, ftype f6, ftype f7, ftype f8, ftype f9, ftype f10, number l, number x); number bl10 (ftype f, ftype f1, ftype f2, ftype f3, ftype f4, ftype f5, ftype f6, ftype f7, ftype f8, ftype f9, ftype f10, ftype f11, number l, number x); number a1 (ftype f, ftype f1, number x); number a2 (ftype f, ftype f1, ftype f2, number x); number a3 (ftype f, ftype f1, ftype f2, ftype f3, number x); number a4 (ftype f, ftype f1, ftype f2, ftype f3, ftype f4, number x); number a5 (ftype f, ftype f1, ftype f2, ftype f3, ftype f4, ftype f5, number x); number a6 (ftype f, ftype f1, ftype f2, ftype f3, ftype f4, ftype f5, ftype f6, number x); number a7 (ftype f, ftype f1, ftype f2, ftype f3, ftype f4, ftype f5, ftype f6, ftype f7, number x); number a8 (ftype f, ftype f1, ftype f2, ftype f3, ftype f4, ftype f5, ftype f6, ftype f7, ftype f8, number x); number a9 (ftype f, ftype f1, ftype f2, ftype f3, ftype f4, ftype f5, ftype f6, ftype f7, ftype f8, ftype f9, number x); number a10 (ftype f, ftype f1, ftype f2, ftype f3, ftype f4, ftype f5, ftype f6, ftype f7, ftype f8, ftype f9, ftype f10, number x); number a11 (ftype f, ftype f1, ftype f2, ftype f3, ftype f4, ftype f5, ftype f6, ftype f7, ftype f8, ftype f9, ftype f10, ftype f11, number x); number a12 (ftype f, ftype f1, ftype f2, ftype f3, ftype f4, ftype f5, ftype f6, ftype f7, ftype f8, ftype f9, ftype f10, ftype f11, ftype f12, number x); number b1 (ftype f, ftype f1, ftype f2, number x); number b2 (ftype f, ftype f1, ftype f2, ftype f3, number x); number b3 (ftype f, ftype f1, ftype f2, ftype f3, ftype f4, number x); number b4 (ftype f, ftype f1, ftype f2, ftype f3, ftype f4, ftype f5, number x); number b5 (ftype f, ftype f1, ftype f2, ftype f3, ftype f4, ftype f5, ftype f6, number x); number b6 (ftype f, ftype f1, ftype f2, ftype f3, ftype f4, ftype f5, ftype f6, ftype f7, number x); number b7 (ftype f, ftype f1, ftype f2, ftype f3, ftype f4, ftype f5, ftype f6, ftype f7, ftype f8, number x); number b8 (ftype f, ftype f1, ftype f2, ftype f3, ftype f4, ftype f5, ftype f6, ftype f7, ftype f8, ftype f9, number x); number b9 (ftype f, ftype f1, ftype f2, ftype f3, ftype f4, ftype f5, ftype f6, ftype f7, ftype f8, ftype f9, ftype f10, number x); number b10 (ftype f, ftype f1, ftype f2, ftype f3, ftype f4, ftype f5, ftype f6, ftype f7, ftype f8, ftype f9, ftype f10, ftype f11, number x); number b11 (ftype f, ftype f1, ftype f2, ftype f3, ftype f4, ftype f5, ftype f6, ftype f7, ftype f8, ftype f9, ftype f10, ftype f11, ftype f12, number x); number b12 (ftype f, ftype f1, ftype f2, ftype f3, ftype f4, ftype f5, ftype f6, ftype f7, ftype f8, ftype f9, ftype f10, ftype f11, ftype f12, ftype f13, number x);