是否可以在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。
通过同意,如果矩阵类似于[[1,2],[3,4]],则前面代码的输出大约是1e-98。但是,对于随机矩阵,误差约为1e-14。 对于随机矩阵,是否有可能得到像1e-100这样的结果?
速度无关紧要。
答案 0 :(得分:0)
使用java.lang.UnsatisfiedLinkError
后,您处于浮点运算领域,因此您永远不会假设您将达到绝对零度。所有浮点运算都是这种情况,如here和其他许多地方所讨论的那样。唯一可靠的解决方案是包含一个适当选择的N
变量和一个要检查的函数。
因此,不要检查eps
定义result == 0
并检查isZero = lambda val: abs(val) < eps
。
这是浮点运算中的普遍问题。原则上,使用isZero(result)
,您可以找到真正的零,因为它是代数库,而不是浮点数学库。但是,在您给出的示例中,不使用sympy
(这是切换到浮点运算)会使计算速度极慢。
答案 1 :(得分:0)
我在尝试mpmath时犯了一个错误。 我再次尝试过mpmath,它是解决这个问题的完美解决方案。