VTK  9.1.0
vtkPolynomialSolversUnivariate.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: vtkPolynomialSolversUnivariate.h
5
6 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7 All rights reserved.
8 See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9
10 This software is distributed WITHOUT ANY WARRANTY; without even
11 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12 PURPOSE. See the above copyright notice for more information.
13
14=========================================================================
15 Copyright 2011 Sandia Corporation.
16 Under the terms of Contract DE-AC04-94AL85000, there is a non-exclusive
17 license for use of this work by or on behalf of the
18 U.S. Government. Redistribution and use in source and binary forms, with
19 or without modification, are permitted provided that this Notice and any
20 statement of authorship are reproduced on all copies.
21
22 Contact: pppebay@sandia.gov,dcthomp@sandia.gov
23
24=========================================================================*/
49#ifndef vtkPolynomialSolversUnivariate_h
50#define vtkPolynomialSolversUnivariate_h
51
52#include "vtkCommonMathModule.h" // For export macro
53#include "vtkObject.h"
54
55class VTKCOMMONMATH_EXPORT vtkPolynomialSolversUnivariate : public vtkObject
56{
57public:
60 void PrintSelf(ostream& os, vtkIndent indent) override;
61 static ostream& PrintPolynomial(ostream& os, double* P, int degP);
62
64
103 static int HabichtBisectionSolve(double* P, int d, double* a, double* upperBnds, double tol);
105 double* P, int d, double* a, double* upperBnds, double tol, int intervalType);
107 double* P, int d, double* a, double* upperBnds, double tol, int intervalType, bool divideGCD);
109
111
141 static int SturmBisectionSolve(double* P, int d, double* a, double* upperBnds, double tol);
143 double* P, int d, double* a, double* upperBnds, double tol, int intervalType);
145 double* P, int d, double* a, double* upperBnds, double tol, int intervalType, bool divideGCD);
147
155 static int FilterRoots(double* P, int d, double* upperBnds, int rootcount, double diameter);
156
168 static int LinBairstowSolve(double* c, int d, double* r, double& tolerance);
169
180 static int FerrariSolve(double* c, double* r, int* m, double tol);
181
197 static int TartagliaCardanSolve(double* c, double* r, int* m, double tol);
198
207 static double* SolveCubic(double c0, double c1, double c2, double c3);
208
217 static double* SolveQuadratic(double c0, double c1, double c2);
218
224 static double* SolveLinear(double c0, double c1);
225
239 static int SolveCubic(
240 double c0, double c1, double c2, double c3, double* r1, double* r2, double* r3, int* num_roots);
241
249 static int SolveQuadratic(
250 double c0, double c1, double c2, double* r1, double* r2, int* num_roots);
251
259 static int SolveQuadratic(double* c, double* r, int* m);
260
267 static int SolveLinear(double c0, double c1, double* r1, int* num_roots);
268
270
276 static void SetDivisionTolerance(double tol);
277 static double GetDivisionTolerance();
279
280protected:
283
284 static double DivisionTolerance;
285
286private:
288 void operator=(const vtkPolynomialSolversUnivariate&) = delete;
289};
290
291#endif
a simple class to control print indentation
Definition: vtkIndent.h:113
abstract base class for most VTK objects
Definition: vtkObject.h:73
static double * SolveCubic(double c0, double c1, double c2, double c3)
Solves a cubic equation c0*t^3 + c1*t^2 + c2*t + c3 = 0 when c0, c1, c2, and c3 are REAL.
static int HabichtBisectionSolve(double *P, int d, double *a, double *upperBnds, double tol, int intervalType, bool divideGCD)
Finds all REAL roots (within tolerance tol) of the d -th degree polynomial.
static int FilterRoots(double *P, int d, double *upperBnds, int rootcount, double diameter)
This uses the derivative sequence to filter possible roots of a polynomial.
static int LinBairstowSolve(double *c, int d, double *r, double &tolerance)
Seeks all REAL roots of the d -th degree polynomial c[0] X^d + ... + c[d-1] X + c[d] = 0 equation Lin...
static int SolveCubic(double c0, double c1, double c2, double c3, double *r1, double *r2, double *r3, int *num_roots)
Solves a cubic equation when c0, c1, c2, And c3 Are REAL.
static int FerrariSolve(double *c, double *r, int *m, double tol)
Algebraically extracts REAL roots of the quartic polynomial with REAL coefficients X^4 + c[0] X^3 + c...
static int SturmBisectionSolve(double *P, int d, double *a, double *upperBnds, double tol, int intervalType)
Finds all REAL roots (within tolerance tol) of the d -th degree polynomial P[0] X^d + ....
~vtkPolynomialSolversUnivariate() override=default
static void SetDivisionTolerance(double tol)
Set/get the tolerance used when performing polynomial Euclidean division to find polynomial roots.
static double * SolveLinear(double c0, double c1)
Solves a linear equation c0*t + c1 = 0 when c0 and c1 are REAL.
static int SolveLinear(double c0, double c1, double *r1, int *num_roots)
Solves a linear equation c0*t + c1 = 0 when c0 and c1 are REAL.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
static int SturmBisectionSolve(double *P, int d, double *a, double *upperBnds, double tol, int intervalType, bool divideGCD)
Finds all REAL roots (within tolerance tol) of the d -th degree polynomial P[0] X^d + ....
static int SolveQuadratic(double *c, double *r, int *m)
Algebraically extracts REAL roots of the quadratic polynomial with REAL coefficients c[0] X^2 + c[1] ...
static int TartagliaCardanSolve(double *c, double *r, int *m, double tol)
Algebraically extracts REAL roots of the cubic polynomial with REAL coefficients X^3 + c[0] X^2 + c[1...
static double GetDivisionTolerance()
Set/get the tolerance used when performing polynomial Euclidean division to find polynomial roots.
static ostream & PrintPolynomial(ostream &os, double *P, int degP)
static int HabichtBisectionSolve(double *P, int d, double *a, double *upperBnds, double tol)
Finds all REAL roots (within tolerance tol) of the d -th degree polynomial.
static int SturmBisectionSolve(double *P, int d, double *a, double *upperBnds, double tol)
Finds all REAL roots (within tolerance tol) of the d -th degree polynomial P[0] X^d + ....
static int HabichtBisectionSolve(double *P, int d, double *a, double *upperBnds, double tol, int intervalType)
Finds all REAL roots (within tolerance tol) of the d -th degree polynomial.
static double * SolveQuadratic(double c0, double c1, double c2)
Solves a quadratic equation c0*t^2 + c1*t + c2 = 0 when c0, c1, and c2 are REAL.
static int SolveQuadratic(double c0, double c1, double c2, double *r1, double *r2, int *num_roots)
Solves a quadratic equation c0*t^2 + c1*t + c2 = 0 when c0, c1, and c2 are REAL.
static vtkPolynomialSolversUnivariate * New()