Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > 60f1dc962abad0f3b492991a4fbef9be > files > 1288

vtk-doc-5.4.2-5mdv2010.0.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>VTK: vtkPolynomialSolversUnivariate Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.6 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li class="current"><a href="classes.html"><span>Classes</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div class="tabs">
    <ul>
      <li><a href="classes.html"><span>Alphabetical&nbsp;List</span></a></li>
      <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
      <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
      <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
    </ul>
  </div>
</div>
<div class="contents">
<h1>vtkPolynomialSolversUnivariate Class Reference</h1><!-- doxytag: class="vtkPolynomialSolversUnivariate" --><!-- doxytag: inherits="vtkObject" --><code>#include &lt;<a class="el" href="a03906.html">vtkPolynomialSolversUnivariate.h</a>&gt;</code>
<p>
<div class="dynheader">
Inheritance diagram for vtkPolynomialSolversUnivariate:</div>
<div class="dynsection">
<p><center><img src="a13336.png" border="0" usemap="#a13337" alt="Inheritance graph"></center>
<map name="a13337">
<area shape="rect" href="a01084.html" title="abstract base class for most VTK objects" alt="" coords="74,80,154,107"><area shape="rect" href="a01085.html" title="abstract base class for most VTK objects" alt="" coords="59,6,168,32"></map>
<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center></div>
<div class="dynheader">
Collaboration diagram for vtkPolynomialSolversUnivariate:</div>
<div class="dynsection">
<p><center><img src="a13338.png" border="0" usemap="#a13339" alt="Collaboration graph"></center>
<map name="a13339">
<area shape="rect" href="a01084.html" title="abstract base class for most VTK objects" alt="" coords="87,96,167,123"><area shape="rect" href="a01085.html" title="abstract base class for most VTK objects" alt="" coords="5,5,115,32"><area shape="rect" href="a01719.html" title="record modification and/or execution time" alt="" coords="139,5,248,32"></map>
<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center></div>

<p>
<a href="a13340.html">List of all members.</a><hr><a name="_details"></a><h2>Detailed Description</h2>
polynomial solvers 
<p>
<a class="el" href="a01285.html" title="polynomial solvers">vtkPolynomialSolversUnivariate</a> provides solvers for univariate polynomial equations with real coefficients. The Tartaglia-Cardan and Ferrari solvers work on polynomials of fixed degree 3 and 4, respectively. The Lin-Bairstow and Sturm solvers work on polynomials of arbitrary degree. The Sturm solver is the most robust solver but only reports roots within an interval and does not report multiplicities. The Lin-Bairstow solver reports multiplicities.<p>
For difficult polynomials, you may wish to use FilterRoots to eliminate some of the roots reported by the Sturm solver. FilterRoots evaluates the derivatives near each root to eliminate cases where a local minimum or maximum is close to zero.<p>
<dl class="user" compact><dt><b>Thanks:</b></dt><dd>Thanks to Philippe Pebay, Korben Rusek, and Maurice Rojas for implementing these solvers.</dd></dl>
<dl class="user" compact><dt><b>Tests:</b></dt><dd><a class="el" href="c2_vtk_t_12.html#c2_vtk_t_vtkPolynomialSolversUnivariate">vtkPolynomialSolversUnivariate (Tests)</a> </dd></dl>

<p>Definition at line <a class="el" href="a03906.html#l00056">56</a> of file <a class="el" href="a03906.html">vtkPolynomialSolversUnivariate.h</a>.</p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef <a class="el" href="a01084.html">vtkObject</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a01285.html#a6f718e6f796986599c609719c3d0222">Superclass</a></td></tr>

<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual const char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a01285.html#e55070461b2440ab9b2f030ce23e2f3e">GetClassName</a> ()</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a01285.html#ff6c502a32acaec76d50bd6bb30d33e6">IsA</a> (const char *type)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a01285.html#e282e4a1cae1021d5a7a9707f6f58e90">PrintSelf</a> (ostream &amp;os, <a class="el" href="a00869.html">vtkIndent</a> indent)</td></tr>

<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static <br>
<a class="el" href="a01285.html">vtkPolynomialSolversUnivariate</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a01285.html#607aef5d8b2cc069f57c44e811f578c5">New</a> ()</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a01285.html#58b181b7d860d61b0e51c5a3d0243a07">IsTypeOf</a> (const char *type)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">static <br>
<a class="el" href="a01285.html">vtkPolynomialSolversUnivariate</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a01285.html#b0ad7b571b4b81c7adbc1503a2e286f1">SafeDownCast</a> (<a class="el" href="a01084.html">vtkObject</a> *o)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">static ostream &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a01285.html#5e06c35d38dabf9e08d9ec7ea2a8d62b">PrintPolynomial</a> (ostream &amp;os, double *P, int degP)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a01285.html#1c654d81cefbc88adb21425e7cb8e012">LinBairstowSolve</a> (double *c, int d, double *r, double &amp;tolerance)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a01285.html#46da1da6bfdaff796281e518d7861b06">FerrariSolve</a> (double *c, double *r, int *m, double tol)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a01285.html#c09d0143496e7eb00d66074962a40b54">TartagliaCardanSolve</a> (double *c, double *r, int *m, double tol)</td></tr>

