问题标签 [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.
c++ - 用于 HPC 的 C++ std::vector?
我正在将执行数字模拟的程序从 FORTRAN 翻译为 C++。
我必须处理 800MB 大小的双倍大矩阵。这个
给出分段错误,因为堆栈不是那么大。使用 new,delete 很尴尬,因为我需要四个 for 循环来分配我的数组,甚至释放它。
std::array 在堆栈中,所以不好。std::vector 将是一个不错的选择,所以
第一个问题 是 std::vector 适合快速模拟还是
会携带大量无用且繁重的数据吗?
第二个问题 你知道我可以使用的任何其他数据结构吗?也许有来自boost的东西。
目前我只是使用这个解决方案:
我正在手动访问我需要的条目。如果我没有找到任何其他高性能解决方案,我将编写一个自动管理最后一个方法的类。
第三个问题你认为这会显着降低性能吗?
java - Romberg 积分算法
我想通过 Romberg 积分求解给定区间 [a,b] 上的基本积分,用于 R(n,m) 中的任意 n 和 m 值。
我从梯形规则推导出布尔规则,所以我知道如何在纸上做到这一点。我什至画了一张显示所有依赖关系的流程图。它没有帮助我编写代码。
我有一种感觉,这需要某种递归。
我正在用 Java 编程。
编辑:我不要求任何人为我编写此代码。以上所有信息,包括被其他人编辑的信息,都是为了说明我的相关经验和对技术词汇的理解以及我的应用能力。这对那些真正想要帮助而不是炫耀的人很有帮助。感谢这位先生,他在下面为我提供了一些很好的链接和信息。
matlab - 如何将符号表达式从符号包转换为 Octave 函数?
如何将符号表达式从符号包转换为 Octave 函数?
在 octave 上安装符号包后pkg install -forge symbolic
。使用 octave 上的符号包我可以这样写:
这将导致:
但是如何将上面的这个 Integral (int(1)) 符号结果变成下面这样的有价值的函数呢?
我想从 中获取符号结果int ( a^2 + csc(a) )
,并调用 result(3) 以在 3 处计算它,即从符号表达式积分中返回数值 11.6463 + 1.5708i a^2 + csc(a)
。基本上,如何将符号表达式用作数值可评估的表达式?这是 Matlab 的另一个问题。
参考:
java - 前向欧拉法
我正在做一个实验程序。我需要从一组实验数据中找到海拔。我只记录时间和加速度数据,并使用前向欧拉法解决双重积分问题。我写的代码是这样的。
找到速度和位移是否正确?如何修改它以找到海拔?
algorithm - 加速位移
我正在做一个实验程序。我有一个固定在汽车仪表板上的智能手机,在旅行期间,我从应用程序中读取了惯性传感器的一些值。
准确地说,我读到了每个注册的加速度计数据时间(以固定间隔),以秒为单位。
所以现在我想从垂直加速度传递到垂直位移,为此我应该做一个双重积分。
我尝试了欧拉方法。从初始条件如:
v0=0.v0=0
这是零时间的初始速度。
x0=0.x0=0
这是零时间的初始位置。
定义,
deltaT=registrationinterval.deltaT=registrationinterval
(在我的情况下为 0.04 秒)
然后对于每个注册,我都会:
vi=vi−1+ayi∗deltaT.vi=vi−1+ayi∗deltaT
xi=xi−1+vi∗deltaT.xi=xi−1+vi∗deltaT
其中i
代表当前和i-1
先例。
但是我得到的图表不是很真实,实际上速度和位移都只是增长,而我必须得到的效果是垂直位移出来的东西类似于加速度图。
鉴于应用此程序,我的错误也很高,有可能图形只是在增长,而我没有看到任何类型的垂直振荡?
我还阅读了卡尔曼滤波器可以提前应用来清理信号,这可能是一个解决方案吗?
或者我应该改变积分方法并从龙格库塔切换到欧拉?(然而,最后一个,我一点也不知道如何设置)。
或者有人知道可以帮助我的算法吗?
这里有一个注册数据的例子,如果有帮助的话:
python - Python中的分步傅里叶方法
抱歉,这篇文章很长,但我正在尝试使用分步法在 python 中模拟二维薛定谔方程。
这个方程的一维问题已经在这篇文章中解释过: https ://jakevdp.github.io/blog/2012/09/05/quantum-python/
我尝试添加另一个维度并修改了上述帖子之后的运算符,但我很困惑如何绘制 psi 函数,因为我添加了另一个维度,这是我通过添加额外维度修改的类方程,我现在还修改了辅助函数我添加了额外的维度:
一维绘图和动画的代码如下:
r - 计算分数有时非常接近零的数值策略
在 R 函数chisq.test()
中有以下行:
PVAL <- (1 + sum(ss >= almost.1 * STATISTIC))/(B + 1)
和
almost.1 <- 1 - 64 * .Machine$double.eps
这显然是一种计算调整,以避免为PVAL.
计算什么并不重要,但我们真正想要的是,一堆模拟的结果sum(ss >= STATISTIC)/ B
在哪里,是一个要比较的固定值,是模拟的数量。我们正在计算大于ss
STATISTIC
B
ss
STATISTIC.
1
分子和分母相加应该完成什么?
和
为什么我们需要乘以1 - 64 * .Machine$double.eps
?
c++ - 避免计算图中的虚函数调用
我正在使用 DAG(有向无环图)来表示和评估表达式;每个节点代表一个操作(+
、-
、/
、*
、accumulate 等),整个表达式的评估是通过按拓扑排序顺序依次评估每个节点来实现的。每个节点都继承一个基类并根据它所代表的运算符RefNode
实现一个虚函数evaluate 。Node 类在代表运算符的仿函数上进行模板化。节点评估顺序通过对每个元素的vector<RefNode*>
调用->evaluate()
来维护。
一些快速分析表明,虚拟evaluate
会使添加节点的速度降低 2 倍 [1],这可能是由于开销导致的,也可能是破坏了分支预测。
作为第一步,将类型信息编码为相应使用的整数static_cast
。这确实有帮助,但它很笨重,我不想在我的代码的热门部分跳来跳去。
评估可能如下所示:
我有以下问题,请记住性能至关重要:
- 在这种情况下如何避免使用虚拟功能?
- 如果不是,我该如何改变我表示表达式图的方式以支持多个操作,其中一些必须保持状态,并避免虚函数调用。
- Tensorflow/Theano 等其他框架如何表示计算图?
[1] 我系统上的单次加法操作需要大约 2.3ns 的虚拟功能和 1.1ns 没有。虽然这很小,但整个计算图主要是附加节点,因此有很大一部分时间可以节省。
c++ - 使用动态数组的 C++ 正向差分表
我已经使用静态数组创建了正向差异表,但无法使用动态数组解决它,请帮我解决这个表。
这是静态数组的代码,但我需要动态数组