VTK
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 =========================================================================*/
52 #ifndef vtkPolynomialSolversUnivariate_h
53 #define vtkPolynomialSolversUnivariate_h
54 
55 #include "vtkCommonMathModule.h" // For export macro
56 #include "vtkObject.h"
57 
58 class VTKCOMMONMATH_EXPORT vtkPolynomialSolversUnivariate : public vtkObject
59 {
60 public:
63  void PrintSelf(ostream& os, vtkIndent indent) override;
64  static ostream& PrintPolynomial( ostream& os, double* P, int degP );
65 
67 
106  static int HabichtBisectionSolve(
107  double* P, int d, double* a, double* upperBnds, double tol );
108  static int HabichtBisectionSolve(
109  double* P, int d, double* a, double* upperBnds, double tol,
110  int intervalType );
111  static int HabichtBisectionSolve(
112  double* P, int d, double* a, double* upperBnds, double tol,
113  int intervalType, bool divideGCD );
115 
117 
147  static int SturmBisectionSolve(
148  double* P, int d, double* a, double* upperBnds, double tol );
149  static int SturmBisectionSolve(
150  double* P, int d, double* a, double* upperBnds, double tol,
151  int intervalType );
152  static int SturmBisectionSolve(
153  double* P, int d, double* a, double* upperBnds, double tol,
154  int intervalType, bool divideGCD );
156 
164  static int FilterRoots(
165  double* P, int d, double *upperBnds, int rootcount, double diameter );
166 
178  static int LinBairstowSolve( double* c, int d, double* r, double& tolerance );
179 
190  static int FerrariSolve( double* c, double* r, int* m, double tol );
191 
207  static int TartagliaCardanSolve( double* c, double* r, int* m, double tol );
208 
217  static double* SolveCubic(double c0, double c1, double c2, double c3);
218 
227  static double* SolveQuadratic(double c0, double c1, double c2);
228 
234  static double* SolveLinear(double c0, double c1);
235 
249  static int SolveCubic(double c0, double c1, double c2, double c3,
250  double *r1, double *r2, double *r3, int *num_roots);
251 
259  static int SolveQuadratic(double c0, double c1, double c2,
260  double *r1, double *r2, int *num_roots);
261 
269  static int SolveQuadratic( double* c, double* r, int* m );
270 
277  static int SolveLinear(double c0, double c1, double *r1, int *num_roots);
278 
280 
286  static void SetDivisionTolerance( double tol );
287  static double GetDivisionTolerance();
289 
290 protected:
293 
294  static double DivisionTolerance;
295 
296 private:
298  void operator=(const vtkPolynomialSolversUnivariate&) = delete;
299 };
300 
301 #endif
abstract base class for most VTK objects
Definition: vtkObject.h:59
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:39
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...