/** * Returns the number of sign changes in the polynomial coefficents after * applying a Mobius transformation to the given polynomial. * * * this is a specialized function used specifically by `isolateRoots` * * Applies a Mobius transformation to the given polynomial: * * p(x) -> (x + 1)^n * p((ax + b) / (x + 1)) * * see e.g. https://arxiv.org/pdf/1605.00410.pdf equation (2) * * This runs in `O(n^2)` arithmetic operations (where `n` is the degree) by * decomposing the Mobius map into elementary steps, rather than the `O(n^3)` * of expanding and summing `Σ cᵢ (ax + b)^i (x + 1)^(n-i)` directly. * * The decomposition (see https://math.stackexchange.com/questions/694565) * uses the identity `(ax + b)/(x + 1) = a + (b - a)/(x + 1)`, which yields * * (x + 1)^n * p((ax + b)/(x + 1)) = S₁( R( Scₐ₋ᵦ( Sₐ(p) ) ) ) * * where * * `Sₕ(f) = f(x + h)` is a Taylor shift (`O(n^2)`), * * `Sc_s(f)` scales the coefficient of `xⁱ` by `sⁱ` (`O(n)`), * * `R(f)` reverses the coefficient array, i.e. `xⁿ f(1/x)` (`O(n)`). * * @param p a polynomial with coefficients given densely as an array of double * floating point numbers from highest to lowest power, e.g. `[5,-3,0]` * represents the polynomial `5x^2 - 3x` * @param p_ an error polynomial that provides a coefficient-wise error bound * **NOT** scaled by `γ1` * @param pDd a polynomial with coefficients given densely as an array of * double-double precision floating point numbers from highest to lowest power, * e.g. `[[0,5],[0,-3],[0,0]]` represents the polynomial `5x^2 - 3x` * @param pDd_ an array of numbers representing the absolute error bounds on the * coefficients of `pDd`; the actual error bound on the coefficient of `xⁱ` is `pDd_[i]*γγ(3)` * @param getPExact defaults to `undefined`; a function returning the exact * polynomial (with coefficients given as Shewchuk expansions) * @param a lower bound of the interval * @param b upper bound of the interval * @param A sign-certified evaluation of polynomial at the lower bound of the interval * @param B sign-certified evaluation of polynomial at the upper bound of the interval * @param failCount the number of times the Mobius transformation has failed to certify the sign * * @internal */ declare function mobiusAndNumSignChanges(p: number[], p_: number[], pDd: number[][], pDd_: number[], getPExact: () => number[][]): (a: number, b: number, A: number, B: number, failCount: number) => number; declare function eMobiusAndNumSignChanges(getPExact: () => number[][], a: number, b: number, A: number, B: number): number; export { mobiusAndNumSignChanges }; export { eMobiusAndNumSignChanges };