<tr><td colspan="2"><div class="groupHeader"></div></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a01285.html#dcba9dae1e5f2d0f404ae4841aa867f2">HabichtBisectionSolve</a> (double *P, int d, double *a, double *upperBnds, double tol)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a01285.html#e57c77831cf0aa1aba5dedeb5853fb8b">HabichtBisectionSolve</a> (double *P, int d, double *a, double *upperBnds, double tol, int intervalType)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a01285.html#13538adeda22c3ed591f0d6fa737b7c1">HabichtBisectionSolve</a> (double *P, int d, double *a, double *upperBnds, double tol, int intervalType, bool divideGCD)</td></tr>

<tr><td colspan="2"><div class="groupHeader"></div></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a01285.html#e2e224dc37dd79a181e3d1657b8ce1cf">SturmBisectionSolve</a> (double *P, int d, double *a, double *upperBnds, double tol)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a01285.html#50d1c1458d0ae8627200b2101786ec5e">SturmBisectionSolve</a> (double *P, int d, double *a, double *upperBnds, double tol, int intervalType)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a01285.html#a30e794525a68145cdf171c8ee120703">SturmBisectionSolve</a> (double *P, int d, double *a, double *upperBnds, double tol, int intervalType, bool divideGCD)</td></tr>

<tr><td colspan="2"><div class="groupHeader"></div></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a01285.html#15e1671a76c87e5faf204bf72c3bca69">FilterRoots</a> (double *P, int d, double *upperBnds, int rootcount, double diameter)</td></tr>

<tr><td colspan="2"><div class="groupHeader"></div></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a01285.html#8a2838f371ae6934bcf41346ebe61574">SetDivisionTolerance</a> (double tol)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">static double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a01285.html#c69249420b8e453d7f3e4f8e44994b2b">GetDivisionTolerance</a> ()</td></tr>

<tr><td colspan="2"><br><h2>Protected Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a01285.html#5dc94f7482db7ff39256939f1b72baa2">vtkPolynomialSolversUnivariate</a> ()</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a01285.html#933566d41516a5fd6d6a6558a37df69f">~vtkPolynomialSolversUnivariate</a> ()</td></tr>

<tr><td colspan="2"><br><h2>Static Protected Attributes</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a01285.html#452f3371e9de137e057f7d719f72633f">DivisionTolerance</a></td></tr>

</table>
<hr><h2>Member Typedef Documentation</h2>
<a class="anchor" name="a6f718e6f796986599c609719c3d0222"></a><!-- doxytag: member="vtkPolynomialSolversUnivariate::Superclass" ref="a6f718e6f796986599c609719c3d0222" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef <a class="el" href="a01084.html">vtkObject</a> <a class="el" href="a01084.html">vtkPolynomialSolversUnivariate::Superclass</a>          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>

<p>Reimplemented from <a class="el" href="a01084.html#11429dee69f4b562e03e07b453dae9b5">vtkObject</a>.</p>

<p>Definition at line <a class="el" href="a03906.html#l00060">60</a> of file <a class="el" href="a03906.html">vtkPolynomialSolversUnivariate.h</a>.</p>

