我已經矩陣A
和右手側矢量y
的術語來表達fractions.Fraction
對象:線性系統解決方案
import random, fractions, numpy as np
A = np.zeros((3, 3), dtype=fractions.Fraction)
y = np.zeros((3, 1), dtype=fractions.Fraction)
for i in range(3):
for j in range(3):
A[i, j] = fractions.Fraction(np.random.randint(0, 4), np.random.randint(1, 6))
y[i] = fractions.Fraction(np.random.randint(0, 4), np.random.randint(1, 6))
我想使用所提供的功能中,以解決系統A*x = y
numpy
並獲得分數的對象表達的結果,但不幸的是基本x = np.linalg.solve(A, y)
返回結果的標準浮點值:
>>> np.linalg.solve(A, y)
array([[-1.5245283 ],
[ 2.36603774],
[ 0.56352201]])
是有一種方法可以獲得分數對象的精確結果嗎?
編輯
我想這樣做是不與numpy的的內置功能(如1.10版本 - 看瘋物理學家的回答)是可行的。可以做的是基於高斯消除來實現他/她自己的線性求解器,該求解器依賴於總和,減法,乘法和除法,所有這些都是精確定義的,並且與分數對象一起執行(只要分子和分母符合在我認爲是任意長的數據類型中)。
如果您真的對此感興趣,只需自己實施一個求解器,它將很容易和快速地完成(在線學習衆多教程之一)。我沒那麼感興趣,所以我會堅持浮點結果。
您的矩陣總是3x3還是隻是偶然?如果它始終是3x3,則可以在最差情況下手動對矩陣進行反碼。 –
當我嘗試運行'np.linalg.solve(A,y)'行時,我實際上遇到錯誤。你是如何得到它的工作? Numpy提供了以下錯誤:'TypeError:沒有找到與指定簽名相匹配的循環,並且爲ufunc solve'找到了鑄造 。我在scipy中嘗試了類似的代碼,它給出了'ValueError:對象數組不支持'。 –
矩陣很小,但其大小是可變的。說不大於10x10。我也知道毛皮確定它是非單一的。 – Spiros