2017-02-23 17 views
2

我目前正在解決一個稀疏的線性系統與從scipy,Python的稀疏求解器。如何找到精度的浮動,如果n位損壞或丟失

我正在比較解析解與模擬解的結果。但是,在某些制度中,我對模擬結果的精確度有一些疑問。

這是相當難以估算condition number爲稀疏矩陣。我可以找到矩陣的最大特徵值,但是搜索最小的特徵值從不會收斂,所以我甚至不能使用max(eig)/ min(eig)=條件。 用另一個近似值,即max(abs(diag))/ min(abs(diag)),我得到一個log2給出26的條件數,所以我啓發性地說我的結果丟失了大約26位的精度。

我的問題是:鑑於我的計算是用float64(numpy)完成的,並且缺少26位數,我該如何計算知道我可以信任的數字的小數? 例如,如果通過我的模擬給出的答案是:

Number_to_verify = 1663.123609834(float64) 和26個最後一位是潛在的損壞,可我相信哪一部分這個數字的?

回答

2

粗略地說,有float64尾數的52位和16〜有意義十進制數。 因此,如果您確定26位已損壞,請保留8位十進制數字。

更確切地說,錯誤是關於Number_to_ verify * 2**(-26) # 2e-05

的技術方法來有效的是:

f=1663.123609834 
num,den=f.as_integer_ratio() 
p=2**26 
ninf=n//p*p 
nsup=ninf|(p-1) 
print(bin(ninf),bin(n),bin(nsup),sep='\n') 
print(ninf/d,n/d,nsup/d,sep='\n') 

對於

##123456789
0b11001111111000111111010010 00000000000000000000000000 
0b11001111111000111111010010 01110010011100010011111101 
0b11001111111000111111010010 11111111111111111111111111 

1663.1235961914062 
1663.123609834 
1663.123626708984 
+0

感謝,接受了答案。 – Mathusalem