问题标签 [numerical-methods]
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.
c++ - SVD 在 C/C++ 中解决 harwell-boeing 稀疏 ax=b 系统?
有人知道 C++ 的稀疏 SVD 求解器吗?我的问题涉及一些可能将列/行归零的条件不佳的矩阵。我的数据存储在 uBLAS 矩阵中,该矩阵是 Harwell-Boeing 稀疏格式。
我很难找到:
SVD 求解器
- 可以对稀疏矩阵进行运算的 SVD 求解器。Lapack似乎无法做到这一点?我想将稀疏矩阵传递给函数和稀疏矩阵输出。
- 一种重新组合结果的方法......这样我就可以从 x=b(A^-1) 中读取 xs。我希望这是 x=(b)(v.(d^-1).(u^t))
我希望从 GSL 重新创建以下两个步骤
我也不知道如何在 C++ 中包装 FORTRAN 库。哪里/有任何 PROPACK c/c++ 绑定?
编辑 1:我在使用 PROPACK 时遇到了一些问题。PROPACK 输出稀疏矩阵吗?它似乎将 V 输出为“V(LDV,KMAX): DOUBLE PRECISION array”。这意味着它没有?
r - Full Singular Value Decomposition in R
In most applications (esp. statistical ones) the thin SVD suffices. However, on occasion one needs the full SVD in order to obtain an orthobasis of the null space of a matrix (and its conjugate). It seems that svd() in R only returns the thin version. Is it possible to produce the full version? Are there alternatives?
c++ - 从 uBlas 压缩矩阵中删除一行?
我想知道从 uBlas 的压缩矩阵中删除一行的最佳方法是什么?我想知道是否有某种方法可以获取向量内的压缩列数据?我正在查看此页面http://netlib.org/linalg/html_templates/node92.html并且找不到如何访问这些元素。
我的矩阵声明如下:
我的最终目标是使用此方法删除所有零行。
编辑: 我怀疑解决方案将涉及在内部更改 ublas::compressed_matrix 结构。我认为可以安全地假设非零条目的数量约为 1k。我希望调用该方法来删除一行,也许,20 次。
statistics - log(1-exp(x)) 的数值精度
我正在用非常大的数字做一些数学运算(我使用的是 Python,但这个问题不是 Python 特有的)。对于一个值,我有一个公式可以给我f(t) = Pr(X < t)
. 我想用这个公式得到Pr(X >= t) = 1 - f(t)
. 因为f(t)
返回值非常接近于零,所以我一直在使用对数转换和存储log( f(t) )
而不是f(t)
. 我log( f(t) )
的顺序是-1e5 左右。
对于乘法,这非常有效。log( f(t) * g ) = log( f(t) ) + log(g)
.
但是,log( 1 - f(t) )
仅使用; 来计算非常困难log( f(t) )
;当然,我可以暂时对我存储和计算的值求幂log( 1 - exp( log( f(t) ) )
,但这会返回,log( 1 - 0.0 ) = 0.0
因为log( f(t) )
它非常接近于零。
你可能会问,“你为什么在乎?如果它接近于零,那么 1 减去它就非常接近于 1。” 嗯,这是一个很好的观点。你是个聪明的饼干。
问题是我想用它来对值进行排名,所以我真的很关心一个是log(0.999)
,另一个是log(0.9999)
。你也可能会问,“好吧,你为什么不给 排名log( f(t) )
,然后颠倒顺序来获得排名log( 1 - f(t) )
。” 再一次,我不得不指出你的问题有多棒。与您交谈真的很愉快。
但问题是:我不只是想按1 - f(t)
; 我实际上想根据 排名Pr(X >= t) * g(t) = (1 - f(t)) g(t)
。记录日志后,我得到log( 1 - f(t) ) + log( g(t) )
; 仅基于排名f(t)
不会给出正确答案。
过去我写了一个小 Python 函数来计算log(a + b)
和:log(a)
log(b)
它有助于首先将它们归一化,使它们靠近在一起,然后在它们靠近在一起时取幂。
不幸的是,我无法使用相同的技巧来进行减法运算,因为没有归一化因子可以将它们log(1)
结合log( f(t) )
在一起,因为它们相距甚远。
有谁知道如何解决这个问题?这似乎是一个经典的问题;我真的希望/希望/祈祷有一个聪明的功能可以在位级别上运行,可以log(1-x)
从log(x)
. 另外,如果你知道它是如何工作的,我真的很想知道。
干杯! 奥利弗
floating-point - 没有扩展精度 FPU 的数值陷阱
Monniaux 的优秀文章“验证浮点运算的陷阱”给出了意外数值行为的示例。然而,大多数示例依赖于扩展精度 FPU 或扩展精度运算(例如乘法累加)。除了带符号的零和涉及 NaN 的比较之外,当扩展精度硬件被禁用时,还有任何令人惊讶的数值行为的好例子吗?
mathematical-optimization - 最小化例程中相对容差的含义(minpack 的 hybrd1)
我hybrd1
在Eigen中使用 minpack 的一个端口,它使用Powell 的方法来找到 f(x)=0 的解决方案;在这种情况下,雅可比是用数值计算的。
求解器接受xtol
参数,相对容差,这是sqrt(eps)
给定数值类型的默认值(double
在我的情况下)
在大多数情况下,我通过残差向量范数得到令人满意的解决方案,例如1.446575e-9
. 但是,有时会接受给出规范的解决方案,例如 523.543,这让我想知道它的xtol
实际含义是什么。与当前残差标准进行比较的参考值是多少?
python - 这个 IRR 实现中使用的数值方法是什么?
ActiveState 食谱网站有一个用 Python实现内部收益率的函数:
此代码返回正确的值(至少对于我检查过 Excel 的几个示例),但我想知道为什么。
- 它似乎不是牛顿法(无导数)或正割法(仅跟踪一次迭代)的实现。
- 特别是,将投资变量定义为第一个现金流量元素(以及它的后续使用)让我感到困惑。
有任何想法吗?
data-structures - 这个线性求解器如何在 Mathematica 中连接?
这是一个名为GotoBLAS的优秀线性求解器。它可供下载并在大多数计算平台上运行。我的问题是,有没有一种简单的方法可以将此求解器与 Mathematica 内核联系起来,以便我们可以将其称为 LinearSolve?你们大多数人肯定会同意的一件事是,如果我们有一个非常大的线性系统,那么我们最好用一些行业标准的线性求解器来解决它。内置求解器不适用于真正的大问题。
现在 Mathematica 8 已经提供了更好的编译和库链接功能,我们可以期望使用 Mathematica 中的一些求解器。问题是这是否需要对源代码进行少量调整,或者您需要成为高级向导才能做到这一点。在这个论坛中,我们可能会开始将 GotoBLAS 等一些优秀的开源程序与 Mathematica 联系起来,并交流我们的看法。经验不足的人可以从专业用户那里获得一些见解,最后我们会得到更强大的 Mathematica。对于不断增长的 Mathematica 社区来说,这将是一个开放项目,也是一个平台,可以为未来的用户透明地记录 Mathematica 8 的这些新引入的功能。
我希望你们中的一些人能够就如何在 Mathematica 中运行 GotoBLAS 提供可靠的想法。由于较新的编译和库链接功能通常没有很好的文档记录,因此普通用户不会经常使用它们。这个问题可以作为一个玩具示例来记录 Mathematica 的这些新功能。经验丰富的论坛成员在这个方向上的帮助将真正提升像我这样的新用户的积极性,并且它会教给我们一个非常有用的东西来扩展 Mathematica 的数字处理库。
numerical-methods - Matlab 新手二分查找疑难解答
一般来说,我是 Matlab/编程的新手。我希望编写一个程序/脚本,它使用递归二进制搜索来近似 $2x - 3sin(x)+5=0$ 的根,这样一旦截断错误肯定是 $< 0.5 \times 10 ^{ -5}$ 并打印出迭代次数以及根的估计值。
这是我的尝试,似乎破坏了我的计算机...
我什至没有添加迭代次数计数位(我不太确定该怎么做)并且我已经被卡住了。
谢谢你的帮助。