我目前正在使用scipy的稀疏解算器Python来求解稀疏线性系统。
我正在将解析解与模拟解的结果进行比较。然而,在某些情况下,我对模拟结果的准确性有一些怀疑。
估计稀疏矩阵的condition number是相当困难的。我可以找到矩阵的最大特征值,但对最小特征值的搜索永远不会收敛,因此我甚至不能使用最大(Eig)/min(Eig)=条件。使用另一个近似值,即max(abs(diag))/min(abs(diag)),我得到了一个条件数,log2给出了26个条件数,因此启发式地说,我的结果损失了大约26位的精度。
我的问题如下:假设我的计算是用float64 (numpy)完成的,并且缺少26位,我如何计算才能知道我的数字的哪些小数可以信任?例如,如果我的模拟给出的答案是:
Number_to_verify = 1663.123609834 (float64)和最后26位可能损坏,我可以信任这个数字的哪一部分?
发布于 2017-02-23 20:29:12
粗略地说,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')为
##12345678901234567890123456 12345678901234567890123456
0b11001111111000111111010010 00000000000000000000000000
0b11001111111000111111010010 01110010011100010011111101
0b11001111111000111111010010 11111111111111111111111111
1663.1235961914062
1663.123609834
1663.123626708984https://stackoverflow.com/questions/42414158
复制相似问题