📄 a00102.html
字号:
resolves closest zero by Newton-Raphson iterations.<p>This function requires an initial zero estimate that is fairly close.<p><dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"><tt>[in]</tt> </td><td valign="top"><em>p</em> </td><td>polynomial being evaluated. template parameter <em>T</em> can be any IEEE floating-point type, real or complex. </td></tr> <tr><td valign="top"><tt>[in,out]</tt> </td><td valign="top"><em>z</em> </td><td>on entry, the original estimate for zero. On exit, the refined zero. Template parameter U can be IEEE floating-point type, real or complex. </td></tr> <tr><td valign="top"><tt>[out]</tt> </td><td valign="top"><em>pz</em> </td><td>on exit, contains <img class="formulaInl" alt="$p(z)$" src="form_43.png"> </td></tr> <tr><td valign="top"><tt>[out]</tt> </td><td valign="top"><em>mpz</em> </td><td>on exit, contains <img class="formulaInl" alt="$|p(z)|$" src="form_44.png"> , the asolute value of <img class="formulaInl" alt="$p(z)$" src="form_43.png"> . </td></tr> <tr><td valign="top"><tt>[in]</tt> </td><td valign="top"><em>adaptive</em> </td><td>indicates wether to use the classic Newton-Raphson algorithm, or the adaptive version. The adaptive algorithm is more efficient for resolving multiple zeros, but can be much is slower when the original estimate is very close to the actual zero.</td></tr> </table></dl><dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a00090.html">Polynomial</a> </dd></dl><p>Definition at line <a class="el" href="a00108.html#l00073">73</a> of file <a class="el" href="a00108.html">polyzero.h</a>. </td> </tr></table><a class="anchor" name="g206394af98d861f1a81bea25ae6d84da"></a><!-- doxytag: member="polyzero.h::removeNullZeros" ref="g206394af98d861f1a81bea25ae6d84da" args="(Polynomial< T > &p)" --><p><table class="mdTable" cellpadding="2" cellspacing="0"> <tr> <td class="mdRow"> <table cellpadding="0" cellspacing="0" border="0"> <tr> <td class="mdPrefix" colspan="4">template<class T> </td> </tr> <tr> <td class="md" nowrap valign="top">int removeNullZeros </td> <td class="md" valign="top">( </td> <td class="md" nowrap valign="top"><a class="el" href="a00090.html">Polynomial</a>< T > & </td> <td class="mdname1" valign="top" nowrap> <em>p</em> </td> <td class="md" valign="top"> ) </td> <td class="md" nowrap></td> </tr> </table> </td> </tr></table><table cellspacing="5" cellpadding="0" border="0"> <tr> <td> </td> <td><p>divides a polynomial <img class="formulaInl" alt="$p(x)$" src="form_21.png"> by <img class="formulaInl" alt="$x$" src="form_45.png"> , until is has no null roots.<p>Deflates the polynomial <em>p</em> until it has no null roots, effectively dividing <img class="formulaInl" alt="$p(x)$" src="form_21.png"> by <img class="formulaInl" alt="$x$" src="form_45.png"> until the coeficient of degree zero is not null.<p><dl compact><dt><b>Example:</b></dt><dd><div class="fragment"><pre class="fragment"><span class="comment">// nullzeros.cpp : Demonstrates use of removeNullZeros</span><span class="comment">//</span><span class="preprocessor">#include <iostream></span><span class="preprocessor">#include "<a class="code" href="a00097.html">polyzero.h</a>"</span><span class="keyword">using namespace </span>std;<span class="keywordtype">void</span> main() { <span class="comment">// this example shows how to remove null roots from a polynomial</span> <span class="comment">// using removeNullRoots()</span> <span class="comment">// create polynomial p(x)=x^3+x^2 (= x*x*(x+1))</span> Polynomial<float> p(3, 0.f, 0.f, 1.f, 1.f); <span class="comment">// print</span> cout << <span class="stringliteral">"before deflating P(x)="</span>; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = p.<a class="code" href="a00090.html#b433e0edb11b32a205a9d07b89aefa8f">degree</a>(); i >= 1; --i) cout << p[i] << <span class="stringliteral">"*x^"</span> << i << <span class="stringliteral">"+"</span>; cout << p[0] << endl << endl; <span class="keywordtype">int</span> n = <a class="code" href="a00102.html#g206394af98d861f1a81bea25ae6d84da">removeNullZeros</a>(p); cout << <span class="stringliteral">"removeNullZeros() removed "</span> << n << <span class="stringliteral">" zeros"</span> << endl; <span class="comment">// print modified polynomial</span> cout << <span class="stringliteral">"after deflating P(x)="</span>; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = p.<a class="code" href="a00090.html#b433e0edb11b32a205a9d07b89aefa8f">degree</a>(); i >= 1; --i) cout << p[i] << <span class="stringliteral">"*x^"</span> << i << <span class="stringliteral">"+"</span>; cout << p[0] << endl;}</pre></div></dd></dl><dl compact><dt><b>Program output:</b></dt><dd><div class="fragment"><pre class="fragment">before deflating P(x)=1*x^3+1*x^2+0*x^1+0<a class="code" href="a00102.html#g206394af98d861f1a81bea25ae6d84da">removeNullZeros</a>() removed 2 zerosafter deflating P(x)=1*x^1+1</pre></div></dd></dl><dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"><tt>[in]</tt> </td><td valign="top"><em>p</em> </td><td>polynomial being evaluated. template parameter <em>T</em> can be any IEEE floating-point type, real or complex. </td></tr> </table></dl><dl compact><dt><b>Returns:</b></dt><dd>The number of null roots found and removed from the original polynomial.</dd></dl><dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a00090.html">Polynomial</a> <br> <a class="el" href="a00090.html#043f1f1821306fe3cc497ca3400fc703">Polynomial::shift()</a> </dd></dl><p>Definition at line <a class="el" href="a00108.html#l00168">168</a> of file <a class="el" href="a00108.html">polyzero.h</a>. </td> </tr></table><a class="anchor" name="g6e9fe1cec8c7ec334d9e21f31b602bde"></a><!-- doxytag: member="polyzero.h::solveDegree1" ref="g6e9fe1cec8c7ec334d9e21f31b602bde" args="(const T &a, const T &b)" --><p><table class="mdTable" cellpadding="2" cellspacing="0"> <tr> <td class="mdRow"> <table cellpadding="0" cellspacing="0" border="0"> <tr> <td class="mdPrefix" colspan="4">template<class T> </td> </tr> <tr> <td class="md" nowrap valign="top">T solveDegree1 </td> <td class="md" valign="top">( </td> <td class="md" nowrap valign="top">const T & </td> <td class="mdname" nowrap> <em>a</em>, </td> </tr> <tr> <td class="md" nowrap align="right"></td> <td class="md"></td> <td class="md" nowrap>const T & </td> <td class="mdname" nowrap> <em>b</em></td> </tr> <tr> <td class="md"></td> <td class="md">) </td> <td class="md" colspan="2"><code> [inline]</code></td> </tr> </table> </td> </tr></table><table cellspacing="5" cellpadding="0" border="0"> <tr> <td> </td> <td><p>returns the root of a degree 1 polynomial.<p>Returns the unique root of the polynomial <img class="formulaInl" alt="$p(x)=ax+b$" src="form_52.png"><p><dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"><tt>[in]</tt> </td><td valign="top"><em>a</em> </td><td>the degree 1 coeficient. </td></tr> <tr><td valign="top"><tt>[in]</tt> </td><td valign="top"><em>b</em> </td><td>the degree 0 coeficient. </td></tr> </table></dl><dl compact><dt><b>Returns:</b></dt><dd>The fraction <img class="formulaInl" alt="$-\frac{b}{a}$" src="form_53.png"> </dd></dl><p>Definition at line <a class="el" href="a00108.html#l00350">350</a> of file <a class="el" href="a00108.html">polyzero.h</a>. </td> </tr></table><a class="anchor" name="gb88e92200690d2e3f8b0c785c8fa42d3"></a><!-- doxytag: member="polyzero.h::solveDegree2" ref="gb88e92200690d2e3f8b0c785c8fa42d3" args="(const T &a, const T &b, const T &c, U &z1, U &z2)" --><p><table class="mdTable" cellpadding="2" cellspacing="0"> <tr> <td class="mdRow"> <table cellpadding="0" cellspacing="0" border="0"> <tr> <td class="mdPrefix" colspan="4">template<class T, class U> </td> </tr> <tr> <td class="md" nowrap valign="top">void solveDegree2 </td> <td class="md" valign="top">( </td> <td class="md" nowrap valign="top">const T & </td> <td class="mdname" nowrap> <em>a</em>, </td> </tr> <tr> <td class="md" nowrap align="right"></td> <td class="md"></td> <td class="md" nowrap>const T & </td> <td class="mdname" nowrap> <em>b</em>, </td> </tr> <tr> <td class="md" nowrap align="right"></td> <td class="md"></td> <td class="md" nowrap>const T & </td> <td class="mdname" nowrap> <em>c</em>, </td> </tr> <tr> <td class="md" nowrap align="right"></td> <td class="md"></td> <td class="md" nowrap>U & </td> <td class="mdname" nowrap> <em>z1</em>, </td> </tr> <tr> <td class="md" nowrap align="right"></td> <td class="md"></td> <td class="md" nowrap>U & </td> <td class="mdname" nowrap> <em>z2</em></td> </tr> <tr> <td class="md"></td> <td class="md">) </td> <td class="md" colspan="2"></td> </tr> </table> </td> </tr></table><table cellspacing="5" cellpadding="0" border="0"> <tr> <td> </td> <td><p>returns the root of a degree 2 polynomial.<p>Returns the two roots of the polynomial <img class="formulaInl" alt="$p(x)=ax^2+bx+c$" src="form_54.png"> .<p>The roots <em>z1</em> and <em>z2</em> are calculated as follows.<p><p class="formulaDsp"><img class="formulaDsp" alt="\[S=b+\sqrt{b^2-4ac}\]" src="form_55.png"><p> <p class="formulaDsp"><img class="formulaDsp" alt="\[D=b-\sqrt{b^2-4ac}\]" src="form_56.png"><p> <p class="formulaDsp"><img class="formulaDsp" alt="\[q=\left\{ \begin{array}{ll} -S & \mbox{if} \left| S\right| >\left| D\right| \\ -D & \mbox{otherwise}\end{array}\right. \]" src="form_57.png"><p> <p class="formulaDsp"><img class="formulaDsp" alt="\[z_1=\frac{2c}{q}\]" src="form_58.png"><p> <p class="formulaDsp"><img class="formulaDsp" alt="\[z_2=\frac{q}{2a}\]" src="form_59.png"><p><p>This method avoids dividing by a very small number and thus reduces error.<p><dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"><tt>[in]</tt> </td><td valign="top"><em>a</em> </td><td>the degree 2 coeficient. Template parameter <em>T</em> can be any floating-point or cvomplex data type. </td></tr> <tr><td valign="top"><tt>[in]</tt> </td><td valign="top"><em>b</em> </td><td>the degree 1 coeficient. </td></tr> <tr><td valign="top"><tt>[in]</tt> </td><td valign="top"><em>c</em> </td><td>the degree 0 coeficient. </td></tr> <tr><td valign="top"><tt>[out]</tt> </td><td valign="top"><em>z1</em> </td><td>the root with the smallest absolute value. Template parameter <em>U</em> should be a complex type for which operators *, -, / and functions abs() and sqrt() are defined. </td></tr> <tr><td valign="top"><tt>[out]</tt> </td><td valign="top"><em>z2</em> </td><td>the root with the largest absolute value. </td></tr> </table></dl><p>Definition at line <a class="el" href="a00108.html#l00383">383</a> of file <a class="el" href="a00108.html">polyzero.h</a>. </td> </tr></table><a class="anchor" name="g3536daa88b2578a96cd84d2680ac9d66"></a><!-- doxytag: member="polyzero.h::sortZeros" ref="g3536daa88b2578a96cd84d2680ac9d66" args="(std::vector< std::complex< T > > &zeros)" --><p><table class="mdTable" cellpadding="2" cellspacing="0"> <tr> <td class="mdRow"> <table cellpadding="0" cellspacing="0" border="0"> <tr> <td class="mdPrefix" colspan="4">template<class T> </td> </tr> <tr> <td class="md" nowrap valign="top">void sortZeros </td> <td class="md" valign="top">( </td> <td class="md" nowrap valign="top">std::vector< std::complex< T > > & </td> <td class="mdname1" valign="top" nowrap> <em>zeros</em> </td> <td class="md" valign="top"> ) </td> <td class="md" nowrap><code> [inline]</code></td> </tr> </table> </td> </tr></table><table cellspacing="5" cellpadding="0" border="0"> <tr> <td> </td> <td><p>sorts the zeros of a polynomial.<p>Sorts the zeros of a polynomial by ascending order of their real part.<p><dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"><tt>[in,out]</tt> </td><td valign="top"><em>zeros</em> </td><td>zeros of a polynomial.</td></tr> </table></dl><dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a00090.html">Polynomial</a><br> <a class="el" href="a00102.html#g8f609e24d651d3dcf78a90ebf4a92380">laguerreZeros()</a><br> <a class="el" href="a00102.html#g255f8995a5a65456d0ac4b99a1d60325">mullerZeros()</a><br> <a class="el" href="a00102.html#g38785df759bdb907a923c48b208f4e0d">jenkinsTraubZeros()</a> </dd></dl><p>Definition at line <a class="el" href="a00108.html#l00328">328</a> of file <a class="el" href="a00108.html">polyzero.h</a>. </td> </tr></table><hr size="1"><address style="align: right;"><small>Generated on Mon Aug 21 21:57:25 2006 for The Polynomials Templates Library by <a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.5 </small></address></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -