3 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4 <title>Elliptic Integrals - Carlson Form</title>
5 <link rel="stylesheet" href="../../math.css" type="text/css">
6 <meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
7 <link rel="home" href="../../index.html" title="Math Toolkit 2.11.0">
8 <link rel="up" href="../ellint.html" title="Elliptic Integrals">
9 <link rel="prev" href="ellint_intro.html" title="Elliptic Integral Overview">
10 <link rel="next" href="ellint_1.html" title="Elliptic Integrals of the First Kind - Legendre Form">
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="ellint_intro.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ellint.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="ellint_1.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.ellint.ellint_carlson"></a><a class="link" href="ellint_carlson.html" title="Elliptic Integrals - Carlson Form">Elliptic Integrals
29 </h3></div></div></div>
31 <a name="math_toolkit.ellint.ellint_carlson.h0"></a>
32 <span class="phrase"><a name="math_toolkit.ellint.ellint_carlson.synopsis"></a></span><a class="link" href="ellint_carlson.html#math_toolkit.ellint.ellint_carlson.synopsis">Synopsis</a>
34 <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">special_functions</span><span class="special">/</span><span class="identifier">ellint_rf</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
36 <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>
38 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T2</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T3</span><span class="special">></span>
39 <a class="link" href="../result_type.html" title="Calculation of the Type of the Result"><span class="emphasis"><em>calculated-result-type</em></span></a> <span class="identifier">ellint_rf</span><span class="special">(</span><span class="identifier">T1</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">T2</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">T3</span> <span class="identifier">z</span><span class="special">)</span>
41 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T2</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T3</span><span class="special">,</span> <span class="keyword">class</span> <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">></span>
42 <a class="link" href="../result_type.html" title="Calculation of the Type of the Result"><span class="emphasis"><em>calculated-result-type</em></span></a> <span class="identifier">ellint_rf</span><span class="special">(</span><span class="identifier">T1</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">T2</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">T3</span> <span class="identifier">z</span><span class="special">,</span> <span class="keyword">const</span> <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">&)</span>
44 <span class="special">}}</span> <span class="comment">// namespaces</span>
46 <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">special_functions</span><span class="special">/</span><span class="identifier">ellint_rd</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
48 <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>
50 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T2</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T3</span><span class="special">></span>
51 <a class="link" href="../result_type.html" title="Calculation of the Type of the Result"><span class="emphasis"><em>calculated-result-type</em></span></a> <span class="identifier">ellint_rd</span><span class="special">(</span><span class="identifier">T1</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">T2</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">T3</span> <span class="identifier">z</span><span class="special">)</span>
53 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T2</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T3</span><span class="special">,</span> <span class="keyword">class</span> <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">></span>
54 <a class="link" href="../result_type.html" title="Calculation of the Type of the Result"><span class="emphasis"><em>calculated-result-type</em></span></a> <span class="identifier">ellint_rd</span><span class="special">(</span><span class="identifier">T1</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">T2</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">T3</span> <span class="identifier">z</span><span class="special">,</span> <span class="keyword">const</span> <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">&)</span>
56 <span class="special">}}</span> <span class="comment">// namespaces</span>
58 <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">special_functions</span><span class="special">/</span><span class="identifier">ellint_rj</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
60 <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>
62 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T2</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T3</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T4</span><span class="special">></span>
63 <a class="link" href="../result_type.html" title="Calculation of the Type of the Result"><span class="emphasis"><em>calculated-result-type</em></span></a> <span class="identifier">ellint_rj</span><span class="special">(</span><span class="identifier">T1</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">T2</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">T3</span> <span class="identifier">z</span><span class="special">,</span> <span class="identifier">T4</span> <span class="identifier">p</span><span class="special">)</span>
65 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T2</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T3</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T4</span><span class="special">,</span> <span class="keyword">class</span> <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">></span>
66 <a class="link" href="../result_type.html" title="Calculation of the Type of the Result"><span class="emphasis"><em>calculated-result-type</em></span></a> <span class="identifier">ellint_rj</span><span class="special">(</span><span class="identifier">T1</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">T2</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">T3</span> <span class="identifier">z</span><span class="special">,</span> <span class="identifier">T4</span> <span class="identifier">p</span><span class="special">,</span> <span class="keyword">const</span> <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">&)</span>
68 <span class="special">}}</span> <span class="comment">// namespaces</span>
70 <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">special_functions</span><span class="special">/</span><span class="identifier">ellint_rc</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
72 <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>
74 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T2</span><span class="special">></span>
75 <a class="link" href="../result_type.html" title="Calculation of the Type of the Result"><span class="emphasis"><em>calculated-result-type</em></span></a> <span class="identifier">ellint_rc</span><span class="special">(</span><span class="identifier">T1</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">T2</span> <span class="identifier">y</span><span class="special">)</span>
77 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T2</span><span class="special">,</span> <span class="keyword">class</span> <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">></span>
78 <a class="link" href="../result_type.html" title="Calculation of the Type of the Result"><span class="emphasis"><em>calculated-result-type</em></span></a> <span class="identifier">ellint_rc</span><span class="special">(</span><span class="identifier">T1</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">T2</span> <span class="identifier">y</span><span class="special">,</span> <span class="keyword">const</span> <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">&)</span>
80 <span class="special">}}</span> <span class="comment">// namespaces</span>
82 <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">special_functions</span><span class="special">/</span><span class="identifier">ellint_rg</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
84 <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>
86 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T2</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T3</span><span class="special">></span>
87 <a class="link" href="../result_type.html" title="Calculation of the Type of the Result"><span class="emphasis"><em>calculated-result-type</em></span></a> <span class="identifier">ellint_rg</span><span class="special">(</span><span class="identifier">T1</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">T2</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">T3</span> <span class="identifier">z</span><span class="special">)</span>
89 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T2</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T3</span><span class="special">,</span> <span class="keyword">class</span> <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">></span>
90 <a class="link" href="../result_type.html" title="Calculation of the Type of the Result"><span class="emphasis"><em>calculated-result-type</em></span></a> <span class="identifier">ellint_rg</span><span class="special">(</span><span class="identifier">T1</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">T2</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">T3</span> <span class="identifier">z</span><span class="special">,</span> <span class="keyword">const</span> <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">&)</span>
92 <span class="special">}}</span> <span class="comment">// namespaces</span>
95 <a name="math_toolkit.ellint.ellint_carlson.h1"></a>
96 <span class="phrase"><a name="math_toolkit.ellint.ellint_carlson.description"></a></span><a class="link" href="ellint_carlson.html#math_toolkit.ellint.ellint_carlson.description">Description</a>
99 These functions return Carlson's symmetrical elliptic integrals, the functions
100 have complicated behavior over all their possible domains, but the following
101 graph gives an idea of their behavior:
103 <div class="blockquote"><blockquote class="blockquote"><p>
104 <span class="inlinemediaobject"><img src="../../../graphs/ellint_carlson.svg" align="middle"></span>
106 </p></blockquote></div>
108 The return type of these functions is computed using the <a class="link" href="../result_type.html" title="Calculation of the Type of the Result"><span class="emphasis"><em>result
109 type calculation rules</em></span></a> when the arguments are of different
110 types: otherwise the return is the same type as the arguments.
112 <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T2</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T3</span><span class="special">></span>
113 <a class="link" href="../result_type.html" title="Calculation of the Type of the Result"><span class="emphasis"><em>calculated-result-type</em></span></a> <span class="identifier">ellint_rf</span><span class="special">(</span><span class="identifier">T1</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">T2</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">T3</span> <span class="identifier">z</span><span class="special">)</span>
115 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T2</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T3</span><span class="special">,</span> <span class="keyword">class</span> <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">></span>
116 <a class="link" href="../result_type.html" title="Calculation of the Type of the Result"><span class="emphasis"><em>calculated-result-type</em></span></a> <span class="identifier">ellint_rf</span><span class="special">(</span><span class="identifier">T1</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">T2</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">T3</span> <span class="identifier">z</span><span class="special">,</span> <span class="keyword">const</span> <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">&)</span>
119 Returns Carlson's Elliptic Integral <span class="emphasis"><em>R<sub>F</sub></em></span>:
121 <div class="blockquote"><blockquote class="blockquote"><p>
122 <span class="inlinemediaobject"><img src="../../../equations/ellint9.svg"></span>
124 </p></blockquote></div>
126 Requires that all of the arguments are non-negative, and at most one may
127 be zero. Otherwise returns the result of <a class="link" href="../error_handling.html#math_toolkit.error_handling.domain_error">domain_error</a>.
130 The final <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">Policy</a> argument is optional and can
131 be used to control the behaviour of the function: how it handles errors,
132 what level of precision to use etc. Refer to the <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">policy
133 documentation for more details</a>.
135 <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T2</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T3</span><span class="special">></span>
136 <a class="link" href="../result_type.html" title="Calculation of the Type of the Result"><span class="emphasis"><em>calculated-result-type</em></span></a> <span class="identifier">ellint_rd</span><span class="special">(</span><span class="identifier">T1</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">T2</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">T3</span> <span class="identifier">z</span><span class="special">)</span>
138 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T2</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T3</span><span class="special">,</span> <span class="keyword">class</span> <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">></span>
139 <a class="link" href="../result_type.html" title="Calculation of the Type of the Result"><span class="emphasis"><em>calculated-result-type</em></span></a> <span class="identifier">ellint_rd</span><span class="special">(</span><span class="identifier">T1</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">T2</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">T3</span> <span class="identifier">z</span><span class="special">,</span> <span class="keyword">const</span> <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">&)</span>
142 Returns Carlson's elliptic integral R<sub>D</sub>:
144 <div class="blockquote"><blockquote class="blockquote"><p>
145 <span class="inlinemediaobject"><img src="../../../equations/ellint10.svg"></span>
147 </p></blockquote></div>
149 Requires that x and y are non-negative, with at most one of them zero, and
150 that z >= 0. Otherwise returns the result of <a class="link" href="../error_handling.html#math_toolkit.error_handling.domain_error">domain_error</a>.
153 The final <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">Policy</a> argument is optional and can
154 be used to control the behaviour of the function: how it handles errors,
155 what level of precision to use etc. Refer to the <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">policy
156 documentation for more details</a>.
158 <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T2</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T3</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T4</span><span class="special">></span>
159 <a class="link" href="../result_type.html" title="Calculation of the Type of the Result"><span class="emphasis"><em>calculated-result-type</em></span></a> <span class="identifier">ellint_rj</span><span class="special">(</span><span class="identifier">T1</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">T2</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">T3</span> <span class="identifier">z</span><span class="special">,</span> <span class="identifier">T4</span> <span class="identifier">p</span><span class="special">)</span>
161 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T2</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T3</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T4</span><span class="special">,</span> <span class="keyword">class</span> <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">></span>
162 <a class="link" href="../result_type.html" title="Calculation of the Type of the Result"><span class="emphasis"><em>calculated-result-type</em></span></a> <span class="identifier">ellint_rj</span><span class="special">(</span><span class="identifier">T1</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">T2</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">T3</span> <span class="identifier">z</span><span class="special">,</span> <span class="identifier">T4</span> <span class="identifier">p</span><span class="special">,</span> <span class="keyword">const</span> <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">&)</span>
165 Returns Carlson's elliptic integral R<sub>J</sub>:
167 <div class="blockquote"><blockquote class="blockquote"><p>
168 <span class="inlinemediaobject"><img src="../../../equations/ellint11.svg"></span>
170 </p></blockquote></div>
172 Requires that x, y and z are non-negative, with at most one of them zero,
173 and that <span class="emphasis"><em>p != 0</em></span>. Otherwise returns the result of <a class="link" href="../error_handling.html#math_toolkit.error_handling.domain_error">domain_error</a>.
176 The final <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">Policy</a> argument is optional and can
177 be used to control the behaviour of the function: how it handles errors,
178 what level of precision to use etc. Refer to the <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">policy
179 documentation for more details</a>.
182 When <span class="emphasis"><em>p < 0</em></span> the function returns the <a href="http://en.wikipedia.org/wiki/Cauchy_principal_value" target="_top">Cauchy
183 principal value</a> using the relation:
185 <div class="blockquote"><blockquote class="blockquote"><p>
186 <span class="inlinemediaobject"><img src="../../../equations/ellint17.svg"></span>
188 </p></blockquote></div>
189 <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T2</span><span class="special">></span>
190 <a class="link" href="../result_type.html" title="Calculation of the Type of the Result"><span class="emphasis"><em>calculated-result-type</em></span></a> <span class="identifier">ellint_rc</span><span class="special">(</span><span class="identifier">T1</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">T2</span> <span class="identifier">y</span><span class="special">)</span>
192 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T2</span><span class="special">,</span> <span class="keyword">class</span> <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">></span>
193 <a class="link" href="../result_type.html" title="Calculation of the Type of the Result"><span class="emphasis"><em>calculated-result-type</em></span></a> <span class="identifier">ellint_rc</span><span class="special">(</span><span class="identifier">T1</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">T2</span> <span class="identifier">y</span><span class="special">,</span> <span class="keyword">const</span> <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">&)</span>
196 Returns Carlson's elliptic integral R<sub>C</sub>:
198 <div class="blockquote"><blockquote class="blockquote"><p>
199 <span class="inlinemediaobject"><img src="../../../equations/ellint12.svg"></span>
201 </p></blockquote></div>
203 Requires that <span class="emphasis"><em>x > 0</em></span> and that <span class="emphasis"><em>y != 0</em></span>.
204 Otherwise returns the result of <a class="link" href="../error_handling.html#math_toolkit.error_handling.domain_error">domain_error</a>.
207 The final <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">Policy</a> argument is optional and can
208 be used to control the behaviour of the function: how it handles errors,
209 what level of precision to use etc. Refer to the <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">policy
210 documentation for more details</a>.
213 When <span class="emphasis"><em>y < 0</em></span> the function returns the <a href="http://mathworld.wolfram.com/CauchyPrincipalValue.html" target="_top">Cauchy
214 principal value</a> using the relation:
216 <div class="blockquote"><blockquote class="blockquote"><p>
217 <span class="inlinemediaobject"><img src="../../../equations/ellint18.svg"></span>
219 </p></blockquote></div>
220 <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T2</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T3</span><span class="special">></span>
221 <a class="link" href="../result_type.html" title="Calculation of the Type of the Result"><span class="emphasis"><em>calculated-result-type</em></span></a> <span class="identifier">ellint_rg</span><span class="special">(</span><span class="identifier">T1</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">T2</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">T3</span> <span class="identifier">z</span><span class="special">)</span>
223 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T2</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T3</span><span class="special">,</span> <span class="keyword">class</span> <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">></span>
224 <a class="link" href="../result_type.html" title="Calculation of the Type of the Result"><span class="emphasis"><em>calculated-result-type</em></span></a> <span class="identifier">ellint_rg</span><span class="special">(</span><span class="identifier">T1</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">T2</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">T3</span> <span class="identifier">z</span><span class="special">,</span> <span class="keyword">const</span> <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">&)</span>
227 Returns Carlson's elliptic integral <span class="emphasis"><em>R<sub>G</sub>:</em></span>
229 <div class="blockquote"><blockquote class="blockquote"><p>
230 <span class="inlinemediaobject"><img src="../../../equations/ellint27.svg"></span>
232 </p></blockquote></div>
234 Requires that x and y are non-negative, otherwise returns the result of
235 <a class="link" href="../error_handling.html#math_toolkit.error_handling.domain_error">domain_error</a>.
238 The final <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">Policy</a> argument is optional and can
239 be used to control the behaviour of the function: how it handles errors,
240 what level of precision to use etc. Refer to the <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">policy
241 documentation for more details</a>.
244 <a name="math_toolkit.ellint.ellint_carlson.h2"></a>
245 <span class="phrase"><a name="math_toolkit.ellint.ellint_carlson.testing"></a></span><a class="link" href="ellint_carlson.html#math_toolkit.ellint.ellint_carlson.testing">Testing</a>
248 There are two sets of tests.
251 Spot tests compare selected values with test data given in:
253 <div class="blockquote"><blockquote class="blockquote"><p>
254 B. C. Carlson, <span class="emphasis"><em><a href="http://arxiv.org/abs/math.CA/9409227" target="_top">Numerical
255 computation of real or complex elliptic integrals</a></em></span>. Numerical
256 Algorithms, Volume 10, Number 1 / March, 1995, pp 13-26.
257 </p></blockquote></div>
259 Random test data generated using NTL::RR at 1000-bit precision and our implementation
260 checks for rounding-errors and/or regressions.
263 There are also sanity checks that use the inter-relations between the integrals
264 to verify their correctness: see the above Carlson paper for details.
267 <a name="math_toolkit.ellint.ellint_carlson.h3"></a>
268 <span class="phrase"><a name="math_toolkit.ellint.ellint_carlson.accuracy"></a></span><a class="link" href="ellint_carlson.html#math_toolkit.ellint.ellint_carlson.accuracy">Accuracy</a>
271 These functions are computed using only basic arithmetic operations, so there
272 isn't much variation in accuracy over differing platforms. Note that only
273 results for the widest floating-point type on the system are given as narrower
274 types have <a class="link" href="../relative_error.html#math_toolkit.relative_error.zero_error">effectively
275 zero error</a>. All values are relative errors in units of epsilon.
278 <a name="math_toolkit.ellint.ellint_carlson.table_ellint_rc"></a><p class="title"><b>Table 8.58. Error rates for ellint_rc</b></p>
279 <div class="table-contents"><table class="table" summary="Error rates for ellint_rc">
291 GNU C++ version 7.1.0<br> linux<br> double
296 GNU C++ version 7.1.0<br> linux<br> long double
301 Microsoft Visual C++ version 14.1<br> Win32<br> double
313 <span class="blue">Max = 0ε (Mean = 0ε)</span><br> <br> (<span class="emphasis"><em>GSL
314 2.1:</em></span> Max = 2.4ε (Mean = 0.624ε))
319 <span class="blue">Max = 0.995ε (Mean = 0.433ε)</span>
324 <span class="blue">Max = 0.962ε (Mean = 0.407ε)</span>
330 <br class="table-break"><div class="table">
331 <a name="math_toolkit.ellint.ellint_carlson.table_ellint_rd"></a><p class="title"><b>Table 8.59. Error rates for ellint_rd</b></p>
332 <div class="table-contents"><table class="table" summary="Error rates for ellint_rd">
344 GNU C++ version 7.1.0<br> linux<br> double
349 GNU C++ version 7.1.0<br> linux<br> long double
354 Microsoft Visual C++ version 14.1<br> Win32<br> double
367 <span class="blue">Max = 0ε (Mean = 0ε)</span><br> <br> (<span class="emphasis"><em>GSL
368 2.1:</em></span> Max = 2.59ε (Mean = 0.878ε))
373 <span class="blue">Max = 2.73ε (Mean = 0.831ε)</span>
378 <span class="blue">Max = 2.16ε (Mean = 0.803ε)</span>
390 <span class="blue">Max = 0.896ε (Mean = 0.022ε)</span><br> <br>
391 (<span class="emphasis"><em>GSL 2.1:</em></span> Max = 2.88ε (Mean = 0.839ε))
396 <span class="blue">Max = 2.65ε (Mean = 0.82ε)</span>
401 <span class="blue">Max = 16.5ε (Mean = 0.843ε)</span>
413 <span class="blue">Max = 0.824ε (Mean = 0.0272ε)</span><br>
414 <br> (<span class="emphasis"><em>GSL 2.1:</em></span> Max = 3.74ε (Mean = 0.84ε))
419 <span class="blue">Max = 2.85ε (Mean = 0.865ε)</span>
424 <span class="blue">Max = 3.51ε (Mean = 0.816ε)</span>
436 <span class="blue">Max = 0ε (Mean = 0ε)</span><br> <br> (<span class="emphasis"><em>GSL
437 2.1:</em></span> Max = 2ε (Mean = 0.656ε))
442 <span class="blue">Max = 1.19ε (Mean = 0.522ε)</span>
447 <span class="blue">Max = 1.16ε (Mean = 0.497ε)</span>
459 <span class="blue">Max = 0ε (Mean = 0ε)</span><br> <br> (<span class="emphasis"><em>GSL
460 2.1:</em></span> Max = 1.03ε (Mean = 0.418ε))
465 <span class="blue">Max = 0.998ε (Mean = 0.387ε)</span>
470 <span class="blue">Max = 1.03ε (Mean = 0.418ε)</span>
482 <span class="blue">Max = 0ε (Mean = 0ε)</span><br> <br> (<span class="emphasis"><em>GSL
483 2.1:</em></span> Max = 2.85ε (Mean = 0.781ε))
488 <span class="blue">Max = 2.79ε (Mean = 0.883ε)</span>
493 <span class="blue">Max = 2.64ε (Mean = 0.894ε)</span>
500 <br class="table-break"><div class="table">
501 <a name="math_toolkit.ellint.ellint_carlson.table_ellint_rg"></a><p class="title"><b>Table 8.60. Error rates for ellint_rg</b></p>
502 <div class="table-contents"><table class="table" summary="Error rates for ellint_rg">
514 GNU C++ version 7.1.0<br> linux<br> double
519 GNU C++ version 7.1.0<br> linux<br> long double
524 Microsoft Visual C++ version 14.1<br> Win32<br> double
537 <span class="blue">Max = 0.983ε (Mean = 0.0172ε)</span><br>
538 <br> (<span class="emphasis"><em>GSL 2.1:</em></span> Max = 0.983ε (Mean = 0.0172ε))
543 <span class="blue">Max = 3.95ε (Mean = 0.951ε)</span>
548 <span class="blue">Max = 3.65ε (Mean = 0.929ε)</span>
560 <span class="blue">Max = 0ε (Mean = 0ε)</span><br> <br> (<span class="emphasis"><em>GSL
561 2.1:</em></span> Max = 0ε (Mean = 0ε))
566 <span class="blue">Max = 0ε (Mean = 0ε)</span>
571 <span class="blue">Max = 0ε (Mean = 0ε)</span>
578 RG: All values the same or zero
583 <span class="blue">Max = 0ε (Mean = 0ε)</span><br> <br> (<span class="emphasis"><em>GSL
584 2.1:</em></span> Max = 0ε (Mean = 0ε))
589 <span class="blue">Max = 0.992ε (Mean = 0.288ε)</span>
594 <span class="blue">Max = 1.06ε (Mean = 0.348ε)</span>
601 RG: two values the same
606 <span class="blue">Max = 0.594ε (Mean = 0.0103ε)</span><br>
607 <br> (<span class="emphasis"><em>GSL 2.1:</em></span> Max = 0.594ε (Mean = 0.0103ε))
612 <span class="blue">Max = 1.51ε (Mean = 0.404ε)</span>
617 <span class="blue">Max = 1.96ε (Mean = 0.374ε)</span>
629 <span class="blue">Max = 0ε (Mean = 0ε)</span><br> <br> (<span class="emphasis"><em>GSL
630 2.1:</em></span> Max = 0ε (Mean = 0ε))
635 <span class="blue">Max = 2.14ε (Mean = 0.722ε)</span>
640 <span class="blue">Max = 1.96ε (Mean = 0.674ε)</span>
647 <br class="table-break"><div class="table">
648 <a name="math_toolkit.ellint.ellint_carlson.table_ellint_rf"></a><p class="title"><b>Table 8.61. Error rates for ellint_rf</b></p>
649 <div class="table-contents"><table class="table" summary="Error rates for ellint_rf">
661 GNU C++ version 7.1.0<br> linux<br> double
666 GNU C++ version 7.1.0<br> linux<br> long double
671 Microsoft Visual C++ version 14.1<br> Win32<br> double
684 <span class="blue">Max = 0ε (Mean = 0ε)</span><br> <br> (<span class="emphasis"><em>GSL
685 2.1:</em></span> Max = 2.73ε (Mean = 0.804ε))
690 <span class="blue">Max = 2.54ε (Mean = 0.674ε)</span>
695 <span class="blue">Max = 2.02ε (Mean = 0.677ε)</span>
707 <span class="blue">Max = 0ε (Mean = 0ε)</span><br> <br> (<span class="emphasis"><em>GSL
708 2.1:</em></span> Max = 0.999ε (Mean = 0.34ε))
713 <span class="blue">Max = 0.991ε (Mean = 0.345ε)</span>
718 <span class="blue">Max = 0.999ε (Mean = 0.34ε)</span>
725 RF: x = y or y = z or x = z
730 <span class="blue">Max = 0.536ε (Mean = 0.00658ε)</span><br>
731 <br> (<span class="emphasis"><em>GSL 2.1:</em></span> Max = 2.89ε (Mean = 0.749ε))
736 <span class="blue">Max = 1.95ε (Mean = 0.418ε)</span>
741 <span class="blue">Max = 1.21ε (Mean = 0.394ε)</span>
753 <span class="blue">Max = 0ε (Mean = 0ε)</span><br> <br> (<span class="emphasis"><em>GSL
754 2.1:</em></span> Max = 1.29ε (Mean = 0.527ε))
759 <span class="blue">Max = 0.894ε (Mean = 0.338ε)</span>
764 <span class="blue">Max = 0.999ε (Mean = 0.407ε)</span>
776 <span class="blue">Max = 0ε (Mean = 0ε)</span><br> <br> (<span class="emphasis"><em>GSL
777 2.1:</em></span> Max = 2.54ε (Mean = 0.781ε))
782 <span class="blue">Max = 1.7ε (Mean = 0.539ε)</span>
787 <span class="blue">Max = 1.89ε (Mean = 0.587ε)</span>
794 <br class="table-break"><div class="table">
795 <a name="math_toolkit.ellint.ellint_carlson.table_ellint_rj"></a><p class="title"><b>Table 8.62. Error rates for ellint_rj</b></p>
796 <div class="table-contents"><table class="table" summary="Error rates for ellint_rj">
808 GNU C++ version 7.1.0<br> linux<br> double
813 GNU C++ version 7.1.0<br> linux<br> long double
818 Microsoft Visual C++ version 14.1<br> Win32<br> double
831 <span class="blue">Max = 0.52ε (Mean = 0.0184ε)</span><br> <br>
832 (<span class="emphasis"><em>GSL 2.1:</em></span> Max = 3.57ε (Mean = 0.704ε) <a class="link" href="../logs_and_tables/logs.html#errors_GNU_C_version_7_1_0_linux_double_ellint_rj_GSL_2_1_RJ_Random_data">And
838 <span class="blue">Max = 186ε (Mean = 6.67ε)</span>
843 <span class="blue">Max = 215ε (Mean = 7.66ε)</span>
855 <span class="blue">Max = 0ε (Mean = 0ε)</span><br> <br> (<span class="emphasis"><em>GSL
856 2.1:</em></span> Max = 1.03ε (Mean = 0.418ε))
861 <span class="blue">Max = 0.998ε (Mean = 0.387ε)</span>
866 <span class="blue">Max = 1.03ε (Mean = 0.418ε)</span>
878 <span class="blue">Max = 0ε (Mean = 0ε)</span><br> <br> (<span class="emphasis"><em>GSL
879 2.1:</em></span> Max = 3.96ε (Mean = 1.06ε))
884 <span class="blue">Max = 20.8ε (Mean = 0.986ε)</span>
889 <span class="blue">Max = 39.9ε (Mean = 1.17ε)</span>
901 <span class="blue">Max = 0.6ε (Mean = 0.0228ε)</span><br> <br>
902 (<span class="emphasis"><em>GSL 2.1:</em></span> Max = 2.57ε (Mean = 0.754ε))
907 <span class="blue">Max = 220ε (Mean = 6.64ε)</span>
912 <span class="blue">Max = 214ε (Mean = 5.28ε)</span>
924 <span class="blue">Max = 0.742ε (Mean = 0.0166ε)</span><br>
925 <br> (<span class="emphasis"><em>GSL 2.1:</em></span> Max = 2.62ε (Mean = 0.699ε))
930 <span class="blue">Max = 17.2ε (Mean = 1.16ε)</span>
935 <span class="blue">Max = 16.1ε (Mean = 1.14ε)</span>
942 <br class="table-break"><h5>
943 <a name="math_toolkit.ellint.ellint_carlson.h4"></a>
944 <span class="phrase"><a name="math_toolkit.ellint.ellint_carlson.implementation"></a></span><a class="link" href="ellint_carlson.html#math_toolkit.ellint.ellint_carlson.implementation">Implementation</a>
947 The key of Carlson's algorithm [<a class="link" href="ellint_intro.html#ellint_ref_carlson79">Carlson79</a>]
948 is the duplication theorem:
950 <div class="blockquote"><blockquote class="blockquote"><p>
951 <span class="inlinemediaobject"><img src="../../../equations/ellint13.svg"></span>
953 </p></blockquote></div>
955 By applying it repeatedly, <span class="emphasis"><em>x</em></span>, <span class="emphasis"><em>y</em></span>,
956 <span class="emphasis"><em>z</em></span> get closer and closer. When they are nearly equal,
957 the special case equation
959 <div class="blockquote"><blockquote class="blockquote"><p>
960 <span class="inlinemediaobject"><img src="../../../equations/ellint16.svg"></span>
962 </p></blockquote></div>
964 is used. More specifically, <span class="emphasis"><em>[R F]</em></span> is evaluated from
965 a Taylor series expansion to the fifth order. The calculations of the other
966 three integrals are analogous, except for R<sub>C</sub> which can be computed from elementary
970 For <span class="emphasis"><em>p < 0</em></span> in <span class="emphasis"><em>R<sub>J</sub>(x, y, z, p)</em></span>
971 and <span class="emphasis"><em>y < 0</em></span> in <span class="emphasis"><em>R<sub>C</sub>(x, y)</em></span>, the integrals
972 are singular and their <a href="http://mathworld.wolfram.com/CauchyPrincipalValue.html" target="_top">Cauchy
973 principal values</a> are returned via the relations:
975 <div class="blockquote"><blockquote class="blockquote"><p>
976 <span class="inlinemediaobject"><img src="../../../equations/ellint17.svg"></span>
978 </p></blockquote></div>
979 <div class="blockquote"><blockquote class="blockquote"><p>
980 <span class="inlinemediaobject"><img src="../../../equations/ellint18.svg"></span>
982 </p></blockquote></div>
984 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
985 <td align="left"></td>
986 <td align="right"><div class="copyright-footer">Copyright © 2006-2019 Nikhar
987 Agrawal, Anton Bikineev, Paul A. Bristow, Marco Guazzone, Christopher Kormanyos,
988 Hubert Holin, Bruno Lalande, John Maddock, Jeremy Murphy, Matthew Pulver, Johan
989 Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg,
990 Daryle Walker and Xiaogang Zhang<p>
991 Distributed under the Boost Software License, Version 1.0. (See accompanying
992 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>)
997 <div class="spirit-nav">
998 <a accesskey="p" href="ellint_intro.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ellint.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="ellint_1.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>