确保矩阵方程找到平凡解
我正在尝试用numpy解决一个矩阵方程 $Ax = b$(实际上我在用 scipy.sparse
,但我觉得问题是一样的)。在我的设置中,$b$ 是某个函数的导数。
在我的系统中,有可能方程有时会变成 $Ax = 0$,在这种情况下,我希望得到一个全是零的向量。当我尝试用浮点数的向量来做这个时,得到的结果是一个值大约在 e-22
附近的向量。这在后续的时间步中会造成混乱,并且在应该是稳定状态的时候会出现奇怪的数值现象。当我手动把右边的向量设为全是0的整数时,我得到的结果是一个完全为零的向量。
我该如何做到这一点,而不需要手动检查向量是否全是零,并在是的情况下转换为整数呢?
非常感谢
1 个回答
1
我会用 np.all
来检查数组中的每个值是否都低于某个容忍值。如果都是这样的话,就把它转换成一个真正的零值向量:
import numpy as np
a = np.array([1e-22, 2e-21])
print(a) # [1.e-22, 2.e-21]
tolerance = 1e-20
if np.all(np.absolute(a) < tolerance):
a = np.zeros(a.shape)
print(a) # [0., 0.]