Как контролировать точность чисел с плавающей точкой в ​​SymPy? - PullRequest
0 голосов
/ 22 марта 2020

Я подготовил расширенную матрицу следующим образом:

A = np.round(10*np.random.randn(5,5))
I = np.eye(5)
AI = np.hstack((A, I))
AI = sy.Matrix(AI)
AI

enter image description here

Теперь выполните алгоритм с уменьшенной строкой, у результата обратной матрицы много лотов цифр после точки, кто-нибудь может рассказать мне, как контролировать точность матричного объекта в SymPy?

AI_rref = AI.rref()
Ainv = AI_rref[0][:,5:]
Ainv

enter image description here

1 Ответ

3 голосов
/ 22 марта 2020

Вы можете использовать applyfunc, чтобы применить округление к данному ди git или evalf / n, чтобы получить определенное количество значащих цифр.

>>> from sympy import randMatrix
>>> m = (randMatrix(3,3).row_join(eye(3))).rref()[0]
>>> m.applyfunc(lambda x: round(x, 3))
Matrix([
[1, 0, 0,  0.004, -0.022,  0.016],
[0, 1, 0,  0.015,  0.001, -0.006],
[0, 0, 1, -0.022,  0.027,    0.0]])
>>> m.n(3)
Matrix([
[1.0,   0,   0, 0.00404,  -0.0225,    0.016],
[  0, 1.0,   0,  0.0149, 0.000538, -0.00604],
[  0,   0, 1.0, -0.0216,   0.0268, 0.000228]])
...