</div>
</div><p>
<hr><h2>Constructor &amp; Destructor Documentation</h2>
<a class="anchor" name="5dc94f7482db7ff39256939f1b72baa2"></a><!-- doxytag: member="vtkPolynomialSolversUnivariate::vtkPolynomialSolversUnivariate" ref="5dc94f7482db7ff39256939f1b72baa2" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">vtkPolynomialSolversUnivariate::vtkPolynomialSolversUnivariate           </td>
          <td>(</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [inline, protected]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>

<p>Definition at line <a class="el" href="a03906.html#l00188">188</a> of file <a class="el" href="a03906.html">vtkPolynomialSolversUnivariate.h</a>.</p>

</div>
</div><p>
<a class="anchor" name="933566d41516a5fd6d6a6558a37df69f"></a><!-- doxytag: member="vtkPolynomialSolversUnivariate::~vtkPolynomialSolversUnivariate" ref="933566d41516a5fd6d6a6558a37df69f" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">vtkPolynomialSolversUnivariate::~vtkPolynomialSolversUnivariate           </td>
          <td>(</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [inline, protected]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>

<p>Definition at line <a class="el" href="a03906.html#l00189">189</a> of file <a class="el" href="a03906.html">vtkPolynomialSolversUnivariate.h</a>.</p>

</div>
</div><p>
<hr><h2>Member Function Documentation</h2>
<a class="anchor" name="607aef5d8b2cc069f57c44e811f578c5"></a><!-- doxytag: member="vtkPolynomialSolversUnivariate::New" ref="607aef5d8b2cc069f57c44e811f578c5" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static <a class="el" href="a01285.html">vtkPolynomialSolversUnivariate</a>* vtkPolynomialSolversUnivariate::New           </td>
          <td>(</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Create an object with Debug turned off, modified time initialized to zero, and reference counting on. 
<p>Reimplemented from <a class="el" href="a01084.html#4d5b227267c076d6f9e38483370b6612">vtkObject</a>.</p>

</div>
</div><p>
<a class="anchor" name="e55070461b2440ab9b2f030ce23e2f3e"></a><!-- doxytag: member="vtkPolynomialSolversUnivariate::GetClassName" ref="e55070461b2440ab9b2f030ce23e2f3e" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">virtual const char* vtkPolynomialSolversUnivariate::GetClassName           </td>
          <td>(</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [virtual]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>

<p>Reimplemented from <a class="el" href="a01084.html#d95975c85c2896ea32ff4cf1f8de0886">vtkObject</a>.</p>

</div>
</div><p>
<a class="anchor" name="58b181b7d860d61b0e51c5a3d0243a07"></a><!-- doxytag: member="vtkPolynomialSolversUnivariate::IsTypeOf" ref="58b181b7d860d61b0e51c5a3d0243a07" args="(const char *type)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int vtkPolynomialSolversUnivariate::IsTypeOf           </td>
          <td>(</td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>name</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Return 1 if this class type is the same type of (or a subclass of) the named class. Returns 0 otherwise. This method works in combination with vtkTypeRevisionMacro found in vtkSetGet.h. 
<p>Reimplemented from <a class="el" href="a01084.html#e9548a248bce0f02f73bbcccd0a9489e">vtkObject</a>.</p>

</div>
</div><p>
<a class="anchor" name="ff6c502a32acaec76d50bd6bb30d33e6"></a><!-- doxytag: member="vtkPolynomialSolversUnivariate::IsA" ref="ff6c502a32acaec76d50bd6bb30d33e6" args="(const char *type)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">virtual int vtkPolynomialSolversUnivariate::IsA           </td>
          <td>(</td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>name</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [virtual]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Return 1 if this class is the same type of (or a subclass of) the named class. Returns 0 otherwise. This method works in combination with vtkTypeRevisionMacro found in vtkSetGet.h. 
<p>Reimplemented from <a class="el" href="a01084.html#831e57b04e46827a7098aa81abadee69">vtkObject</a>.</p>

</div>
</div><p>
<a class="anchor" name="b0ad7b571b4b81c7adbc1503a2e286f1"></a><!-- doxytag: member="vtkPolynomialSolversUnivariate::SafeDownCast" ref="b0ad7b571b4b81c7adbc1503a2e286f1" args="(vtkObject *o)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static <a class="el" href="a01285.html">vtkPolynomialSolversUnivariate</a>* vtkPolynomialSolversUnivariate::SafeDownCast           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="a01084.html">vtkObject</a> *&nbsp;</td>
          <td class="paramname"> <em>o</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>

<p>Reimplemented from <a class="el" href="a01084.html#bb9351f076544c427ee91229dce83abe">vtkObject</a>.</p>

</div>
</div><p>
<a class="anchor" name="e282e4a1cae1021d5a7a9707f6f58e90"></a><!-- doxytag: member="vtkPolynomialSolversUnivariate::PrintSelf" ref="e282e4a1cae1021d5a7a9707f6f58e90" args="(ostream &amp;os, vtkIndent indent)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void vtkPolynomialSolversUnivariate::PrintSelf           </td>
          <td>(</td>
          <td class="paramtype">ostream &amp;&nbsp;</td>
          <td class="paramname"> <em>os</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="a00869.html">vtkIndent</a>&nbsp;</td>
          <td class="paramname"> <em>indent</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [virtual]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Methods invoked by print to print information about the object including superclasses. Typically not called by the user (use <a class="el" href="a01085.html#edadf6378465fd81c2592ef64262e2a5">Print()</a> instead) but used in the hierarchical print process to combine the output of several classes. 
<p>Reimplemented from <a class="el" href="a01084.html#bf3dbb4154289b56a12483eee3866263">vtkObject</a>.</p>

</div>
</div><p>
<a class="anchor" name="5e06c35d38dabf9e08d9ec7ea2a8d62b"></a><!-- doxytag: member="vtkPolynomialSolversUnivariate::PrintPolynomial" ref="5e06c35d38dabf9e08d9ec7ea2a8d62b" args="(ostream &amp;os, double *P, int degP)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static ostream&amp; vtkPolynomialSolversUnivariate::PrintPolynomial           </td>
          <td>(</td>
          <td class="paramtype">ostream &amp;&nbsp;</td>
          <td class="paramname"> <em>os</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double *&nbsp;</td>
          <td class="paramname"> <em>P</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>degP</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>

</div>
</div><p>
<a class="anchor" name="dcba9dae1e5f2d0f404ae4841aa867f2"></a><!-- doxytag: member="vtkPolynomialSolversUnivariate::HabichtBisectionSolve" ref="dcba9dae1e5f2d0f404ae4841aa867f2" args="(double *P, int d, double *a, double *upperBnds, double tol)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int vtkPolynomialSolversUnivariate::HabichtBisectionSolve           </td>
          <td>(</td>
          <td class="paramtype">double *&nbsp;</td>
          <td class="paramname"> <em>P</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>d</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double *&nbsp;</td>
          <td class="paramname"> <em>a</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double *&nbsp;</td>
          <td class="paramname"> <em>upperBnds</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&nbsp;</td>
          <td class="paramname"> <em>tol</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Finds all REAL roots (within tolerance <em>tol</em>) of the <em>d</em> -th degree polynomial <p class="formulaDsp">
<img class="formulaDsp" alt="\[ P[0] X^d + ... + P[d-1] X + P[d] \]" src="form_8.png">
<p>
 in ]<em>a</em>[0] ; <em>a</em>[1]] using the Habicht sequence (polynomial coefficients are REAL) and returns the count <em>nr</em>. All roots are bracketed in the  first ]<em>upperBnds</em>[i] - <em>tol</em> ; <em>upperBnds</em>[i]] intervals. Returns -1 if anything went wrong (such as: polynomial does not have degree <em>d</em>, the interval provided by the other is absurd, etc.). <em>intervalType</em> specifies the search interval as follows: 0 = 00 = ]a,b[ 1 = 10 = [a,b[ 2 = 01 = ]a,b] 3 = 11 = [a,b] This defaults to 0. The last non-zero item in the Habicht sequence is the gcd of P and P'. The parameter divideGCD specifies whether the program should attempt to divide by the gcd and run again. It works better with polynomials known to have high multiplicities. When divideGCD != 0 then it attempts to divide by the GCD, if applicable. This defaults to 0. Compared to the Sturm solver the Habicht solver is slower, although both are O(d^2). The Habicht solver has the added benefit that it has a built in mechanism to keep the leading coefficients of the result from polynomial division bounded above and below in absolute value. This will tend to keep the coefficients of the polynomials in the sequence from zeroing out prematurely or becoming infinite. Constructing the Habicht sequence is O(d^2) in both time and space. Warning: it is the user's responsibility to make sure the <em>upperBnds</em> array is large enough to contain the maximal number of expected roots. Note that <em>nr</em> is smaller or equal to the actual number of roots in ]<em>a</em>[0] ; <em>a</em>[1]] since roots within  are lumped in the same bracket. array is large enough to contain the maximal number of expected upper bounds. 
</div>
</div><p>
<a class="anchor" name="e57c77831cf0aa1aba5dedeb5853fb8b"></a><!-- doxytag: member="vtkPolynomialSolversUnivariate::HabichtBisectionSolve" ref="e57c77831cf0aa1aba5dedeb5853fb8b" args="(double *P, int d, double *a, double *upperBnds, double tol, int intervalType)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int vtkPolynomialSolversUnivariate::HabichtBisectionSolve           </td>
          <td>(</td>
          <td class="paramtype">double *&nbsp;</td>
          <td class="paramname"> <em>P</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>d</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double *&nbsp;</td>
          <td class="paramname"> <em>a</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double *&nbsp;</td>
          <td class="paramname"> <em>upperBnds</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&nbsp;</td>
          <td class="paramname"> <em>tol</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>intervalType</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Finds all REAL roots (within tolerance <em>tol</em>) of the <em>d</em> -th degree polynomial <p class="formulaDsp">
<img class="formulaDsp" alt="\[ P[0] X^d + ... + P[d-1] X + P[d] \]" src="form_8.png">
<p>
 in ]<em>a</em>[0] ; <em>a</em>[1]] using the Habicht sequence (polynomial coefficients are REAL) and returns the count <em>nr</em>. All roots are bracketed in the  first ]<em>upperBnds</em>[i] - <em>tol</em> ; <em>upperBnds</em>[i]] intervals. Returns -1 if anything went wrong (such as: polynomial does not have degree <em>d</em>, the interval provided by the other is absurd, etc.). <em>intervalType</em> specifies the search interval as follows: 0 = 00 = ]a,b[ 1 = 10 = [a,b[ 2 = 01 = ]a,b] 3 = 11 = [a,b] This defaults to 0. The last non-zero item in the Habicht sequence is the gcd of P and P'. The parameter divideGCD specifies whether the program should attempt to divide by the gcd and run again. It works better with polynomials known to have high multiplicities. When divideGCD != 0 then it attempts to divide by the GCD, if applicable. This defaults to 0. Compared to the Sturm solver the Habicht solver is slower, although both are O(d^2). The Habicht solver has the added benefit that it has a built in mechanism to keep the leading coefficients of the result from polynomial division bounded above and below in absolute value. This will tend to keep the coefficients of the polynomials in the sequence from zeroing out prematurely or becoming infinite. Constructing the Habicht sequence is O(d^2) in both time and space. Warning: it is the user's responsibility to make sure the <em>upperBnds</em> array is large enough to contain the maximal number of expected roots. Note that <em>nr</em> is smaller or equal to the actual number of roots in ]<em>a</em>[0] ; <em>a</em>[1]] since roots within  are lumped in the same bracket. array is large enough to contain the maximal number of expected upper bounds. 
