3 <meta http-equiv=
"Content-Type" content=
"text/html; charset=US-ASCII">
4 <title>Polynomials
</title>
5 <link rel=
"stylesheet" href=
"../../math.css" type=
"text/css">
6 <meta name=
"generator" content=
"DocBook XSL Stylesheets V1.77.1">
7 <link rel=
"home" href=
"../../index.html" title=
"Math Toolkit 2.3.0">
8 <link rel=
"up" href=
"../internals.html" title=
"Internal tools">
9 <link rel=
"prev" href=
"tuples.html" title=
"Tuples">
10 <link rel=
"next" href=
"minimax.html" title=
"Minimax Approximations and the Remez Algorithm">
12 <body bgcolor=
"white" text=
"black" link=
"#0000FF" vlink=
"#840084" alink=
"#0000FF">
13 <table cellpadding=
"2" width=
"100%"><tr>
14 <td valign=
"top"><img alt=
"Boost C++ Libraries" width=
"277" height=
"86" src=
"../../../../../../boost.png"></td>
15 <td align=
"center"><a href=
"../../../../../../index.html">Home
</a></td>
16 <td align=
"center"><a href=
"../../../../../../libs/libraries.htm">Libraries
</a></td>
17 <td align=
"center"><a href=
"http://www.boost.org/users/people.html">People
</a></td>
18 <td align=
"center"><a href=
"http://www.boost.org/users/faq.html">FAQ
</a></td>
19 <td align=
"center"><a href=
"../../../../../../more/index.htm">More
</a></td>
22 <div class=
"spirit-nav">
23 <a accesskey=
"p" href=
"tuples.html"><img src=
"../../../../../../doc/src/images/prev.png" alt=
"Prev"></a><a accesskey=
"u" href=
"../internals.html"><img src=
"../../../../../../doc/src/images/up.png" alt=
"Up"></a><a accesskey=
"h" href=
"../../index.html"><img src=
"../../../../../../doc/src/images/home.png" alt=
"Home"></a><a accesskey=
"n" href=
"minimax.html"><img src=
"../../../../../../doc/src/images/next.png" alt=
"Next"></a>
26 <div class=
"titlepage"><div><div><h3 class=
"title">
27 <a name=
"math_toolkit.internals.polynomials"></a><a class=
"link" href=
"polynomials.html" title=
"Polynomials">Polynomials
</a>
28 </h3></div></div></div>
30 <a name=
"math_toolkit.internals.polynomials.h0"></a>
31 <span class=
"phrase"><a name=
"math_toolkit.internals.polynomials.synopsis"></a></span><a class=
"link" href=
"polynomials.html#math_toolkit.internals.polynomials.synopsis">Synopsis
</a>
33 <pre class=
"programlisting"><span class=
"preprocessor">#include
</span> <span class=
"special"><</span><span class=
"identifier">boost
</span><span class=
"special">/
</span><span class=
"identifier">math
</span><span class=
"special">/
</span><span class=
"identifier">tools
</span><span class=
"special">/
</span><span class=
"identifier">polynomial
</span><span class=
"special">.
</span><span class=
"identifier">hpp
</span><span class=
"special">></span>
35 <pre class=
"programlisting"><span class=
"keyword">namespace
</span> <span class=
"identifier">boost
</span><span class=
"special">{
</span> <span class=
"keyword">namespace
</span> <span class=
"identifier">math
</span><span class=
"special">{
</span> <span class=
"keyword">namespace
</span> <span class=
"identifier">tools
</span><span class=
"special">{
</span>
37 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">></span>
38 <span class=
"keyword">class
</span> <span class=
"identifier">polynomial
</span>
39 <span class=
"special">{
</span>
40 <span class=
"keyword">public
</span><span class=
"special">:
</span>
41 <span class=
"comment">// typedefs:
</span>
42 <span class=
"keyword">typedef
</span> <span class=
"keyword">typename
</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">vector
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">value_type
</span> <span class=
"identifier">value_type
</span><span class=
"special">;
</span>
43 <span class=
"keyword">typedef
</span> <span class=
"keyword">typename
</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">vector
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">size_type
</span> <span class=
"identifier">size_type
</span><span class=
"special">;
</span>
45 <span class=
"comment">// construct:
</span>
46 <span class=
"identifier">polynomial
</span><span class=
"special">(){}
</span>
47 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span>
48 <span class=
"identifier">polynomial
</span><span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">U
</span><span class=
"special">*
</span> <span class=
"identifier">data
</span><span class=
"special">,
</span> <span class=
"keyword">unsigned
</span> <span class=
"identifier">order
</span><span class=
"special">);
</span>
49 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">I
</span><span class=
"special">></span>
50 <span class=
"identifier">polynomial
</span><span class=
"special">(
</span><span class=
"identifier">I
</span> <span class=
"identifier">first
</span><span class=
"special">,
</span> <span class=
"identifier">I
</span> <span class=
"identifier">last
</span><span class=
"special">);
</span>
51 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span>
52 <span class=
"keyword">explicit
</span> <span class=
"identifier">polynomial
</span><span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">U
</span><span class=
"special">&</span> <span class=
"identifier">point
</span><span class=
"special">);
</span>
54 <span class=
"comment">// access:
</span>
55 <span class=
"identifier">size_type
</span> <span class=
"identifier">size
</span><span class=
"special">()
</span><span class=
"keyword">const
</span><span class=
"special">;
</span>
56 <span class=
"identifier">size_type
</span> <span class=
"identifier">degree
</span><span class=
"special">()
</span><span class=
"keyword">const
</span><span class=
"special">;
</span>
57 <span class=
"identifier">value_type
</span><span class=
"special">&</span> <span class=
"keyword">operator
</span><span class=
"special">[](
</span><span class=
"identifier">size_type
</span> <span class=
"identifier">i
</span><span class=
"special">);
</span>
58 <span class=
"keyword">const
</span> <span class=
"identifier">value_type
</span><span class=
"special">&</span> <span class=
"keyword">operator
</span><span class=
"special">[](
</span><span class=
"identifier">size_type
</span> <span class=
"identifier">i
</span><span class=
"special">)
</span><span class=
"keyword">const
</span><span class=
"special">;
</span>
59 <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">vector
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">const
</span><span class=
"special">&</span> <span class=
"identifier">data
</span><span class=
"special">()
</span> <span class=
"keyword">const
</span><span class=
"special">;
</span>
60 <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">vector
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">data
</span><span class=
"special">();
</span>
62 <span class=
"comment">// operators:
</span>
63 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span>
64 <span class=
"identifier">polynomial
</span><span class=
"special">&</span> <span class=
"keyword">operator
</span> <span class=
"special">+=(
</span><span class=
"keyword">const
</span> <span class=
"identifier">U
</span><span class=
"special">&</span> <span class=
"identifier">value
</span><span class=
"special">);
</span>
65 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span>
66 <span class=
"identifier">polynomial
</span><span class=
"special">&</span> <span class=
"keyword">operator
</span> <span class=
"special">-=(
</span><span class=
"keyword">const
</span> <span class=
"identifier">U
</span><span class=
"special">&</span> <span class=
"identifier">value
</span><span class=
"special">);
</span>
67 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span>
68 <span class=
"identifier">polynomial
</span><span class=
"special">&</span> <span class=
"keyword">operator
</span> <span class=
"special">*=(
</span><span class=
"keyword">const
</span> <span class=
"identifier">U
</span><span class=
"special">&</span> <span class=
"identifier">value
</span><span class=
"special">);
</span>
69 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span>
70 <span class=
"identifier">polynomial
</span><span class=
"special">&</span> <span class=
"keyword">operator
</span> <span class=
"special">/=(
</span><span class=
"keyword">const
</span> <span class=
"identifier">U
</span><span class=
"special">&</span> <span class=
"identifier">value
</span><span class=
"special">);
</span>
71 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span>
72 <span class=
"identifier">polynomial
</span><span class=
"special">&</span> <span class=
"keyword">operator
</span> <span class=
"special">%=(
</span><span class=
"keyword">const
</span> <span class=
"identifier">U
</span><span class=
"special">&</span> <span class=
"identifier">value
</span><span class=
"special">);
</span>
73 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span>
74 <span class=
"identifier">polynomial
</span><span class=
"special">&</span> <span class=
"keyword">operator
</span> <span class=
"special">+=(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">U
</span><span class=
"special">>&</span> <span class=
"identifier">value
</span><span class=
"special">);
</span>
75 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span>
76 <span class=
"identifier">polynomial
</span><span class=
"special">&</span> <span class=
"keyword">operator
</span> <span class=
"special">-=(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">U
</span><span class=
"special">>&</span> <span class=
"identifier">value
</span><span class=
"special">);
</span>
77 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span>
78 <span class=
"identifier">polynomial
</span><span class=
"special">&</span> <span class=
"keyword">operator
</span> <span class=
"special">*=(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">U
</span><span class=
"special">>&</span> <span class=
"identifier">value
</span><span class=
"special">);
</span>
79 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span>
80 <span class=
"identifier">polynomial
</span><span class=
"special">&</span> <span class=
"keyword">operator
</span> <span class=
"special">/=(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">U
</span><span class=
"special">>&</span> <span class=
"identifier">value
</span><span class=
"special">);
</span>
81 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span>
82 <span class=
"identifier">polynomial
</span><span class=
"special">&</span> <span class=
"keyword">operator
</span> <span class=
"special">%=(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">U
</span><span class=
"special">>&</span> <span class=
"identifier">value
</span><span class=
"special">);
</span>
83 <span class=
"special">};
</span>
85 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">></span>
86 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">operator
</span> <span class=
"special">+
</span> <span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
87 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">></span>
88 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">operator
</span> <span class=
"special">-
</span> <span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
89 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">></span>
90 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">operator
</span> <span class=
"special">*
</span> <span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
91 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">></span>
92 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">operator
</span> <span class=
"special">/
</span> <span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
93 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">></span>
94 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">operator
</span> <span class=
"special">%
</span> <span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
96 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">,
</span> <span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span>
97 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">operator
</span> <span class=
"special">+
</span> <span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">U
</span><span class=
"special">&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
98 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">,
</span> <span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span>
99 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">operator
</span> <span class=
"special">-
</span> <span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">U
</span><span class=
"special">&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
100 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">,
</span> <span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span>
101 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">operator
</span> <span class=
"special">*
</span> <span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">U
</span><span class=
"special">&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
102 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">,
</span> <span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span>
103 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">operator
</span> <span class=
"special">/
</span> <span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">U
</span><span class=
"special">&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
104 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">,
</span> <span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span>
105 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">operator
</span> <span class=
"special">%
</span> <span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">U
</span><span class=
"special">&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
107 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">,
</span> <span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">></span>
108 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">operator
</span> <span class=
"special">+
</span> <span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">U
</span><span class=
"special">&</span> <span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
109 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">,
</span> <span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">></span>
110 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">operator
</span> <span class=
"special">-
</span> <span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">U
</span><span class=
"special">&</span> <span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
111 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">,
</span> <span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">></span>
112 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">operator
</span> <span class=
"special">*
</span> <span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">U
</span><span class=
"special">&</span> <span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
114 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">></span>
115 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">operator
</span> <span class=
"special">-
</span> <span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">a
</span><span class=
"special">);
</span>
117 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">></span>
118 <span class=
"keyword">bool
</span> <span class=
"keyword">operator
</span> <span class=
"special">==
</span> <span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"special">&</span><span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"special">&</span><span class=
"identifier">b
</span><span class=
"special">);
</span>
119 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">></span>
120 <span class=
"keyword">bool
</span> <span class=
"keyword">operator
</span> <span class=
"special">!=
</span> <span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"special">&</span><span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"special">&</span><span class=
"identifier">b
</span><span class=
"special">);
</span>
122 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">charT
</span><span class=
"special">,
</span> <span class=
"keyword">class
</span> <span class=
"identifier">traits
</span><span class=
"special">,
</span> <span class=
"keyword">class
</span> <span class=
"identifier">T
</span><span class=
"special">></span>
123 <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">basic_ostream
</span><span class=
"special"><</span><span class=
"identifier">charT
</span><span class=
"special">,
</span> <span class=
"identifier">traits
</span><span class=
"special">>&</span> <span class=
"keyword">operator
</span> <span class=
"special"><<</span>
124 <span class=
"special">(
</span><span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">basic_ostream
</span><span class=
"special"><</span><span class=
"identifier">charT
</span><span class=
"special">,
</span> <span class=
"identifier">traits
</span><span class=
"special">>&</span> <span class=
"identifier">os
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">poly
</span><span class=
"special">);
</span>
126 <span class=
"keyword">template
</span> <span class=
"special"><</span><span class=
"keyword">typename
</span> <span class=
"identifier">T
</span><span class=
"special">></span>
127 <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">pair
</span><span class=
"special"><</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>,
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"special">></span>
128 <span class=
"identifier">quotient_remainder
</span><span class=
"special">(
</span><span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"keyword">const
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
130 <span class=
"special">}}}
</span> <span class=
"comment">// namespaces
</span>
133 <a name=
"math_toolkit.internals.polynomials.h1"></a>
134 <span class=
"phrase"><a name=
"math_toolkit.internals.polynomials.description"></a></span><a class=
"link" href=
"polynomials.html#math_toolkit.internals.polynomials.description">Description
</a>
137 This is a somewhat trivial class for polynomial manipulation.
140 Implementation is currently of the
"naive" variety, with
𝑶(N
<sup>2</sup>) multiplication,
141 for example. This class should not be used in high-performance computing
142 environments: it is intended for the simple manipulation of small polynomials,
143 typically generated for special function approximation.
146 It does has division for polynomials over a field (floating point, complex,
147 etc) and over a unique factorization domain (integers). Division of polynomials
148 over a field is compatible with Euclidean GCD.
151 Advanced manipulations: the FFT, factorisation etc are not currently provided.
152 Submissions for these are of course welcome :-)
155 <a name=
"math_toolkit.internals.polynomials.h2"></a>
156 <span class=
"phrase"><a name=
"math_toolkit.internals.polynomials.polynomial_examples"></a></span><a class=
"link" href=
"polynomials.html#math_toolkit.internals.polynomials.polynomial_examples">Polynomial
157 Arithmetic Examples
</a>
160 First include the essential polynomial header (and others) to make the example:
162 <pre class=
"programlisting"><span class=
"preprocessor">#include
</span> <span class=
"special"><</span><span class=
"identifier">boost
</span><span class=
"special">/
</span><span class=
"identifier">math
</span><span class=
"special">/
</span><span class=
"identifier">tools
</span><span class=
"special">/
</span><span class=
"identifier">polynomial
</span><span class=
"special">.
</span><span class=
"identifier">hpp
</span><span class=
"special">></span>
165 and some using statements are convenient:
167 <pre class=
"programlisting"><span class=
"keyword">using
</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">string
</span><span class=
"special">;
</span>
168 <span class=
"keyword">using
</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">exception
</span><span class=
"special">;
</span>
169 <span class=
"keyword">using
</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">cout
</span><span class=
"special">;
</span>
170 <span class=
"keyword">using
</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">abs
</span><span class=
"special">;
</span>
171 <span class=
"keyword">using
</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">pair
</span><span class=
"special">;
</span>
173 <span class=
"keyword">using
</span> <span class=
"keyword">namespace
</span> <span class=
"identifier">boost
</span><span class=
"special">::
</span><span class=
"identifier">math
</span><span class=
"special">;
</span>
174 <span class=
"keyword">using
</span> <span class=
"keyword">namespace
</span> <span class=
"identifier">boost
</span><span class=
"special">::
</span><span class=
"identifier">math
</span><span class=
"special">::
</span><span class=
"identifier">tools
</span><span class=
"special">;
</span>
175 <span class=
"keyword">using
</span> <span class=
"identifier">boost
</span><span class=
"special">::
</span><span class=
"identifier">lexical_cast
</span><span class=
"special">;
</span>
178 Store the coefficients in a convenient way to access them, then create some
179 polynomials using construction from an iterator range, and finally output
180 in a 'pretty' formula format.
182 <div class=
"tip"><table border=
"0" summary=
"Tip">
184 <td rowspan=
"2" align=
"center" valign=
"top" width=
"25"><img alt=
"[Tip]" src=
"../../../../../../doc/src/images/tip.png"></td>
185 <th align=
"left">Tip
</th>
187 <tr><td align=
"left" valign=
"top"><p>
188 Although we might conventionally write a polynomial from left to right
189 in descending order of degree, Boost.Math stores in
<span class=
"bold"><strong>ascending
190 order of degree
</strong></span>.
193 <pre class=
"programlisting"><span class=
"identifier">Read
</span><span class=
"special">/
</span><span class=
"identifier">write
</span> <span class=
"keyword">for
</span> <span class=
"identifier">humans
</span><span class=
"special">:
</span> <span class=
"number">3</span><span class=
"identifier">x
</span><span class=
"special">^
</span><span class=
"number">3</span> <span class=
"special">-
</span> <span class=
"number">4</span><span class=
"identifier">x
</span><span class=
"special">^
</span><span class=
"number">2</span> <span class=
"special">-
</span> <span class=
"number">6</span><span class=
"identifier">x
</span> <span class=
"special">+
</span> <span class=
"number">10</span>
194 <span class=
"identifier">Boost
</span> <span class=
"identifier">polynomial
</span> <span class=
"identifier">storage
</span><span class=
"special">:
</span> <span class=
"special">[
</span> <span class=
"number">10</span><span class=
"special">,
</span> <span class=
"special">-
</span><span class=
"number">6</span><span class=
"special">,
</span> <span class=
"special">-
</span><span class=
"number">4</span><span class=
"special">,
</span> <span class=
"number">3</span> <span class=
"special">]
</span>
196 <pre class=
"programlisting"> <span class=
"identifier">boost
</span><span class=
"special">::
</span><span class=
"identifier">array
</span><span class=
"special"><</span><span class=
"keyword">double
</span><span class=
"special">,
</span> <span class=
"number">4</span><span class=
"special">></span> <span class=
"keyword">const
</span> <span class=
"identifier">d3a
</span> <span class=
"special">=
</span> <span class=
"special">{{
</span><span class=
"number">10</span><span class=
"special">,
</span> <span class=
"special">-
</span><span class=
"number">6</span><span class=
"special">,
</span> <span class=
"special">-
</span><span class=
"number">4</span><span class=
"special">,
</span> <span class=
"number">3</span><span class=
"special">}};
</span>
197 <span class=
"identifier">boost
</span><span class=
"special">::
</span><span class=
"identifier">array
</span><span class=
"special"><</span><span class=
"keyword">double
</span><span class=
"special">,
</span> <span class=
"number">2</span><span class=
"special">></span> <span class=
"keyword">const
</span> <span class=
"identifier">d1a
</span> <span class=
"special">=
</span> <span class=
"special">{{-
</span><span class=
"number">2</span><span class=
"special">,
</span> <span class=
"number">1</span><span class=
"special">}};
</span>
198 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"keyword">double
</span><span class=
"special">></span> <span class=
"keyword">const
</span> <span class=
"identifier">a
</span><span class=
"special">(
</span><span class=
"identifier">d3a
</span><span class=
"special">.
</span><span class=
"identifier">begin
</span><span class=
"special">(),
</span> <span class=
"identifier">d3a
</span><span class=
"special">.
</span><span class=
"identifier">end
</span><span class=
"special">());
</span>
199 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"keyword">double
</span><span class=
"special">></span> <span class=
"keyword">const
</span> <span class=
"identifier">b
</span><span class=
"special">(
</span><span class=
"identifier">d1a
</span><span class=
"special">.
</span><span class=
"identifier">begin
</span><span class=
"special">(),
</span> <span class=
"identifier">d1a
</span><span class=
"special">.
</span><span class=
"identifier">end
</span><span class=
"special">());
</span>
200 <span class=
"comment">// pretty_format() converts from Boost storage to human notation.
</span>
201 <span class=
"identifier">cout
</span> <span class=
"special"><<</span> <span class=
"string">"a = "</span> <span class=
"special"><<</span> <span class=
"identifier">pretty_format
</span><span class=
"special">(
</span><span class=
"identifier">a
</span><span class=
"special">)
</span>
202 <span class=
"special"><<</span> <span class=
"string">"\nb = "</span> <span class=
"special"><<</span> <span class=
"identifier">pretty_format
</span><span class=
"special">(
</span><span class=
"identifier">b
</span><span class=
"special">)
</span> <span class=
"special"><<</span> <span class=
"string">"\n\n"</span><span class=
"special">;
</span>
207 <pre class=
"programlisting"><span class=
"identifier">a
</span> <span class=
"special">=
</span> <span class=
"number">3</span><span class=
"identifier">x
</span><span class=
"special">^
</span><span class=
"number">3</span> <span class=
"special">-
</span> <span class=
"number">4</span><span class=
"identifier">x
</span><span class=
"special">^
</span><span class=
"number">2</span> <span class=
"special">-
</span> <span class=
"number">6</span><span class=
"identifier">x
</span> <span class=
"special">+
</span> <span class=
"number">10</span>
208 <span class=
"identifier">b
</span> <span class=
"special">=
</span> <span class=
"identifier">x
</span> <span class=
"special">-
</span> <span class=
"number">2</span>
210 <pre class=
"programlisting"><span class=
"comment">// Now we can do arithmetic with the usual infix operators: + - * / and %.
</span>
211 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"keyword">double
</span><span class=
"special">></span> <span class=
"identifier">s
</span> <span class=
"special">=
</span> <span class=
"identifier">a
</span> <span class=
"special">+
</span> <span class=
"identifier">b
</span><span class=
"special">;
</span>
212 <span class=
"identifier">cout
</span> <span class=
"special"><<</span> <span class=
"string">"a + b = "</span> <span class=
"special"><<</span> <span class=
"identifier">pretty_format
</span><span class=
"special">(
</span><span class=
"identifier">s
</span><span class=
"special">)
</span> <span class=
"special"><<</span> <span class=
"string">"\n"</span><span class=
"special">;
</span>
213 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"keyword">double
</span><span class=
"special">></span> <span class=
"identifier">d
</span> <span class=
"special">=
</span> <span class=
"identifier">a
</span> <span class=
"special">-
</span> <span class=
"identifier">b
</span><span class=
"special">;
</span>
214 <span class=
"identifier">cout
</span> <span class=
"special"><<</span> <span class=
"string">"a - b = "</span> <span class=
"special"><<</span> <span class=
"identifier">pretty_format
</span><span class=
"special">(
</span><span class=
"identifier">d
</span><span class=
"special">)
</span> <span class=
"special"><<</span> <span class=
"string">"\n"</span><span class=
"special">;
</span>
215 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"keyword">double
</span><span class=
"special">></span> <span class=
"identifier">p
</span> <span class=
"special">=
</span> <span class=
"identifier">a
</span> <span class=
"special">*
</span> <span class=
"identifier">b
</span><span class=
"special">;
</span>
216 <span class=
"identifier">cout
</span> <span class=
"special"><<</span> <span class=
"string">"a * b = "</span> <span class=
"special"><<</span> <span class=
"identifier">pretty_format
</span><span class=
"special">(
</span><span class=
"identifier">p
</span><span class=
"special">)
</span> <span class=
"special"><<</span> <span class=
"string">"\n"</span><span class=
"special">;
</span>
217 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"keyword">double
</span><span class=
"special">></span> <span class=
"identifier">q
</span> <span class=
"special">=
</span> <span class=
"identifier">a
</span> <span class=
"special">/
</span> <span class=
"identifier">b
</span><span class=
"special">;
</span>
218 <span class=
"identifier">cout
</span> <span class=
"special"><<</span> <span class=
"string">"a / b = "</span> <span class=
"special"><<</span> <span class=
"identifier">pretty_format
</span><span class=
"special">(
</span><span class=
"identifier">q
</span><span class=
"special">)
</span> <span class=
"special"><<</span> <span class=
"string">"\n"</span><span class=
"special">;
</span>
219 <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"keyword">double
</span><span class=
"special">></span> <span class=
"identifier">r
</span> <span class=
"special">=
</span> <span class=
"identifier">a
</span> <span class=
"special">%
</span> <span class=
"identifier">b
</span><span class=
"special">;
</span>
220 <span class=
"identifier">cout
</span> <span class=
"special"><<</span> <span class=
"string">"a % b = "</span> <span class=
"special"><<</span> <span class=
"identifier">pretty_format
</span><span class=
"special">(
</span><span class=
"identifier">r
</span><span class=
"special">)
</span> <span class=
"special"><<</span> <span class=
"string">"\n"</span><span class=
"special">;
</span>
225 <pre class=
"programlisting"><span class=
"identifier">a
</span> <span class=
"special">+
</span> <span class=
"identifier">b
</span> <span class=
"special">=
</span> <span class=
"number">3</span><span class=
"identifier">x
</span><span class=
"special">^
</span><span class=
"number">3</span> <span class=
"special">-
</span> <span class=
"number">4</span><span class=
"identifier">x
</span><span class=
"special">^
</span><span class=
"number">2</span> <span class=
"special">-
</span> <span class=
"number">5</span><span class=
"identifier">x
</span> <span class=
"special">+
</span> <span class=
"number">8</span>
226 <span class=
"identifier">a
</span> <span class=
"special">-
</span> <span class=
"identifier">b
</span> <span class=
"special">=
</span> <span class=
"number">3</span><span class=
"identifier">x
</span><span class=
"special">^
</span><span class=
"number">3</span> <span class=
"special">-
</span> <span class=
"number">4</span><span class=
"identifier">x
</span><span class=
"special">^
</span><span class=
"number">2</span> <span class=
"special">-
</span> <span class=
"number">7</span><span class=
"identifier">x
</span> <span class=
"special">+
</span> <span class=
"number">12</span>
227 <span class=
"identifier">a
</span> <span class=
"special">*
</span> <span class=
"identifier">b
</span> <span class=
"special">=
</span> <span class=
"number">3</span><span class=
"identifier">x
</span><span class=
"special">^
</span><span class=
"number">4</span> <span class=
"special">-
</span> <span class=
"number">10</span><span class=
"identifier">x
</span><span class=
"special">^
</span><span class=
"number">3</span> <span class=
"special">+
</span> <span class=
"number">2</span><span class=
"identifier">x
</span><span class=
"special">^
</span><span class=
"number">2</span> <span class=
"special">+
</span> <span class=
"number">22</span><span class=
"identifier">x
</span> <span class=
"special">-
</span> <span class=
"number">20</span>
228 <span class=
"identifier">a
</span> <span class=
"special">/
</span> <span class=
"identifier">b
</span> <span class=
"special">=
</span> <span class=
"number">3</span><span class=
"identifier">x
</span><span class=
"special">^
</span><span class=
"number">2</span> <span class=
"special">+
</span> <span class=
"number">2</span><span class=
"identifier">x
</span> <span class=
"special">-
</span> <span class=
"number">2</span>
229 <span class=
"identifier">a
</span> <span class=
"special">%
</span> <span class=
"identifier">b
</span> <span class=
"special">=
</span> <span class=
"number">6</span>
232 <a name=
"math_toolkit.internals.polynomials.h3"></a>
233 <span class=
"phrase"><a name=
"math_toolkit.internals.polynomials.division_quotient_and_remainder"></a></span><a class=
"link" href=
"polynomials.html#math_toolkit.internals.polynomials.division_quotient_and_remainder">Division,
234 Quotient and Remainder
</a>
237 Division is a special case where you can calculate two for the price of one.
240 Actually, quotient and remainder are always calculated together due to the
241 nature of the algorithm: the infix operators return one result and throw
245 If you are doing a lot of division and want both the quotient and remainder,
246 then you don't want to do twice the work necessary.
249 In that case you can call the underlying function,
<code class=
"literal">quotient_remainder
</code>,
250 to get both results together as a pair.
252 <pre class=
"programlisting"> <span class=
"identifier">pair
</span><span class=
"special"><</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"keyword">double
</span><span class=
"special">>,
</span> <span class=
"identifier">polynomial
</span><span class=
"special"><</span><span class=
"keyword">double
</span><span class=
"special">></span> <span class=
"special">></span> <span class=
"identifier">result
</span><span class=
"special">;
</span>
253 <span class=
"identifier">result
</span> <span class=
"special">=
</span> <span class=
"identifier">quotient_remainder
</span><span class=
"special">(
</span><span class=
"identifier">a
</span><span class=
"special">,
</span> <span class=
"identifier">b
</span><span class=
"special">);
</span>
254 <span class=
"comment">// Reassure ourselves that the result is the same.
</span>
255 <span class=
"identifier">BOOST_ASSERT
</span><span class=
"special">(
</span><span class=
"identifier">result
</span><span class=
"special">.
</span><span class=
"identifier">first
</span> <span class=
"special">==
</span> <span class=
"identifier">q
</span><span class=
"special">);
</span>
256 <span class=
"identifier">BOOST_ASSERT
</span><span class=
"special">(
</span><span class=
"identifier">result
</span><span class=
"special">.
</span><span class=
"identifier">second
</span> <span class=
"special">==
</span> <span class=
"identifier">r
</span><span class=
"special">);
</span>
259 The source code is at
<a href=
"../../../../example/polynomial_arithmetic.cpp" target=
"_top">polynomial_arithmetic.cpp
</a>
262 <table xmlns:
rev=
"http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width=
"100%"><tr>
263 <td align=
"left"></td>
264 <td align=
"right"><div class=
"copyright-footer">Copyright
© 2006-
2010,
2012-
2014 Nikhar Agrawal,
265 Anton Bikineev, Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert
266 Holin, Bruno Lalande, John Maddock, Johan R
åde, Gautam Sewani, Benjamin Sobotta,
267 Thijs van den Berg, Daryle Walker and Xiaogang Zhang
<p>
268 Distributed under the Boost Software License, Version
1.0. (See accompanying
269 file LICENSE_1_0.txt or copy at
<a href=
"http://www.boost.org/LICENSE_1_0.txt" target=
"_top">http://www.boost.org/LICENSE_1_0.txt
</a>)
274 <div class=
"spirit-nav">
275 <a accesskey=
"p" href=
"tuples.html"><img src=
"../../../../../../doc/src/images/prev.png" alt=
"Prev"></a><a accesskey=
"u" href=
"../internals.html"><img src=
"../../../../../../doc/src/images/up.png" alt=
"Up"></a><a accesskey=
"h" href=
"../../index.html"><img src=
"../../../../../../doc/src/images/home.png" alt=
"Home"></a><a accesskey=
"n" href=
"minimax.html"><img src=
"../../../../../../doc/src/images/next.png" alt=
"Next"></a>