不稳定性希尔伯特矩阵单位向量



H(n)n阶的希尔伯特矩阵。

e = (0,...,0,1)为单位向量。

e_im := H(n) * e

我使用一些计算机代数系统求解H(n) * x_1 = e_im

设CCD_ 6为小随机向量。

(e + r)_im := H(n) * (e + r)

我使用一些计算机代数系统求解H(n) * x_2 = (e + r)_im

为什么树脂|| H(n) * x_1 - e_im ||这么小,而|| H(n) * x_2 - (e + r)_im||这么大?

我使用numpy和scipy.linarg,我的代码:

H = scipy.linalg.hilbert(500)
e = numpy.zeros((500, 1))
e[499] = 1
e_im = H.dot(e)
x_1 = scipy.linalg.solve(H, e_im)
r = 0.0001 * numpy.random.rand(500, 1)
e_plusr_im = e + r
x_2 = scipy.linalg.solve(H, e_plusr_im)
Residials = [scipy.linalg.norm(H.dot(x_1) - b_1, 2), scipy.linalg.norm(H.dot(x_2) - b_2, 2)]

这是众所周知的数值线性代数现象(参见大多数线性代数课程材料)。

矩阵的条件数CCD_ 11告诉在一般情况下矩阵反转放大了多少误差。此处:

>>> import scipy.linalg
>>> import numpy as np
>>> H = scipy.linalg.hilbert(500)
>>> np.linalg.cond(H)
4.6335026663215786e+20

根据经验,对于64位浮点,(确定性)浮点误差具有相对幅度1e-16。条件数太大,导致的误差相对大小>1,因此,除非你运气好,并且解和中间计算有精确的浮点表示,否则你可能会因此而失去所有精度。如果手动添加噪声,它也会被放大。

相关内容

  • 没有找到相关文章

最新更新