有没有可能在Python中实现更高精度的矩阵指数?我的意思是获得比双浮点数更高的精度。在
我有以下测试代码:
import sympy
from sympy import N
import random
n = 100
#A = sympy.Matrix([[random.random(),random.random()],
# [random.random(),random.random()]])
A = sympy.Matrix([[1,2],[3,4]])
dlt = 1000
e1 = A.exp()
e1 = N(e1, n)
ee2 = (A/dlt).exp()
ee2 = N(ee2, n)
e2 = sympy.eye(2)
for i in range(dlt):
e2 = e2*ee2
print(N(max(e1-e2)))
理论上,最终结果应该是零。对于scipy,误差大约为1e-14。在
通过sympy,如果矩阵是[[1,2],[3,4]],则前面的代码输出约为1e-98。然而,对于随机矩阵,误差在1e-14左右。 随机矩阵有可能得到1e-100这样的结果吗?在
速度不是问题。在
一旦您使用
N
,您就进入了浮点运算的领域,因此您永远不能假设您将达到绝对零。这是所有浮点运算的情况,如here和许多其他地方所讨论的那样。唯一可靠的解决方案是包含一个适当选择的eps
变量和一个要检查的函数。在因此,与其检查
result == 0
,不如定义isZero = lambda val: abs(val) < eps
并检查isZero(result)
。在这是浮点运算中的一个普遍问题。原则上,使用
sympy
,您可以找到实零,因为它是一个代数库,而不是浮点数学库。但是,在您给出的示例中,不使用N
(它将转换为浮点运算),这会使计算非常慢。在我在学数学时出错了。 我又试了一次mpmath,它是这个问题的完美解决方案。在
相关问题 更多 >
编程相关推荐