问题标签 [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.
matlab - 计算 Logistic 损失函数的值 AND 梯度时避免数值溢出
我目前正在尝试实现一种机器学习算法,该算法涉及 MATLAB 中的逻辑损失函数。不幸的是,由于数值溢出,我遇到了一些麻烦。
一般来说,对于给定的输入s
,逻辑函数的值是:
逻辑损失函数的斜率为:
在我的算法中, 的值s = X*beta
。这X
是一个矩阵,其中包含每个数据点的N
数据点和P
特征(即size(X)=[N,P]
),并且beta
是P
每个特征的系数向量,使得size(beta)=[P 1]
。
我对计算给定值的 Logistic 函数的平均值和梯度特别感兴趣beta
。
Logistic 函数 wrt 的平均值beta
为:
Logistic 函数 wrt 的斜率平均值b
为:
注意size(dL) = [P 1].
我的问题是这些表达式不断产生数字溢出。问题实际上来自这样一个事实,即exp(s)=Inf
何时s>1000
何exp(s)=0
地s<-1000.
我正在寻找一种s
可以在浮点运算中取任何值的解决方案。理想情况下,我也非常感谢一个允许我以矢量化/有效方式评估值和梯度的解决方案。
r - R 中的 OLS - lm() 对矩阵计算给出了不同的答案
我正在使用 R 中的线性代数对 OLS 估计器进行手动计算,而我对 R 的内置回归函数 lm() 得到了不同的答案。谁能告诉我为什么会有差异?R不执行OLS吗?
c# - 在 javascript 中测试“双重”相等性
我已将Clipper 库的实验性 C#“float”版本翻译为 javascript。在最新的沙盒版本中,有一个似乎很难翻译的函数IsAlmostEqual 。由于数值稳定性问题,无法使用 == 运算符比较双重相等,因此需要此函数来处理这些问题。
-9223372036854775808 - aInt
并且-9223372036854775808 - bInt
很容易使用例如 BigInteger 库进行计算,但BitConverter.DoubleToInt64Bits
更难。
知道如何将IsAlmostEqual
函数转换为 javascript 吗?或者具体如何实现BitConverter.DoubleToInt64Bits
到javascript?
数值稳定性和鲁棒性:
http ://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm
http://www.mpi-inf.mpg.de/~kettner/pub/nonrobust_cgta_06.pdf
http:// cpc.cs.qub.ac.uk/MRSN/higham.pdf
http://www.2ality.com/2012/04/number-encoding.html
matlab - 计算 36×36 矩阵的 Jordan 形式的解释错误
我一直在尝试计算 36×36 矩阵的约旦范式,该矩阵仅由三个不同的条目1
、1/2
和组成0
。该矩阵是一个概率转移矩阵,因此,鉴于这些条目,该矩阵显然是稀疏的。
我遇到的问题如下:每当我尝试计算
或者
我收到以下错误消息:
使用 mupadmex 时
出错 MuPAD 命令中的错误:相似度矩阵太大。sym/mupadmexnout 中的错误(第 1546 行)
out = mupadmex(fcn,args{:});sym/jordan 错误(第 32 行)
[Vsym,Jsym] = mupadmexnout('symobj::jordan',A,'All');
我在 MATLAB 帮助中读到 Jordan 形式的计算对扰动非常敏感。但是,我认为我的计算不会成为问题,因为矩阵的所有条目都是整数或整数的比率。
我的问题如下:
- 如何解释收到的错误输出?
- 我收到的错误是否可以解决?
- 如果错误无法解决,是否有替代方法(Matlab 中的函数)我可以尝试计算 Jordan 形式?
numerical-methods - 2nd order centered finite-difference approximation
This question may sound mathematical, but it's more of a programming question related to discretization, so I decided to ask it here.
The problem is to find a 2nd order finite difference approximation of the partial derivative uxy, where u is a function of x and y.
Page 5 of this pdf I found does a centered difference approximation it in two steps. It first does the 2nd order centered finite-difference approximation of one of the partials, and then inserts the approximation of the second partial into it (using the same formula):
Inserting lines 2 and 3 into 1 gives (according to the pdf) the following:
The last O[(Δx)2,(Δy)2] is what I have a problem with. Notice that when the O(Δy)2 terms of lines 2 and 3 go into the numerator of 1, they are being divided by the Δx in the denominator. So how come the residual terms in line 3 are of O(Δy)2 instead of O(Δy2/Δx)? Would this be a '2nd order' approximation any more? (If, say, grid-spacing along both axes are the same (Δx=Δy=h), the term is of order h2/h =h, not h2.)
My suggestion would be to use a higher order approximation (3rd or more) in lines 2 and 3 in order to survive the division by Δx and still have the final expression in 2nd order. But I may be missing something here.
math - 四元数和数值稳定性
我正在学习单位四元数以及如何使用它们来表示和组合旋转。维基百科说它们比矩阵表示在数值上更稳定,但没有给出参考。谁能向我解释(最好用一些数学推理)为什么使用单位四元数来处理旋转(例如对于 OpenGL 应用程序)而不是旋转矩阵在数值上更稳定?是因为避免了云台锁吗?
python - 使用 numpy.random.multinomial 时如何避免值错误?
当我使用这个随机生成器时:numpy.random.multinomial
,我不断得到:
我总是传递这个 softmax 函数的输出:
除了现在我收到此错误外,我还为参数(pvals
)添加了这个:
但这并没有解决它。确保避免此错误的正确方法是什么?
编辑:这是包含此代码的函数
python - numpy.random.multinomial 输出错误?
我有这个功能:
我在调用的输出上调用:
当我运行它时,我在某个时候遇到了一个断言错误。这怎么可能?numpy.random.multinomial 的输出不能保证是一个单热向量吗?
然后我删除了断言错误,现在我有了:
是否有一些我遗漏的细则,或者这只是坏了?
matlab - 数值稳定的实现
我需要在 Matlab 中计算向量的归一化指数。
简单地写
V 的元素中的溢出大于 log(realmax) = 709.7827。(我不确定下溢条件。)
我应该如何实现它以避免数值不稳定?
更新:我收到了关于如何避免溢出的优秀回复。但是,我仍然很高兴听到您对代码中下溢可能性的看法。
c++ - 三角函数计算的源代码
对于需要确定性并在不同平台(编译器)上提供相同结果的程序,不能使用内置三角函数,因为计算它的算法在不同系统上是不同的。经测试,结果值不同。
(编辑:结果需要与在所有客户端上运行的游戏模拟中使用的最后一位完全相同。这些客户端需要具有完全相同的模拟状态才能使其工作。任何小的随着时间的推移,错误可能会导致越来越大的错误,并且游戏状态的 crc 被用作同步检查)。
所以我想出的唯一解决方案是使用我们自己的自定义代码来计算这些值,问题是,(令人惊讶的是)很难为所有三角函数集找到任何易于使用的源代码。
这是我对 sin 函数获得的代码 ( https://codereview.stackexchange.com/questions/5211/sine-function-in-cc ) 的修改。它在所有平台上都是确定性的,其值与标准 sin 的值几乎相同(均经过测试)。
但我没有找到任何适合其他功能的东西,比如 asin、atan、tan(除了 sin/cos)等。
这些函数没有标准函数那么精确,但至少有 8 个数字会很好。