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 =========================================================================*/
51 #ifndef vtkPolynomialSolversUnivariate_h
52 #define vtkPolynomialSolversUnivariate_h
53 
54 #include "vtkCommonMathModule.h" // For export macro
55 #include "vtkObject.h"
56 
58 {
59 public:
62  void PrintSelf(ostream& os, vtkIndent indent);
63  static ostream& PrintPolynomial( ostream& os, double* P, int degP );
64 
66 
93  static int HabichtBisectionSolve(
94  double* P, int d, double* a, double* upperBnds, double tol );
95  static int HabichtBisectionSolve(
96  double* P, int d, double* a, double* upperBnds, double tol,
97  int intervalType );
98  static int HabichtBisectionSolve(
99  double* P, int d, double* a, double* upperBnds, double tol,
100  int intervalType, bool divideGCD );
102 
104 
125  static int SturmBisectionSolve(
126  double* P, int d, double* a, double* upperBnds, double tol );
127  static int SturmBisectionSolve(
128  double* P, int d, double* a, double* upperBnds, double tol,
129  int intervalType );
130  static int SturmBisectionSolve(
131  double* P, int d, double* a, double* upperBnds, double tol,
132  int intervalType, bool divideGCD );
134 
136 
141  static int FilterRoots(
142  double* P, int d, double *upperBnds, int rootcount, double diameter );
144 
153  static int LinBairstowSolve( double* c, int d, double* r, double& tolerance );
154 
163  static int FerrariSolve( double* c, double* r, int* m, double tol );
164 
177  static int TartagliaCardanSolve( double* c, double* r, int* m, double tol );
178 
185  static double* SolveCubic(double c0, double c1, double c2, double c3);
186 
193  static double* SolveQuadratic(double c0, double c1, double c2);
194 
198  static double* SolveLinear(double c0, double c1);
199 
201 
212  static int SolveCubic(double c0, double c1, double c2, double c3,
213  double *r1, double *r2, double *r3, int *num_roots);
215 
217 
221  static int SolveQuadratic(double c0, double c1, double c2,
222  double *r1, double *r2, int *num_roots);
224 
230  static int SolveQuadratic( double* c, double* r, int* m );
231 
236  static int SolveLinear(double c0, double c1, double *r1, int *num_roots);
237 
239 
243  static void SetDivisionTolerance( double tol );
244  static double GetDivisionTolerance();
246 
247 protected:
250 
251  static double DivisionTolerance;
252 
253 private:
255  void operator=(const vtkPolynomialSolversUnivariate&); // Not implemented.
256 };
257 
258 #endif
abstract base class for most VTK objects
Definition: vtkObject.h:61
virtual void PrintSelf(ostream &os, vtkIndent indent)
a simple class to control print indentation
Definition: vtkIndent.h:38
static vtkObject * New()
#define VTKCOMMONMATH_EXPORT