VTK  9.3.1
vtkPolynomialSolversUnivariate.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2 // SPDX-FileCopyrightText: Copyright 2011 Sandia Corporation
3 // SPDX-License-Identifier: LicenseRef-BSD-3-Clause-Sandia-USGov
31 #ifndef vtkPolynomialSolversUnivariate_h
32 #define vtkPolynomialSolversUnivariate_h
33 
34 #include "vtkCommonMathModule.h" // For export macro
35 #include "vtkObject.h"
36 
37 VTK_ABI_NAMESPACE_BEGIN
38 class VTKCOMMONMATH_EXPORT vtkPolynomialSolversUnivariate : public vtkObject
39 {
40 public:
43  void PrintSelf(ostream& os, vtkIndent indent) override;
44  static ostream& PrintPolynomial(ostream& os, double* P, int degP);
45 
47 
86  static int HabichtBisectionSolve(double* P, int d, double* a, double* upperBnds, double tol);
87  static int HabichtBisectionSolve(
88  double* P, int d, double* a, double* upperBnds, double tol, int intervalType);
89  static int HabichtBisectionSolve(
90  double* P, int d, double* a, double* upperBnds, double tol, int intervalType, bool divideGCD);
92 
94 
124  static int SturmBisectionSolve(double* P, int d, double* a, double* upperBnds, double tol);
125  static int SturmBisectionSolve(
126  double* P, int d, double* a, double* upperBnds, double tol, int intervalType);
127  static int SturmBisectionSolve(
128  double* P, int d, double* a, double* upperBnds, double tol, int intervalType, bool divideGCD);
130 
138  static int FilterRoots(double* P, int d, double* upperBnds, int rootcount, double diameter);
139 
151  static int LinBairstowSolve(double* c, int d, double* r, double& tolerance);
152 
163  static int FerrariSolve(double* c, double* r, int* m, double tol);
164 
180  static int TartagliaCardanSolve(double* c, double* r, int* m, double tol);
181 
190  static double* SolveCubic(double c0, double c1, double c2, double c3);
191 
200  static double* SolveQuadratic(double c0, double c1, double c2);
201 
207  static double* SolveLinear(double c0, double c1);
208 
222  static int SolveCubic(
223  double c0, double c1, double c2, double c3, double* r1, double* r2, double* r3, int* num_roots);
224 
232  static int SolveQuadratic(
233  double c0, double c1, double c2, double* r1, double* r2, int* num_roots);
234 
242  static int SolveQuadratic(double* c, double* r, int* m);
243 
250  static int SolveLinear(double c0, double c1, double* r1, int* num_roots);
251 
253 
259  static void SetDivisionTolerance(double tol);
260  static double GetDivisionTolerance();
262 
263 protected:
264  vtkPolynomialSolversUnivariate() = default;
265  ~vtkPolynomialSolversUnivariate() override = default;
266 
267  static double DivisionTolerance;
268 
269 private:
271  void operator=(const vtkPolynomialSolversUnivariate&) = delete;
272 };
273 
274 VTK_ABI_NAMESPACE_END
275 #endif
abstract base class for most VTK objects
Definition: vtkObject.h:51
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
a simple class to control print indentation
Definition: vtkIndent.h:28
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...