如何在python中实现更高精度的矩阵指数?

2024-07-04 16:31:58 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有可能在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这样的结果吗?在

速度不是问题。在


Tags: import精度矩阵random指数matrix误差sympy
2条回答

一旦您使用N,您就进入了浮点运算的领域,因此您永远不能假设您将达到绝对零。这是所有浮点运算的情况,如here和许多其他地方所讨论的那样。唯一可靠的解决方案是包含一个适当选择的eps变量和一个要检查的函数。在

因此,与其检查result == 0,不如定义isZero = lambda val: abs(val) < eps并检查isZero(result)。在

这是浮点运算中的一个普遍问题。原则上,使用sympy,您可以找到实零,因为它是一个代数库,而不是浮点数学库。但是,在您给出的示例中,不使用N(它将转换为浮点运算),这会使计算非常慢。在

我在学数学时出错了。 我又试了一次mpmath,它是这个问题的完美解决方案。在

相关问题 更多 >

    热门问题