</div>
</div><p>
<a class="anchor" name="13538adeda22c3ed591f0d6fa737b7c1"></a><!-- doxytag: member="vtkPolynomialSolversUnivariate::HabichtBisectionSolve" ref="13538adeda22c3ed591f0d6fa737b7c1" args="(double *P, int d, double *a, double *upperBnds, double tol, int intervalType, bool divideGCD)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int vtkPolynomialSolversUnivariate::HabichtBisectionSolve           </td>
          <td>(</td>
          <td class="paramtype">double *&nbsp;</td>
          <td class="paramname"> <em>P</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>d</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double *&nbsp;</td>
          <td class="paramname"> <em>a</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double *&nbsp;</td>
          <td class="paramname"> <em>upperBnds</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&nbsp;</td>
          <td class="paramname"> <em>tol</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>intervalType</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&nbsp;</td>
          <td class="paramname"> <em>divideGCD</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Finds all REAL roots (within tolerance <em>tol</em>) of the <em>d</em> -th degree polynomial <p class="formulaDsp">
<img class="formulaDsp" alt="\[ P[0] X^d + ... + P[d-1] X + P[d] \]" src="form_8.png">
<p>
 in ]<em>a</em>[0] ; <em>a</em>[1]] using the Habicht sequence (polynomial coefficients are REAL) and returns the count <em>nr</em>. All roots are bracketed in the  first ]<em>upperBnds</em>[i] - <em>tol</em> ; <em>upperBnds</em>[i]] intervals. Returns -1 if anything went wrong (such as: polynomial does not have degree <em>d</em>, the interval provided by the other is absurd, etc.). <em>intervalType</em> specifies the search interval as follows: 0 = 00 = ]a,b[ 1 = 10 = [a,b[ 2 = 01 = ]a,b] 3 = 11 = [a,b] This defaults to 0. The last non-zero item in the Habicht sequence is the gcd of P and P'. The parameter divideGCD specifies whether the program should attempt to divide by the gcd and run again. It works better with polynomials known to have high multiplicities. When divideGCD != 0 then it attempts to divide by the GCD, if applicable. This defaults to 0. Compared to the Sturm solver the Habicht solver is slower, although both are O(d^2). The Habicht solver has the added benefit that it has a built in mechanism to keep the leading coefficients of the result from polynomial division bounded above and below in absolute value. This will tend to keep the coefficients of the polynomials in the sequence from zeroing out prematurely or becoming infinite. Constructing the Habicht sequence is O(d^2) in both time and space. Warning: it is the user's responsibility to make sure the <em>upperBnds</em> array is large enough to contain the maximal number of expected roots. Note that <em>nr</em> is smaller or equal to the actual number of roots in ]<em>a</em>[0] ; <em>a</em>[1]] since roots within  are lumped in the same bracket. array is large enough to contain the maximal number of expected upper bounds. 
