Tôi đã matrix A
và một tay bên phải vector y
bày tỏ về fractions.Fraction
đối tượng:giải pháp tuyến tính hệ thống với phân số trong NumPy
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))
tôi muốn giải quyết hệ thống A*x = y
sử dụng các chức năng được cung cấp trong numpy
và có được một kết quả được thể hiện trong các đối tượng phân số, nhưng tiếc là cơ bản x = np.linalg.solve(A, y)
trả về kết quả trong các giá trị dấu chấm động tiêu chuẩn:
>>> np.linalg.solve(A, y)
array([[-1.5245283 ],
[ 2.36603774],
[ 0.56352201]])
Is có một cách để có được kết quả chính xác với các đối tượng phân số không?
EDIT
Những gì tôi muốn làm chỉ là không khả thi với built-in chức năng của NumPy (như các phiên bản 1.10 - xem câu trả lời của Mad Nhà vật lý học). Những gì người ta có thể làm là triển khai bộ giải tuyến tính của riêng mình dựa trên loại trừ Gauss, dựa vào tổng, trừ, nhân và chia, tất cả đều được xác định và thực hiện chính xác với các đối tượng phân số (miễn là tử số và mẫu số phù hợp trong kiểu dữ liệu, mà tôi nghĩ là tùy ý lâu dài).
Nếu bạn thực sự quan tâm đến việc này, chỉ cần thực hiện một người giải quyết chính mình, nó sẽ được dễ dàng và nhanh chóng để làm (theo một trong nhiều hướng dẫn trực tuyến). Tôi không hứng thú lắm, nên tôi sẽ dính vào kết quả điểm nổi.
Ma trận của bạn luôn 3x3 hay chỉ là ngẫu nhiên? Nếu nó luôn luôn là 3x3, bạn có thể mã lên nghịch đảo ma trận bằng tay trong trường hợp xấu nhất. –
Tôi thực sự gặp lỗi khi cố gắng chạy dòng 'np.linalg.solve (A, y)'. Làm thế nào bạn có được nó để làm việc? Numpy cung cấp cho các lỗi sau: 'TypeError: Không có vòng lặp phù hợp với chữ ký được chỉ định và đúc đã được tìm thấy cho ufunc giải quyết'. Tôi đã thử mã tương tự trong scipy và nó cho 'ValueError: mảng đối tượng không được hỗ trợ'. –
Ma trận là nhỏ, nhưng kích thước của nó là biến. Nói không lớn hơn 10x10. Tôi cũng biết lông chắc chắn nó không phải là số ít. – Spiros