Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext

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

概要

#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 <= 1n < 1/sin2(φ), 否則返回定義域錯誤 (在這個範圍之外結果將會很複雜).

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

[Caution] 注意

此外, 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 <= 1n < 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]範圍之內的等式也不再可用。


PrevUpHomeNext