</div>
</div><p>
<a class="anchor" name="e2e224dc37dd79a181e3d1657b8ce1cf"></a><!-- doxytag: member="vtkPolynomialSolversUnivariate::SturmBisectionSolve" ref="e2e224dc37dd79a181e3d1657b8ce1cf" args="(double *P, int d, double *a, double *upperBnds, double tol)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int vtkPolynomialSolversUnivariate::SturmBisectionSolve           </td>
          <td>(</td>
          <td class="paramtype">double *&nbsp;</td>
          <td class="paramname"> <em>P</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>d</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double *&nbsp;</td>
          <td class="paramname"> <em>a</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double *&nbsp;</td>
          <td class="paramname"> <em>upperBnds</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&nbsp;</td>
          <td class="paramname"> <em>tol</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Finds all REAL roots (within tolerance <em>tol</em>) of the <em>d</em> -th degree polynomial P[0] X^d + ... + P[d-1] X + P[d] in ]<em>a</em>[0] ; <em>a</em>[1]] using Sturm's theorem ( polynomial coefficients are REAL ) and returns the count <em>nr</em>. All roots are bracketed in the  first ]<em>upperBnds</em>[i] - <em>tol</em> ; <em>upperBnds</em>[i]] intervals. Returns -1 if anything went wrong (such as: polynomial does not have degree <em>d</em>, the interval provided by the other is absurd, etc.). intervalType specifies the search interval as follows: 0 = 00 = ]a,b[ 1 = 10 = [a,b[ 2 = 01 = ]a,b] 3 = 11 = [a,b] This defaults to 0. The last non-zero item in the Sturm sequence is the gcd of P and P'. The parameter divideGCD specifies whether the program should attempt to divide by the gcd and run again. It works better with polynomials known to have high multiplicities. When divideGCD != 0 then it attempts to divide by the GCD, if applicable. This defaults to 0. Constructing the Sturm sequence is O(d^2) in both time and space. Warning: it is the user's responsibility to make sure the <em>upperBnds</em> array is large enough to contain the maximal number of expected roots. Note that <em>nr</em> is smaller or equal to the actual number of roots in ]<em>a</em>[0] ; <em>a</em>[1]] since roots within  are lumped in the same bracket. array is large enough to contain the maximal number of expected upper bounds. 
