2012-02-29 291 views
7

我試圖以四倍精度對角化矩陣,並取其對數。有沒有一種語言可以使用內置函數完成此操作?四元精度特徵值,特徵向量和矩陣對數

注意,語言/在標籤封裝不足,從以下不足的痛苦:

Matlab的:不支持四精度。

Python/NumPy/SciPy:使用dtype float128的矩陣產生float64中的特徵向量。

Sage:通過GP/PARI接口產生隱蔽的錯誤信息。

有沒有人執行過對角化和矩陣對數來精確四捨五入,如果是這樣,怎麼樣?

+2

試試這個:[http://code.google.com/p/mpmath/](http://code.google.com/p/mpmath/) – 2012-02-29 00:44:25

+2

我忘了提前說過,mpmath不支持多個精確對角化和矩陣函數。不過,它幾乎可以做任何其他事情。 – 2012-02-29 15:23:49

+0

@BenCriger - 我認爲numpy的基本問題是,大多數BLAS實現不支持128位浮點精度。 – 2012-02-29 17:52:30

回答

8

@Matlab:不支持四倍精度。

Multiprecision Computing Toolbox for MATLAB爲任意精度的線性代數計算提供了例程。它涵蓋了許多其他領域 - 基礎數學,數值方法(積分,賦值,優化),特殊功能和基礎數據分析。

除此之外,它允許以任意精度運行現有的Matlab程序,只需對源代碼進行最少(或無任何)修改。

更新(2013年3月27日):現在工具箱中還包括快四精度模式,相較於替代品是快了近100倍。請參閱Fast Quadruple Precision Computations in MATLAB進行比較和詳細信息。


評論家對建議的替代:

符號數學工具箱(MATLAB)從Mathworks公司針對符號計算。因此它缺少任意精確數值計算所需的許多基本特徵。

例如,甚至不可能比較兩個vpa()數字,因爲它們是「符號」類型(按設計)。這個唯一的限制從數值分析中排除了99%的算法。

符號數學工具箱中缺少的其他基本線性代數函數爲:norm, cond, max, min, sort, lu, qr, chol, schur

免費多精度工具箱(MATLAB)。除了速度非常慢(它在每個算術運算上執行操作數的數字到字符串轉換:+, -, ...)並且缺少基本功能(eig, det, cond, \, ...)之外,它在它所具有的函數中給出了錯誤的結果。

E.g. svd函數提供的不正確的結果使得我的研究在某個時間點毫無意義,錯誤很難找到。

mpmath(Python)的

主要針對特殊功能的計算(超幾何家人尤其是)。並且不支持或多或少先進的數值算法。對矩陣的支持很少。雖然似乎有矩陣對數你正在尋找最新版本。


其實所有這些缺點把我推到開發自己的擴展MATLAB與任意精度計算(開頭提到 - Multiprecision Computing Toolbox for MATLAB)啓用它。我只需要它爲我的工作。

它正處於積極的發展階段(但已經解決了所有列出的問題與其他選擇) - 我會很感激任何反饋。

2

關於對角化,也許this可以幫助你(他還需要更多的準確的特徵值比雙倍給予他,並最終使用四倍精度)。

他正在使用fortran。更改爲四邊形涉及將整數定義爲16而不是8,並使用gfortran使用「-fdefault-real-8」將LAPACK重新編譯爲四元組。 ¿也許你可以像這樣構建LAPACK,然後在NumPy中使用它?我不知道。

當然,由於這個精度實際上是模擬的,所以程序慢了10倍。

對不起,我沒有嘗試過這樣的東西,但我記起了這篇博客文章,它可能足以讓您至少上手。