我的BinvA矩阵的(1,1)条目得到一个非常奇怪的值,我
只是想将B矩阵求逆,并进行(B ^ -1)A乘法。
我知道,当我手动进行计算时,我的(1,1)应该为0,但我得到1.11022302e-16。我该如何解决?我知道浮点数不能完全准确地表示出来,但是为什么这会给我这么不准确的响应,而不是四舍五入,有什么办法可以使我更准确呢?
她是我的代码:
import numpy as np
A = np.array([[2,2],[4,-1]],np.int)
A = A.transpose()
B = np.array([[1,3],[-1,-1]],np.int)
B = B.transpose()
Binv = np.linalg.inv(B) #calculate the inverse
BinvA = np.dot(Binv,A)
print(BinvA)
我的印刷声明:
[[ 1.11022302e-16 -2.50000000e+00]
[ -2.00000000e+00 -6.50000000e+00]]
计算逆时,会将数组转换为float64
,其机器epsilon为1e-15。ε是浮点数的
相对量化步骤 。
如有疑问,我们可以使用finfo
函数询问有关浮点数据类型的numpy信息。在这种情况下
np.finfo('float64')
finfo(resolution=1e-15,
min=-1.7976931348623157e+308, max=1.7976931348623157e+308,
dtype=float64)
因此,从技术上讲,您的值小于类型eps
的0的精确表示float64
。
如果仅仅是表示而困扰您,您可以告诉numpy不要打印小的浮点数(0到1 eps或更小):
np.set_printoptions(suppress=True)
之后,您的打印语句返回:
[[ 0. -2.5]
[-2. -6.5]]
请注意,这是所有浮点实现共有的通用数值问题。您可以找到有关SO上浮点舍入错误的更多信息
或在网上:
本节讨论了精度数学的四舍五入特性,ROUND()函数,以及插入DECIMAL列时的四舍五入特性。 ROUND()函数的行为取决于其参量是准确的还是近似的: ·对于准确值数值,ROUND()采用“半值向上舍入”规则:如果小数部分的值为.5或更大,如果是正数,向上取下一个整数,如果是负数,向下取下一个整数(换句话讲,以0为界限执行舍入)。如果小数部分的值小于.5,如果是正数,向下取下一个整数,如果是负
问题内容: 我怎么总是将a舍入为一个,而不舍入它。我知道,但是我希望它总是四舍五入。因此,如果为,则四舍五入为4。 问题答案: 您可以使用方法。 请参阅JavaDoc链接:https ://docs.oracle.com/javase/10/docs/api/java/lang/Math.html#ceil(double ) 从文档: 细胞 返回大于或等于自变量且等于数学整数的最小(最接近负无穷大
有人能告诉我怎么打双人球吗 e、 g.从双倍值55.6666666666667开始-四舍五入到双倍值56.0000000000- 或者从55.333333333333开始-四舍五入到55.0000000000的两倍- 谢谢。
问题 你想对浮点数执行指定精度的舍入运算。 解决方案 对于简单的舍入运算,使用内置的 round(value, ndigits) 函数即可。比如: >>> round(1.23, 1) 1.2 >>> round(1.27, 1) 1.3 >>> round(-1.27, 1) -1.3 >>> round(1.25361,3) 1.254 >>> 当一个值刚好在两个边界的中间的时候, round
我一直在尝试在java中使用bigdecimal进行取整,并遇到了一个java。显示非终止十进制扩展的lang.ArithmeticException错误。 谁能解释一下这个错误的起源吗?因为我对java还很陌生?帮我写代码? 谢谢 变量“d”是我认为产生错误的地方。
现在,我想我明白了这个概念。但是当我把它们都放入代码中时,它就不起作用了…… 首先,我试图将矩阵转换为上三角矩阵,但由于某种原因,在第2列之后,它停止工作。。 我输入的数组是: [1.00][5.00][4.00][4.00][1.00] [5.00] [7.00] [7.00] [4.00] [8.00] [7.00] [4.00] [8.00] [4.00] [7.00] [10.00][12