</div>
</div><p>
<a class="anchor" name="50d1c1458d0ae8627200b2101786ec5e"></a><!-- doxytag: member="vtkPolynomialSolversUnivariate::SturmBisectionSolve" ref="50d1c1458d0ae8627200b2101786ec5e" args="(double *P, int d, double *a, double *upperBnds, double tol, int intervalType)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int vtkPolynomialSolversUnivariate::SturmBisectionSolve           </td>
          <td>(</td>
          <td class="paramtype">double *&nbsp;</td>
          <td class="paramname"> <em>P</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>d</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double *&nbsp;</td>
          <td class="paramname"> <em>a</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double *&nbsp;</td>
          <td class="paramname"> <em>upperBnds</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&nbsp;</td>
          <td class="paramname"> <em>tol</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>intervalType</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Finds all REAL roots (within tolerance <em>tol</em>) of the <em>d</em> -th degree polynomial P[0] X^d + ... + P[d-1] X + P[d] in ]<em>a</em>[0] ; <em>a</em>[1]] using Sturm's theorem ( polynomial coefficients are REAL ) and returns the count <em>nr</em>. All roots are bracketed in the  first ]<em>upperBnds</em>[i] - <em>tol</em> ; <em>upperBnds</em>[i]] intervals. Returns -1 if anything went wrong (such as: polynomial does not have degree <em>d</em>, the interval provided by the other is absurd, etc.). intervalType specifies the search interval as follows: 0 = 00 = ]a,b[ 1 = 10 = [a,b[ 2 = 01 = ]a,b] 3 = 11 = [a,b] This defaults to 0. The last non-zero item in the Sturm sequence is the gcd of P and P'. The parameter divideGCD specifies whether the program should attempt to divide by the gcd and run again. It works better with polynomials known to have high multiplicities. When divideGCD != 0 then it attempts to divide by the GCD, if applicable. This defaults to 0. Constructing the Sturm sequence is O(d^2) in both time and space. Warning: it is the user's responsibility to make sure the <em>upperBnds</em> array is large enough to contain the maximal number of expected roots. Note that <em>nr</em> is smaller or equal to the actual number of roots in ]<em>a</em>[0] ; <em>a</em>[1]] since roots within  are lumped in the same bracket. array is large enough to contain the maximal number of expected upper bounds. 
