我的工作涉及計算大變量值下的高階貝塞爾函數。在MATLAB中,這樣做沒有問題。然而,爲了擴大這個問題,我調整了使用MPI編寫C++代碼。當然,通過調用一些庫來完成生成bessel函數的步驟。爲了把問題具體化,讓我考慮這個非常具體的錯誤。具有大變量的高階貝塞爾函數計算
在MATLAB中,假設我希望計算$ J_46341(86840.0)$,並
matlab gives me: besselj(46341,86840)=0.001309896212292
但是,一個簡單的測試例子調用
gsl_sf_bessel_Jn_e returns "ERROR: NaN"
,我在訂單46340已經檢查, matlab和gsl在可接受的精度範圍內返回相同的答案0.00292895。 GSL的另一個步驟導致NaN錯誤,而matlab仍然保留一個準確的數字答案。
我嘗試使用遞歸關係來生成更高階的值,從一個不是很小的順序,比如從20000開始,然而,這隻會延遲NaN錯誤而不能完全解決問題。
交換我的注意力轉移到其他可用的軟件庫在那裏,我試過NAG,但令我徹底失望,
nag_bessel_j_alpha (s18ekc) has constraint of abs(nl)<=101
,換句話說,它只能計算出高達101秩序,這顯然是不符合我的學習興趣。
所以,我的問題很簡單:
Is there a more reliable library approach to obtain high order bessel function value for large x?
漸近,貝塞爾函數接近0,我一定能夠設置這些值爲零,如果尾巴接近極限下溢。然而,NaN問題似乎在強烈的振盪曲線和漸近衰減的尾部之間發生。
爲什麼不自己計算功能? – marsei
使用bessel函數的遞歸關係不會幫助我進一步。事實上,隨着訂單的增加,與使用GSL庫例程相比,它的分解速度要快得多。 –
@macduf當然你不是指手。 – erip