问题标签 [numerical-stability]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
21654 浏览

matlab - 在 Matlab 中计算逆矩阵

我正在运行一个需要计算矩阵逆的优化算法。该算法的目标是从矩阵 A 中消除负值并获得新的矩阵 B。基本上,我从相同大小的已知方阵 B 和 C 开始。

我首先计算矩阵 A,它等于:

A = B^-1 * C

或者在 Matlab 中:

我使用这个是因为 Matlab 告诉我B\Cinv(B)*C.

然后将 A 中的负值除以 2,然后对 A 进行归一化,使其行长度为 1。使用这个新 A,我计算一个新 B:

(1/N) * A * C' = B^-1

其中 N 只是一个比例因子(A 中的列数)。然后,这个新的 B 将在第一步中再次使用,这些迭代将继续进行,直到 A 中的负数消失。

我的问题是我必须从第二个等式计算 B 然后对其进行归一化。

我一直在使用 B 计算,inv(B^-1)但经过几次迭代后,我开始收到B^-1“接近奇异或缩放不良”的消息。

该算法实际上适用于较小的矩阵(大约 70x70),但是当它达到大约 500x500 时,我开始收到这些消息。

有没有更好的计算方法inv(B^-1)

0 投票
1 回答
2911 浏览

c++ - 稳定红外距离传感器输出值

我正在阅读红外夏普距离传感器:

http://www.robofun.ro/senzori/infrarosu/senzor_sharp_%20GP2D120XJ00F

通过阅读,我正在命令伺服系统将机器人引导到墙壁上,这是一个非常简单的地图并编写代码。

我遇到的问题是传感器读数偏离了方向,没有表现出线性...我知道其他人使用这些传感器很好,我知道它们的接线很好。

我的问题是如何消除发送到伺服的任何振荡?机器人在距离墙壁固定距离处静止不动,我得到 1 到 3 度的振动。

下面你有我的代码:

请注意,双重映射是必要的,否则变化会更糟。

感谢任何愿意花时间回答这个问题并帮助我的人......

LE:我已经考虑过滞后,但我想要一些不会因不必要的读数和计算而浪费时间的东西。

0 投票
1 回答
471 浏览

java - java.util.Dates 的数值稳定平均值

我有一堆日期,我想找到它们的平均值。

  • 在遇到溢出问题之前,我可以总结 100 年内的多少个日期?有什么陷阱吗?
  • 计算平均值的最佳方法是什么,避免溢出问题?
0 投票
1 回答
2729 浏览

c++ - c++:浮点运算稳定性的策略

任何人都可以推荐任何包含维护各种浮点运算稳定性的策略的 C++ 库/例程/包吗?

示例:假设您想long double在单位间隔 (0,1) 中对一百万的向量/数组求和,并且每个数字的数量级大致相同。天真求和for (int i=0;i<1000000;++i) sum += array[i]; 是不可靠的 - 因为足够大isum将比 大得多的数量级array[i],因此sum += array[i]相当于sum += 0.00. (注意:此示例的解决方案是二进制求和策略。)

我处理数千/数百万个微小概率的总和和乘积。我正在使用MPFRC++具有 2048 位有效位的任意精度库,但同样的问题仍然适用。

我主要关心的是:

  1. 精确求和许多数字的策略(例如上面的示例)。
  2. 什么时候乘法和除法可能不稳定?(如果我想对大量数字进行归一化,我的归一化常数应该是多少?最小值?最大值?中位数?)
0 投票
1 回答
212 浏览

algorithm - 执行具有数值稳定性的大整数矩阵运算的算法

我正在寻找一个在不牺牲数值稳定性的情况下对大型稀疏矩阵执行矩阵运算的库。矩阵将是 1000+ x 1000+,矩阵的值将在 0 到 1000 之间。我将执行索引演算算法(en.wikipedia.org/wiki/Index_calculus_algorithm),因此我将生成(稀疏)行向量矩阵串行。在我开发每一行时,我需要测试线性独立性。一旦我用所需数量的线性独立向量填充我的矩阵,我就需要将矩阵转换为简化的行梯形形式。

现在的问题是我的实现使用高斯消除来确定线性独立性(一旦找到我的所有行向量,确保行梯形)。然而,考虑到矩阵的密度和大小,这意味着每个新行中的条目随着时间的推移呈指数增长,因为必须找到前导条目的 lcm 才能执行取消。找到矩阵的简化形式进一步加剧了这个问题。

所以我的问题是,是否有一种算法,或者更好的实现,可以测试线性独立性并解决减少的行梯形,同时保持条目尽可能小?对线性独立性的有效测试尤其重要,因为在索引演算算法中它执行得最多。

提前致谢!

0 投票
1 回答
894 浏览

numerical-methods - 绝对和绝对相对误差(数值误差)

我想了解绝对和相对错误是如何工作的,以便编写一些代码。

假设,我们有x1*=4.54 x2*=3.00x3*=15.0,准确度:3 位数。
我们如何定义:x1*-x2*+x3*
b的绝对误差。x1*x2*/x3* c的绝对相对误差。a 和 b 中的精度。

试图理解:a。|e1|<=0.5*10^(-3)

或 |e1|<=0.5*10^(-2)

然后|e|<=|e1|+|e2|+|e3|=(15+4+3)*0.5*10^(-3) b。|r|<=|r1|+|r2|+|r3|=|e1/x1*|+|e2/x2*|+|e3/x3*|

0 投票
1 回答
178 浏览

numerical-stability - 在线更新向量和的数值稳定算法

给定一个向量 v,我想在变量 sum_v 中跟踪其元素的总和。向量 v 的每个元素 i 是权重向量 w_i 与其他向量 d_i 的点积。所以,每次 d_i 改变时,v 也会改变。我一直在更新 sum_v,只要 d_i 改变,我就会根据 v_i 的变化来改变它。不幸的是,小的数值不稳定性很快就会增加。

我可以使用哪些有效的技术来防止这种情况发生?

编辑:现在,每当 d_i 更改时,我的算法都会花费恒定的时间来更新 sum_v。我想保持在 log(n) 以下,其中 n 是 v 的长度。

0 投票
2 回答
1539 浏览

c++ - 当针对奇异矩阵时,solve() 崩溃

我正在尝试以最小二乘法求解线性方程组。使用犰狳及其求解函数,我想计算抛物线拟合的三个系数。

与 CtC=

和 Ctb=

显然 solve() 无法解决它,甚至 Matlab 警告:

一般来说,犰狳或c ++中是否有任何解决方法或更强大/更复杂的方法?谢谢

0 投票
1 回答
709 浏览

c++ - 如何解决此舍入错误?

为长代码道歉。这是我所能减少的。

该代码不是产生一个白色窗口,而是产生一个带有线条的白色窗口,这是舍入误差的结果。我认为问题的根源是roundX()roundY()功能,但我不确定。我也不知道如何解决这个问题。有任何想法吗?

0 投票
2 回答
196 浏览

clojure - Clojure:减法中的舍入不一致

我正在编写一段代码,其中数值相等是几个逻辑条件中的一个重要因素。Clojure 正在做一些我不太了解的事情来解释。例如:

似乎在某些情况下,Clojure 数字理解减法到 0.1,而在其他情况下则不然。这里发生了什么?