</div>
</div><p>
<a class="anchor" name="a30e794525a68145cdf171c8ee120703"></a><!-- doxytag: member="vtkPolynomialSolversUnivariate::SturmBisectionSolve" ref="a30e794525a68145cdf171c8ee120703" args="(double *P, int d, double *a, double *upperBnds, double tol, int intervalType, bool divideGCD)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int vtkPolynomialSolversUnivariate::SturmBisectionSolve           </td>
          <td>(</td>
          <td class="paramtype">double *&nbsp;</td>
          <td class="paramname"> <em>P</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>d</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double *&nbsp;</td>
          <td class="paramname"> <em>a</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double *&nbsp;</td>
          <td class="paramname"> <em>upperBnds</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&nbsp;</td>
          <td class="paramname"> <em>tol</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>intervalType</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&nbsp;</td>
          <td class="paramname"> <em>divideGCD</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Finds all REAL roots (within tolerance <em>tol</em>) of the <em>d</em> -th degree polynomial P[0] X^d + ... + P[d-1] X + P[d] in ]<em>a</em>[0] ; <em>a</em>[1]] using Sturm's theorem ( polynomial coefficients are REAL ) and returns the count <em>nr</em>. All roots are bracketed in the  first ]<em>upperBnds</em>[i] - <em>tol</em> ; <em>upperBnds</em>[i]] intervals. Returns -1 if anything went wrong (such as: polynomial does not have degree <em>d</em>, the interval provided by the other is absurd, etc.). intervalType specifies the search interval as follows: 0 = 00 = ]a,b[ 1 = 10 = [a,b[ 2 = 01 = ]a,b] 3 = 11 = [a,b] This defaults to 0. The last non-zero item in the Sturm sequence is the gcd of P and P'. The parameter divideGCD specifies whether the program should attempt to divide by the gcd and run again. It works better with polynomials known to have high multiplicities. When divideGCD != 0 then it attempts to divide by the GCD, if applicable. This defaults to 0. Constructing the Sturm sequence is O(d^2) in both time and space. Warning: it is the user's responsibility to make sure the <em>upperBnds</em> array is large enough to contain the maximal number of expected roots. Note that <em>nr</em> is smaller or equal to the actual number of roots in ]<em>a</em>[0] ; <em>a</em>[1]] since roots within  are lumped in the same bracket. array is large enough to contain the maximal number of expected upper bounds. 
