Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext

第二類橢圓積分 - 勒讓德形式

概要

#include <boost/math/special_functions/ellint_2.hpp>

namespace boost { namespace math {

template <class T1, class T2>
calculated-result-type ellint_2(T1 k, T2 phi);

template <class T1, class T2, class Policy>
calculated-result-type ellint_2(T1 k, T2 phi, const Policy&);

template <class T>
calculated-result-type ellint_2(T k);

template <class T, class Policy>
calculated-result-type ellint_2(T k, const Policy&);

}} // namespaces
說明

這兩個函數計算第二類不完全橢圓積分E(φ, k)以及完全橢圓積分E(k) = E(π/2, k).

當T1和T2是不同類型的時候,這些函數的返回值的類型使用返回值類型推導法則 來確定: 如果它們是同一種類型,那麼返回值的類型和參數的類型是一樣的.

template <class T1, class T2>
calculated-result-type ellint_2(T1 k, T2 phi);

template <class T1, class T2, class Policy>
calculated-result-type ellint_2(T1 k, T2 phi, const Policy&);

返回第二類不完全橢圓積分E(φ, k):

要求 -1 <= k <= 1, 否則返回定義域錯誤.

最後一個策略 參數是可選的並且可以用來控制函數的行為: 如何處理錯誤, 使用哪種層次的精度等等. 參見策略文檔瞭解更多信息。

template <class T>
calculated-result-type ellint_2(T k);

template <class T>
calculated-result-type ellint_2(T k, const Policy&);

返回第二類不完全橢圓積分E(k):

要求 -1 <= k <= 1, 否則返回定義域錯誤.

最後一個策略 參數是可選的並且可以用來控制函數的行為: 如何處理錯誤, 使用哪種層次的精度等等. 參見策略文檔瞭解更多信息。

精確性

這個函數使用基本的算術運算來計算, 因此運算結果在不同的平台上並沒有太多的差異. 注意:在那些將寬浮點類型給定為窄浮點類型的系統上,函數的返回值具有有效的零誤差. 所有結果的相對誤差都是10的-5次方數量級。

表42.第二類橢圓積分的出錯率

有效數字位數

平台和編譯器

F(φ, k)

K(k)

53

Win32 / Visual C++ 8.0

峰值=4.6 均值=1.2

峰值=3.5 均值=1.0

64

Red Hat Linux / G++ 3.4

峰值=4.3 均值=1.1

峰值=4.6 均值=1.2

113

HP-UX / HP aCC 6

峰值=5.8 均值=2.2

峰值=10.8 均值=2.3


測試

這些混合的抽查測試數據使用functions.wolfram.com的在線計算器計算,隨機測試數據使用1000 bit 的NTL::RR 庫以及這個庫的實現來生成。

實現

這些函數基於卡爾松(Carlson) 積分並使用下面的關係:


PrevUpHomeNext