2010-04-11 79 views
3

求解包含digamma函數的方程組的最有效方法是什麼?求解包含digamma函數的方程組的最有效方法是什麼?

我有一個向量v和我要解決一個向量w,使得對於所有的i:

digamma(總和(W)) - digamma(w_i)= V_I

w_i> 0

我發現gsl函數gsl_sf_psi,它是digamma函數(使用某種系列計算)。是否有可用於減少方程的標識?我最好使用求解器嗎?我正在使用C++ 0x;哪個求解器最容易使用和快速?


從我初步的研究,digamma不容易可逆(逆digamma搜索給出了由二進制搜索算法的工作),因此它是有道理的,就沒有簡化整個系統。

因此,使用求解器現在會留下兩個問題:處理digamma計算速度非常慢的事實,並且處理w_i> 0的限制,否則digamma(w_i)將會崩潰w_i = 0。

對於第一個問題,我想也許我應該爲最近計算出的digamma值實現一個緩存 - 我認爲這將是一個好主意,但不太瞭解如何找到根算法。

我的想法是解決第二個問題是找到w'_i = log(w_i)。那樣,w'_i就是全線。我想知道這是不是一個好主意。可能沒有函數直接找到digamma(exp(w'))?此外,該算法可能在w'空間中採取步驟並且不會改進,因爲從w' - > w的映射失去一些精度,因此w'的兩個元素可能映射到相同的w。

仍然存在尋找一個好的快速尋根算法的問題。我想我可以在另一個問題上提出這個問題。

謝謝...

+1

不知道,但你會得到更好的答案在http://mathoverflow.net/,然後回到這裏對算法的具體問題? – 2010-04-11 04:40:58

+0

感謝您花時間回答。我已經更新了這個問題。 – 2010-04-11 18:31:09

+0

不錯,感謝您對問題的更新,讓我深入瞭解如何解決這些系統問題,以及我可以期待的問題。順便說一句,我相信你已經知道這一點,但GSL也有根發現算法:) – Akanksh 2010-04-14 07:25:23

回答

1

我會建議使用解算器將是最好的想法,主要是因爲考慮到各種方程的各種穩定性和收斂區域可能會非常棘手,這是沒有用的重新發明輪子。雖然我從來沒有真正解決像你提到的一個系統,我認爲以下庫之一極有可能有你想辦法解決:

此外,如果這些都不完全是你想要的,你可以看到GNU Octave或類似的東西如何解決這個系統,然後閱讀它們有關它們用來實現解決它所需功能的算法的文檔。從那裏開始,更多的是瞭解如何使用算法,如何實現它,以及在哪些情況下是值得的(Octave,Matlab,Mathematica的文檔非常全面,並列出了大多數情況下定義算法的出版物) ,如果你正在尋找開源/免費的替代品,也有Scilab和SageMath,並且有很多方法可以在C++中使用這些例程(但我不確定這將是多麼容易或困難)

希望幫助。

+0

我用gsl。謝謝。 – 2010-04-13 20:32:00

相關問題