</div>
</div><p>
<a class="anchor" name="15e1671a76c87e5faf204bf72c3bca69"></a><!-- doxytag: member="vtkPolynomialSolversUnivariate::FilterRoots" ref="15e1671a76c87e5faf204bf72c3bca69" args="(double *P, int d, double *upperBnds, int rootcount, double diameter)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int vtkPolynomialSolversUnivariate::FilterRoots           </td>
          <td>(</td>
          <td class="paramtype">double *&nbsp;</td>
          <td class="paramname"> <em>P</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>d</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double *&nbsp;</td>
          <td class="paramname"> <em>upperBnds</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>rootcount</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&nbsp;</td>
          <td class="paramname"> <em>diameter</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
This uses the derivative sequence to filter possible roots of a polynomial. First it sorts the roots and removes any duplicates. If the number of sign changes of the derivative sequence at a root at upperBnds[i] == that at upperBnds[i] - diameter then the i^th value is removed from upperBnds. It returns the new number of roots. 
</div>
</div><p>
<a class="anchor" name="1c654d81cefbc88adb21425e7cb8e012"></a><!-- doxytag: member="vtkPolynomialSolversUnivariate::LinBairstowSolve" ref="1c654d81cefbc88adb21425e7cb8e012" args="(double *c, int d, double *r, double &amp;tolerance)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int vtkPolynomialSolversUnivariate::LinBairstowSolve           </td>
          <td>(</td>
          <td class="paramtype">double *&nbsp;</td>
          <td class="paramname"> <em>c</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>d</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double *&nbsp;</td>
          <td class="paramname"> <em>r</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double &amp;&nbsp;</td>
          <td class="paramname"> <em>tolerance</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Seeks all REAL roots of the <em>d</em> -th degree polynomial c[0] X^d + ... + c[d-1] X + c[d] = 0 equation Lin-Bairstow's method ( polynomial coefficients are REAL ) and stores the <em>nr</em> roots found ( multiple roots are multiply stored ) in <em>r</em>. <em>tolerance</em> is the user-defined solver tolerance; this variable may be relaxed by the iterative solver if needed. Returns <em>nr</em>. Warning: it is the user's responsibility to make sure the <em>r</em> array is large enough to contain the maximal number of expected roots. 
</div>
</div><p>
<a class="anchor" name="46da1da6bfdaff796281e518d7861b06"></a><!-- doxytag: member="vtkPolynomialSolversUnivariate::FerrariSolve" ref="46da1da6bfdaff796281e518d7861b06" args="(double *c, double *r, int *m, double tol)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int vtkPolynomialSolversUnivariate::FerrariSolve           </td>
          <td>(</td>
          <td class="paramtype">double *&nbsp;</td>
          <td class="paramname"> <em>c</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double *&nbsp;</td>
          <td class="paramname"> <em>r</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int *&nbsp;</td>
          <td class="paramname"> <em>m</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&nbsp;</td>
          <td class="paramname"> <em>tol</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Algebraically extracts REAL roots of the quartic polynomial with REAL coefficients X^4 + c[0] X^3 + c[1] X^2 + c[2] X + c[3] and stores them (when they exist) and their respective multiplicities in the <em>r</em> and <em>m</em> arrays, based on Ferrari's method. Some numerical noise can be filtered by the use of a tolerance <em>tol</em> instead of equality with 0 (one can use, e.g., VTK_DBL_EPSILON). Returns the number of roots. Warning: it is the user's responsibility to pass a non-negative <em>tol</em>. 
</div>
</div><p>
<a class="anchor" name="c09d0143496e7eb00d66074962a40b54"></a><!-- doxytag: member="vtkPolynomialSolversUnivariate::TartagliaCardanSolve" ref="c09d0143496e7eb00d66074962a40b54" args="(double *c, double *r, int *m, double tol)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int vtkPolynomialSolversUnivariate::TartagliaCardanSolve           </td>
          <td>(</td>
          <td class="paramtype">double *&nbsp;</td>
          <td class="paramname"> <em>c</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double *&nbsp;</td>
          <td class="paramname"> <em>r</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int *&nbsp;</td>
          <td class="paramname"> <em>m</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&nbsp;</td>
          <td class="paramname"> <em>tol</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Algebraically extracts REAL roots of the cubic polynomial with REAL coefficients X^3 + c[0] X^2 + c[1] X + c[2] and stores them (when they exist) and their respective multiplicities in the <em>r</em> and <em>m</em> arrays. Some numerical noise can be filtered by the use of a tolerance <em>tol</em> instead of equality with 0 (one can use, e.g., VTK_DBL_EPSILON). The main differences with SolveCubic are that (1) the polynomial must have unit leading coefficient, (2) complex roots are discarded upfront, (3) non-simple roots are stored only once, along with their respective multiplicities, and (4) some numerical noise is filtered by the use of relative tolerance instead of equality with 0. Returns the number of roots. <em> In memoriam </em> Niccolo Tartaglia (1500 - 1559), unfairly forgotten. 
</div>
</div><p>
<a class="anchor" name="8a2838f371ae6934bcf41346ebe61574"></a><!-- doxytag: member="vtkPolynomialSolversUnivariate::SetDivisionTolerance" ref="8a2838f371ae6934bcf41346ebe61574" args="(double tol)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static void vtkPolynomialSolversUnivariate::SetDivisionTolerance           </td>
          <td>(</td>
          <td class="paramtype">double&nbsp;</td>
          <td class="paramname"> <em>tol</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Set/get the tolerance used when performing polynomial Euclidean division to find polynomial roots. This tolerance is used to decide whether the coefficient(s) of a polynomial remainder are close enough to zero to be neglected. 
</div>
</div><p>
<a class="anchor" name="c69249420b8e453d7f3e4f8e44994b2b"></a><!-- doxytag: member="vtkPolynomialSolversUnivariate::GetDivisionTolerance" ref="c69249420b8e453d7f3e4f8e44994b2b" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static double vtkPolynomialSolversUnivariate::GetDivisionTolerance           </td>
          <td>(</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Set/get the tolerance used when performing polynomial Euclidean division to find polynomial roots. This tolerance is used to decide whether the coefficient(s) of a polynomial remainder are close enough to zero to be neglected. 
</div>
</div><p>
<hr><h2>Member Data Documentation</h2>
<a class="anchor" name="452f3371e9de137e057f7d719f72633f"></a><!-- doxytag: member="vtkPolynomialSolversUnivariate::DivisionTolerance" ref="452f3371e9de137e057f7d719f72633f" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">double <a class="el" href="a01285.html#452f3371e9de137e057f7d719f72633f">vtkPolynomialSolversUnivariate::DivisionTolerance</a><code> [static, protected]</code>          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>

<p>Definition at line <a class="el" href="a03906.html#l00189">189</a> of file <a class="el" href="a03906.html">vtkPolynomialSolversUnivariate.h</a>.</p>

</div>
</div><p>
<hr>The documentation for this class was generated from the following file:<ul>
<li>dox/Common/<a class="el" href="a03906.html">vtkPolynomialSolversUnivariate.h</a></ul>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Wed Jun 3 19:26:33 2009 for VTK by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
</body>
</html>