![]() |
Home | Libraries | People | FAQ | More |
#include <boost/math/special_functions/ellint_3.hpp>
namespace boost { namespace math { template <class T1, class T2, class T3> calculated-result-type ellint_3(T1 k, T2 n, T3 phi); template <class T1, class T2, class T3, class Policy> calculated-result-type ellint_3(T1 k, T2 n, T3 phi, const Policy&); template <class T1, class T2> calculated-result-type ellint_3(T1 k, T2 n); template <class T1, class T2, class Policy> calculated-result-type ellint_3(T1 k, T2 n, const Policy&); }} // namespaces
這兩個函數計算第三類不完全橢圓積分Π(n, φ, k) 以及第三類完全橢圓積分 Π(n, k) = E(n, π/2, k).
當T1和T2是不同類型的時候,這些函數的返回值的類型使用返回值類型推導法則 來確定: 如果它們是同一種類型,那麼返回值的類型和參數的類型是一樣的.
template <class T1, class T2, class T3> calculated-result-type ellint_3(T1 k, T2 n, T3 phi); template <class T1, class T2, class T3, class Policy> calculated-result-type ellint_3(T1 k, T2 n, T3 phi, const Policy&);
返回第三類不完全橢圓積分Π(n, φ, k):
要求-1 <= k <= 1 且 n < 1/sin2(φ), 否則返回定義域錯誤 (在這個範圍之外結果將會很複雜).
最後一個策略 參數是可選的並且可以用來控制函數的表現: 如何處理錯誤, 使用哪種層次的精度等等. 參見策略文檔瞭解更多信息。
![]() |
注意 |
|---|---|
此外, n > 1 且 φ不在 [0, π/2]範圍之內的區域暫時沒有得到支持且返回定義域錯誤. 因為這個原因,推薦你將φ的範圍保持在 [0, π/2]這間。 |
template <class T1, class T2> calculated-result-type ellint_3(T1 k, T2 n); template <class T1, class T2, class Policy> calculated-result-type ellint_3(T1 k, T2 n, const Policy&);
返回第三類完全橢圓積分Π(n, k):
要求-1 <= k <= 1 且 n < 1, 否則返回定義域錯誤 (在這個範圍之外的結果將會十分複雜).
[可選的策略]
這個函數使用基本的算術運算來計算, 因此運算結果在不同的平台上並沒有太多的差異. 注意:在那些將寬浮點類型給定為窄浮點類型的系統上,函數的返回值具有有效的零誤差. 所有結果的相對誤差都是10的-5次方數量級。
表43.第三類橢圓積分的出錯率
|
有效數字位數 |
平台和編譯器 |
Π(n, φ, k) |
Π(n, k) |
|---|---|---|---|
|
53 |
Win32 / Visual C++ 8.0 |
峰值=29 均值=2.2 |
峰值=3 均值=0.8 |
|
64 |
Red Hat Linux / G++ 3.4 |
峰值=14 均值=1.3 |
峰值=2.3 均值=0.8 |
|
113 |
HP-UX / HP aCC 6 |
峰值=10 均值=1.4 |
峰值=4.2 均值=1.1 |
這些混合的抽查測試數據使用functions.wolfram.com的在線計算器計算,隨機測試數據使用1000 bit 的NTL::RR 庫以及這個庫的實現來生成。
Π(n, φ, k) 的實現首先將特殊情況排除在外:
Π(0, φ, k) = F(φ, k)
Π(n, π/2, k) = Π(n, k)
且
那麼如果 n < 0 ,關係 (A&S 17.7.15/16):
用於將 n 調整到範圍 [0, 1]之內。
然後下面的關係:
Π(n, -φ, k) = -Π(n, φ, k)
Π(n, φ+mπ, k) = Π(n, φ, k) + 2mΠ(n, k)
用於將 φ 調整到範圍 [0, π/2]之內。
然後這些函數基於卡爾松(Carlson)積分並使用下面的關係:
且
剩下的問題區域出現在 n > 1 且 φ 在範圍 [0, π/2]之外.在這個範圍之內,對於大數 φ 的歸約公式不再成立. 類似地 ,17.7.7/8 in A&S 中將n調整到 [0,1]範圍之內的等式也不再可用。