VTK  9.0.1
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 
55 class VTKCOMMONMATH_EXPORT vtkPolynomialSolversUnivariate : public vtkObject
56 {
57 public:
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);
104  static int HabichtBisectionSolve(
105  double* P, int d, double* a, double* upperBnds, double tol, int intervalType);
106  static int HabichtBisectionSolve(
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);
142  static int SturmBisectionSolve(
143  double* P, int d, double* a, double* upperBnds, double tol, int intervalType);
144  static int SturmBisectionSolve(
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 
280 protected:
283 
284  static double DivisionTolerance;
285 
286 private:
288  void operator=(const vtkPolynomialSolversUnivariate&) = delete;
289 };
290 
291 #endif
vtkPolynomialSolversUnivariate
polynomial solvers
Definition: vtkPolynomialSolversUnivariate.h:55
vtkObject::New
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on.
vtkObject
abstract base class for most VTK objects
Definition: vtkObject.h:62
vtkPolynomialSolversUnivariate::~vtkPolynomialSolversUnivariate
~vtkPolynomialSolversUnivariate() override
Definition: vtkPolynomialSolversUnivariate.h:282
vtkPolynomialSolversUnivariate::vtkPolynomialSolversUnivariate
vtkPolynomialSolversUnivariate()
Definition: vtkPolynomialSolversUnivariate.h:281
vtkPolynomialSolversUnivariate::DivisionTolerance
static double DivisionTolerance
Definition: vtkPolynomialSolversUnivariate.h:284
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:33
vtkObject::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkObject.h