- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试调查矩阵方程问题 (Ax=b) 的残差来源。为了验证我的答案,我减去 Ax-b,期望 0。我获得的值与机器 epsilon 的数量级相同,而不是“纯”零,这很好。问题是,这些残差似乎是彼此的倍数,所以我不确定如何解释它们。
我在这里找到了一些细节:Machine epsilon computation issue ,这并没有阐明为什么出现 epsilon 的倍数而不是一个或另一个。
我使用 np.finfo(float).eps
检查了我的系统,它生成了 2.220446049250313e-16
。我在解 x 中得到的残差之一与此值相同,但是,另一个残差似乎是 epsilon 的一半。
这是我使用的代码:
# Arbitrary Matrix A and Vector b
A = np.array([[2,-1,0],[1,-2,1],[0,-1,2]])
b = np.array([[1],[0],[1]])
# Solve for Vector x
x = np.linalg.solve(A,b)
# Calculate difference, expected to be column of zeros
diff = A.dot(x) - b
print(diff)
这是输出:
Output:
[[ 0.00000000e+00]
[-1.11022302e-16] #-------> Is this machine epsilon...
[-2.22044605e-16]] #-------> ...or this?
对此的解释/解释是什么?我知道仍然可以表示小于 epsilon 的值,但在那种情况下为什么不是两个残差 -1.11022302e-16
?
提前致谢!
最佳答案
所谓机器epsilon就是1处的最小精度单位(ULP),即1的表示中最低有效位的位置值。当有效位有53位时, 1用二进制数1.000…0002表示,二进制小数点后有52个0。所以最低位的位置值为2−52,2−52就是1的ULP。
一般来说,让 ULP(x) 代表 x 的最小精度单位。通常,浮点格式将数字表示为 (−1)s • f • be,其中 b 是固定基数(二进制格式为 2,十进制为 10,十六进制为 16),s 是符号位(0 代表 +,1 代表 −),e 是指数,f 是 p 位的尾数,其中 p 是格式的固定数量。对于 IEEE-754 binary32,p 为 53,即 53 位。 ULP 是由指数缩放的尾数中最低精度的位置值,因此,如果某个数 x 以带符号位的浮点格式表示 s,尾数f,指数e,其ULP为b1−p • be。 (我假设有效数的格式是小数点之前的基数 -b 数字和小数点之后的 p-1 数字,这就是为什么它的最低数字具有b1−p的位置值。此类有效数在区间[1, b)中。有时有效数的比例不同,指数会进行调整以进行补偿。例如,它可能在证明有效数字是整数时很有用。)
在二进制格式中,ULP(2) = 2•ULP(1)、ULP(½) = ½•ULP(1)、ULP(¼) = ¼•ULP(1),依此类推。
假设您已经计算了区间 [1, 2) 中的两个值,如果使用实数算法计算,这两个值将相等,但它们是使用浮点算法计算的,并且碰巧略有不同。由于表示的格式,它们只能相差 ULP(1) 的倍数。当您减去这些数字时,您通常会得到 0、ULP(1)、2•ULP(1) 或 ULP(1) 的其他倍数,具体取决于具体情况。如果用浮点运算计算用实数算法计算的两个数字是相同的,则它们在计算的各个部分可能会遇到不同的舍入误差。
如果您计算区间 [½, 1) 中的两个值,它们只能相差 ULP(½) 的倍数。
这就是为什么您会看到 ULP(1) 的各种倍数或二进制分数。它只是浮点格式量化的产物。
关于python - 机器 epsilon 的倍数是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58098126/
所以这是我的情况。我有几个数字,我想四舍五入到最接近和最小的 10 的倍数。 例如,介于51到59之间的值应四舍五入到50。 Input = 59 = >Respose = 50 Input = 51
我尝试在 select2 多重选择中实现以下场景。 用户选择一些选项 用户在选择中选择“无必需程序” Select 会清除所有选定的值 Select 有一个占位符,其中包含以下文本:“无必需功能” 这
我正在寻找一种方法将数字四舍五入为最接近的 250 的倍数。例如,如果我有以下 JS: var containerHeight = $("#container").height(); ...我们假设“
大家好,我是 AngularJS 的新手,我在调用多个 http.get 时遇到问题。 $scope.countries 正在从城市获取值(value)。发生了什么事?如何调用多个http.get?
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: What does the ** operator do in Python? 以下 python 代码中的
我想用 scss 做点什么。我基本上想要它,所以我可以为每 5px 留出任何余量。因此,例如我可以写 m10 m15 m20 m25 等......它会创建 margin:10px;边距:15px;等
我正在用 C Sharp 创建一架钢琴,目前我有键盘键来播放声音。例如,键 A 播放音符 C。我遇到的问题是我想同时按下多个键并发出声音。显然我不想将所有组合都放在 keyDown 类中,因为我将不得
我仍在寻找Rails优雅的多文件上传方式。 我刚刚了解了“输入类型=”文件”多个” Rails支持吗?有什么例子吗?在Rails中如何实现将多张照片上传到相册模板的技巧? 谢谢 最佳答案 您需要的是更
我有这样的代码,可以创建多个 D3 donut 倍数。 body { font: 10px sans-serif; } svg { padding: 10px 0 0 10px; } .
如何在 numpy 中将数字取整到最接近 0.2 的倍数? 例如,我有这个: 0.2 * np.floor(xi / 0.2) 它在大多数情况下都有效,例如 >>> xi = 9.4 >>> 0.2
这个问题在这里已经有了答案: Rounding numbers to specific multiples [duplicate] (1 个回答) 关闭 6 年前。 我有一个花车。我想将它舍入到最接
我意识到这不是一个很好的标题,所以我会尝试更彻底地解释。 基本上,我有一个只有少量变化的 double 值,称为 clusterSize。然后,我有第二个 double 值,即 map 上的纬度或经度
我在 Canvas 上绘制了一个网格,当用户点击网格时,我正在绘制一个矩形。我想始终在用户单击的网格单元格顶部绘制矩形。所以我需要向下舍入到最接近的 X,在我的例子中,是 40 的倍数。 一些例子..
如何舍入为某些基本浮点单位的偶数倍(例如 0.0005f) float example_input = 2.718281828459f; float unit = 0.0005f; 使得输出的形式为2
我是 Java 编程的新手。我想将价格四舍五入到最接近的小数点后两位。 例如 38.82 变成 38.80 38.87 变成 38.90 38.85 保持不变。我做了例如1 和例如2 但结果只有小数点
我在 float 中给出了值和步数,例如: double step = 0.4; double value = 47.7121; 对于我给出的每个值和步骤对,我需要返回步骤的最接近的可表示 float
我正在尝试在我的一台服务器上运行 Drupal 8,但是在浏览器中安装 Drupal 期间,它为我提供了与运行 php -v 时不同的 PHP 版本 (7.0.23) > 在命令行 (7.1.12)
我需要将数字四舍五入到最接近的 0.11 倍数或四舍五入整数 示例: 0.99 turns to 1.00 0.87 turns to 0.88 0.59 turns to 0.55 54.01 tu
我有一个从公式计算的 double 列表。例如,其中一个 double 是 88.32547。我想将它们转换为最接近的 10 的整数倍,并将它们放入另一个变量中。 在示例中,double a = 88
我正在尝试合并 this multiples example在 this example 中看到焦点鼠标悬停 + 十字准线功能.我预期的 y 大小的十字准线一直在 x 线上射击。 See workin
我是一名优秀的程序员,十分优秀!