问题标签 [numerical-computing]

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 回答
987 浏览

python - 将稀疏 scipy 矩阵加载到现有的 numpy 密集矩阵中

假设我有一个占用数十 GB的巨大 numpy 矩阵A。分配此内存需要花费不可忽略的时间。

假设我还有一组与 numpy 矩阵具有相同维度的 scipy 稀疏矩阵。有时我想将这些稀疏矩阵之一转换为密集矩阵以执行一些向量化操作。

我可以将这些稀疏矩阵之一加载到A中,而不是每次我想将稀疏矩阵转换为密集矩阵时重新分配空间吗?scipy 稀疏矩阵上可用的 .toarray() 方法似乎没有采用可选的密集数组参数,但也许还有其他方法可以做到这一点。

0 投票
1 回答
540 浏览

c - 我可以使用舍入来确保原子浮点运算的确定性吗?

我正在开发一个需要浮点确定性的 C 应用程序。我还希望浮点运算相当快。这包括 IEEE754 未指定的标准超越函数,如正弦和对数。与硬件浮点相比,我考虑过的软件浮点实现相对较慢,因此我正在考虑简单地从每个答案中舍入一两个最低有效位。精度损失对我的应用程序来说是一个足够的妥协,但这是否足以确保跨平台的确定性结果?所有浮点值都是双精度值。

我意识到运算顺序是浮点结果差异的另一个潜在来源。我已经有办法解决这个问题了。

如果今天使用的主要浮点硬件实现有软件实现,那就太好了,所以我可以直接测试这样的假设。

0 投票
2 回答
476 浏览

c++ - 在 UMFPACK 中,我们需要多久进行一次符号和数字分解?

我有一个系统 Ax = b,其中 B 是一个常数,但 A 在每次迭代中都会发生少量变化。我正在使用 UMFPACK 5 再次解决这个线性系统,就像 A 的变化一样。我可以通过两种方式完成上述操作:

  1. 在开始时计算矩阵 A 的符号和数值因式分解,并使用此数值对象在每次迭代中求解 Ax = b(当然在稀疏矩阵表示中,Ax 随着 A 的变化而变化。Ap 和 Ai 保持不变)。
  2. 在每次迭代中计算矩阵 A 的符号和数值因式分解(即随着 A 的变化产生一个新的数值对象)并使用这个新的数值对象来求解 Ax = b。

以上哪种方式是正确的?对于上述两个过程,我得到了完全不同的答案(如预期的那样)。任何帮助或评论表示赞赏。谢谢。

0 投票
2 回答
4488 浏览

wolfram-mathematica - 如何在 Mathematica 中数值计算二重积分?

如何在 Mathematica 中数值计算二重积分?

在此处输入图像描述

0 投票
0 回答
168 浏览

polynomial-math - 计算非常高次多项式的根

这是我的问题;对于我的研究,我相信我正在查看的复数正是一些高次多项式的(非常大的)根集,度数为 $\sim 2^n$ (~ 2^n) 其中 $1 \le n \le 10 \sim 15$ (1 <= n <= 10 ~ 15)。Mathematica 已经在我的计算机上运行了一整天,我想知道是否有任何其他程序会比 Mathematica 更快,以便我可以计算更多的这些根。如果我有更多的例子,那真的很有帮助。我需要程序能够做的事情很简单:我给你一个非常高次的多项式,我想用数字绘制它的复数根。我不在乎多样性。

提前致谢,

0 投票
8 回答
1487 浏览

python - python中的舍入错误

为什么乘法的顺序会影响结果?考虑以下代码

我们都知道result1 应该等于result2 但是我们得到:

差异很小

但是,对于特定应用程序,此错误可能会放大,因此执行相同计算的两个程序的输出(一个使用结果 1,另一个使用结果 2)可能完全不同。

为什么会这样?在大量的数值/科学应用中可以做些什么来解决这些问题?

谢谢!

更新

很好的答案,但我仍然想念乘法顺序很重要的原因,例如

因此,编译器/解释器似乎将 a*b*c 视为 (a*b)*c

0 投票
2 回答
3100 浏览

optimization - Clojure 中的快速复数运算

我在 Clojure 中实现了一些基本的复数运算,并注意到它比大致等效的 Java 代码慢了大约 10 倍,即使有类型提示也是如此。

比较:

输出:

和:

输出:

事实上,类型提示似乎没有什么区别:如果我删除它们,我会得到大致相同的结果。真正奇怪的是,如果我在没有REPL 的情况下运行 Clojure 脚本,我会得到较慢的结果:

所以我的问题是:如何才能接近 Java 代码的性能?为什么在没有 REPL 的情况下运行 clojure 时表达式需要更长的时间来评估?

更新 ===============

很好,在s 和 s 中使用deftype类型提示,使用而不是提供与 Java 版本一样好或更好的性能。感谢你们俩。deftypedefndotimesrepeatedly

输出:

0 投票
2 回答
1378 浏览

matlab - Matlab中的逆不完全伽马函数

我有一个问题是由不完全 Gamma 函数和反不完全 Gamma 函数提出的。回想一下,当 Gamma 函数是从 0 到无穷大的特定积分时,不完整的 gamma 函数添​​加另一个参数 x,并从 0 到 x(下不完整)和从 x 到无穷大(上不完整)积分。

我知道 Matlab 具有涵盖所有这些函数的函数:完整的 Gamma 函数、上下不完整的 Gamma 函数以及逆函数。然而,Matlab 将它们的不完全 Gamma 函数实现为正则化的不完全 Gamma 函数,也就是说,它们被完全 Gamma 函数相除。

我正在寻找非正则化不完全 Gamma 函数的 Matlab 实现,尤其是逆不完全Gamma 函数。有谁知道这样的事情,或者构造一个简单的方法?(“前向”不完全 Gamma 函数很容易通过缩放来实现,但可能有更快的实现。如果有一个简单的逆实现,我就想不通了。)

0 投票
3 回答
233 浏览

c# - 哪种方式更准确?

我需要将一个数字范围划分为一些具有相同长度的段。但我无法决定哪种方式更准确。例如:

大约是(double)int1 / int2 * doubleint1 * double / int2。哪种方式更准确?我应该使用哪种方式?

更新

以下代码将显示差异:

0 投票
1 回答
144 浏览

algorithm - 经典数值计算 MATLAB 代码

从分析上讲,f(x) = g(x)对于所有x.

当 x 接近 0 时,f(x)和都g(x)接近 1。

但是,g(x)效果比f(x). f(x)当接近 0 时实际上是发散的。x为什么g(x)优于f(x)