2017-02-23 41 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