2013-01-11 97 views
-1

從其他一些信息,如:How to handle big integers in C我知道,GMP是一個包,使我能夠處理大整數。如何計算巨大元素大小的休矩陣逆?

但是,我正在考慮500個矩陣,其中每個元素的長度都是1000位。 有人可以讓我知道在C或Python中的哪個包可以讓我計算矩陣逆?

+0

我會爲此使用MatLab。 –

+0

我也用matlab來驗證答案,但我目前需要一些C或Python實現 – user4478

+1

這個問題需要一個更好的問題和預期解決方案的定義。答案可能很簡單,就像「計算IEEE 754浮點數的矩陣並使用一個標準的線性代數包」一樣簡單:這一切都取決於矩陣的性質以及您願意計算的解決方案中的錯誤接受。 –

回答

0

我不確定你的問題,如果你正在嘗試使用1000位精度的浮點數來計算逆,或者如果你想使用分數。

對於前者,我會嘗試組合mpmathgmpy。以下示例將創建一個100位精度的隨機3x3矩陣並計算其倒數。

>>> from mpmath import * 
>>> mp.prec = 100 
>>> a = randmatrix(3) 
>>> a**-1 
matrix(
[['-2.9551532644739824344170194538', '-2.30592481828272627130234272', '4.618043964228917637573009707'], 
['12.025269724235234315848646394', '3.3570351961866008157001332066', '-10.59068013761452569858474265'], 
['-6.672524995207041946321450867', '-0.57061969261482431665347164675', '5.508560423258977568243759022']]) 
>>> a * a**-1 
matrix(
[['1.0', '-3.8920288101260775500720697474e-34', '5.467369412738327810686299975e-34'], 
['-2.0267823641769153744296258652e-33', '1.0', '-1.4939276515262026082238333732e-33'], 
['-2.1979577599335336964264104571e-33', '-6.0264087812469052430270713117e-34', '1.0']]) 
>>> 

注意:mpmath 0.17只適用於gmpy。要使用gmpy2(下一個主要版本),您將需要使用mpmath的源代碼庫。

如果你想要一個確切的理性逆,你可以嘗試sympy。我會擔心分數的大小會增加,並且會比浮點數的倒數慢得多。 sympy在幕後使用mpmath和gmpy。

1

正如casevh指出的,這很大程度上取決於您是否想要一個近似答案或確切答案。

可能適用於計算此大小矩陣的精確反轉的C庫包括FLINT,PARIIML。 FLINT藉此長以反轉由n個整數矩陣的隨機n,其中1000位條目:

N = 13:1.6秒

N = 62:37秒

N = 125:858秒

因此n = 500應該花費大約120個小時。