![]() |
Home | Libraries | People | FAQ | More |
#include <boost/math/special_functions/hermite.hpp>
namespace boost{ namespace math{ template <class T> calculated-result-type hermite(unsigned n, T x); template <class T, class Policy> calculated-result-type hermite(unsigned n, T x, const Policy&); template <class T1, class T2, class T3> calculated-result-type hermite_next(unsigned n, T1 x, T2 Hn, T3 Hnm1); }} // namespaces
函數返回值的類型使用返回值推導法則:來確定,注意,如果有一個單一的模板參數,那麼結果的類型與這個模板參數的類型一樣;或者,如果模板參數的類型為整型,那麼結果的類型為double。
template <class T> calculated-result-type hermite(unsigned n, T x); template <class T, class Policy> calculated-result-type hermite(unsigned n, T x, const Policy&);
返回在點x處的n次哈爾米特多項式值:
最後一個策略 參數是可選的並且可以用來控制函數的行為: 如何處理錯誤, 使用哪種層次的精度等等. 參見策略文檔瞭解更多信息。
下面的圖像顯示了最開始的一些哈爾米特多項式的特性:
template <class T1, class T2, class T3> calculated-result-type hermite_next(unsigned n, T1 x, T2 Hn, T3 Hnm1);
實現針對於哈爾米特多項式的遞推關係,這個函數可以用來生成在同一個點x處增長n值的數列。
例如我們可以使用下面的代碼來產生最開始的10個多項式值的數組:
double x = 0.5; // 橫坐標值 vector<double> v; v.push_back(hermite(0, x)).push_back(hermite(1, x)); for(unsigned l = 1; l < 10; ++l) v.push_back(hermite_next(l, x, v[l], v[l-1]));
形式上,參數為:
最後一個計算的多項式的次數n.
橫坐標值
多項式在次數為 n時的值.
多項式在次數n-1為時的值
下面的表顯示了參數的不同定義域的峰值誤差(單位為10的-5次方)。注意,在那些由寬浮點類型來給定窄浮點類型的系統上會有有效的零誤差.
表4.哈爾米特多項式的峰值誤差
|
有效數字位數 |
平台和編譯器 |
在 0 < l < 20 中的誤差 |
|---|---|---|
|
53 |
Win32, Visual C++ 8 |
峰值=4.5 均值=1.5 |
|
64 |
Red Hat Linux IA32, g++ 4.1 |
峰值=6 均值=2 |
|
64 |
Red Hat Linux IA64, g++ 3.4.4 |
峰值=6 均值=2 |
|
113 |
HPUX IA64, aCC A.06.06 |
峰值=6 均值=4 |
注意:當次數增長時出現最壞誤差,大於 ~120 的值似乎不能產生有意義的結果,尤其是當相關的多項式的次數很大時。當函數非常接近於一個根時,相對誤差可能增長到任意大。
混合的抽樣測試使用 functions.wolfram.com產生的數據, 而隨機測試數據使用精度為1000-bit的NTL::RR 庫產生的數據。
這些函數使用穩定的三項遞推關係來實現。這些函數可以保證小的絕對誤差,但是在多項式的根的附近不能保證小的相對誤差。