首先我通過使用numpy.linalg.eigvalsh
找到(4000x4000)矩陣的特徵值。然後,我改變了邊界條件,只希望特徵值發生微小的變化。numpy的特徵值的精度h
減去特徵值容易出現浮點錯誤,所以我使用了一些相對容差。
現在說我有一個特徵值A = 1.0001e-10
,和另一個B = 1.0050e-10
。根據我對浮點運算的低級知識,A - B != 0
。問題是,這些數字來自涉及許多數量級的線性代數計算。其他特徵值可能例如是1
。
問題是,使用numpy.linalg.eigvalsh
計算的特徵值的精度是多少?這個精度是相對於數值(A * eps
)還是相對於最大特徵值?或者可能相對於原始矩陣的元素?
例如,這個矩陣:
1 1e-20
1e-20 3
給出了同樣的特徵值,因爲這:
1 1e-5
1e-5 3
謝謝,@ aka.nice,似乎是正確的方向。我是否理解精確度與epsilon乘以最大特徵值? – jarondl
是的,在對稱情況下,這也是我的理解。 –
讓我補充說,通常在等級計算特徵值小於N倍epsilon倍時,最大特徵值被認爲等於零。 (所有計算量級)。 –