Questions tagged «algorithms»

以明确的形式描述以明确的方式解决特定问题所需的特定步骤的描述。

2
(如何)编写运行速度更快的模拟?
我已经开始使用python作为编程语言来执行CFD中的所有作业。我在编程方面经验很少。我来自机械工程领域,正在从事航空航天工程的高等教育。 有时,CFD的计算方面比处理方程式或进行数学运算更乏味。 有哪些一般准则可以使我们的程序运行更快?做并行处理的技巧是什么?如何编写运行速度更快的代码? 我在哪里可以得到回答上述问题的资源(对于像我这样的外行人来说很容易理解)?


1
与Adams-Bashforth算法相比,使用Adams-Moulton有哪些相对优势?
我正在计算两个空间维度和时间上两个耦合的PDE的系统。由于函数评估很昂贵,因此我想使用多步方法(使用Runge-Kutta 4-5初始化)。 使用五个先前的函数求值的Adams-Bashforth方法的全局误差为(在s = 5的情况下O(h5)O(h5)O(h^5)s=5s=5s=5在下面引用的Wikipedia文章下),并且每步需要一个函数求值(每个PDE)。 另一方面,Adams-Moulton方法每个步骤需要进行两次功能评估:一项用于预测步骤,另一项用于校正步骤。再一次,如果使用五个函数求值,则全局误差为。(s = 4O(h5)O(h5)O(h^5)s=4s=4s=4 Wikipedia文章中的) 那么,在Adams-Bashforth上使用Adams-Moulton的背后原因是什么?它具有相同数量级的错误,功能评估的次数是两倍。从直觉上讲,预测校正方法应该是有利的,但是有人可以对此进行定量解释吗? 参考:http : //en.wikipedia.org/wiki/Linear_multistep_method#Adams.E2.80.93Bashforth_methods

5
对数百万个数据点重复最近的邻居计算太慢
我有一个数据集,可以在3D模式下运行数百万个数据点。对于我正在进行的计算,我需要计算半径中每个数据点的邻居(范围搜索),尝试拟合函数,计算拟合误差,对下一个数据点重复此操作,依此类推。我的代码可以正常工作,但是运行时间很长,每个数据点大约需要1秒!可能是因为每个点都必须在整个数据集中进行搜索。有没有一种方法可以使该过程更快。我有一个想法,如果我能以某种方式在第一个邻居之间建立某种邻接关系,那么这可能会比较慢。如果有帮助,我试图在3D中找到最佳的Parzen窗口宽度。

2
向量之间的角度数值稳定计算方法
当对两个向量之间的角度应用经典公式时: α=arccosv1⋅v2∥v1∥∥v2∥α=arccos⁡v1⋅v2‖v1‖‖v2‖\alpha = \arccos \frac{\mathbf{v_1} \cdot \mathbf{v_2}}{\|\mathbf{v_1}\| \|\mathbf{v_2}\|} 人们发现,对于非常小的/锐角,会损失精度,结果也不准确。正如在解释这个堆栈溢出的答案,一个解决方案是使用反正切来代替: α=arctan2(∥v1×v2∥,v1⋅v2)α=arctan⁡2(‖v1×v2‖,v1⋅v2)\alpha = \arctan2 \left(\|\mathbf{v_1} \times \mathbf{v_2}\|, \mathbf{v_1} \cdot \mathbf{v_2} \right) 这确实提供了更好的结果。但是,我想知道这是否会给非常接近\ pi / 2的角度带来不好的结果π/2π/2\pi / 2。是这样吗 如果是这样,是否有任何公式可以精确计算角度而无需检查if分支内的公差?

5
使用类封装数值算法的固有优点和缺点是什么?
科学计算中使用的许多算法与通常在数学运算强度较低的软件工程形式中通常考虑的算法具有不同的固有结构。特别是,个别的数学算法往往非常复杂,通常涉及成百上千的代码行,但是却不涉及任何状态(即不作用于复杂的数据结构),并且通常可以归结为编程语言。接口-作用于一个或多个数组的单个函数。 这表明函数(而不是类)是科学计算中遇到的大多数算法的自然接口。但是,该论点对于如何处理复杂的多部分算法的实现并没有多大见解。 尽管传统方法只是简单地拥有一个调用多个其他函数的函数,并沿途传递相关参数,但是OOP提供了另一种方法,其中算法可以封装为类。为了清楚起见,通过将算法封装在类中,我的意思是创建一个类,在该类中将算法输入输入到类构造函数中,然后调用一个公共方法来实际调用该算法。C ++ psuedocode中的这种多重网格实现可能看起来像: class multigrid { private: x_, b_ [grid structure] restrict(...) interpolate(...) relax(...) public: multigrid(x,b) : x_(x), b_(b) { } run() } multigrid::run() { [call restrict, interpolate, relax, etc.] } 那么我的问题如下:与没有班级的更传统的方法相比,这种做法的利弊是什么?是否存在可扩展性或可维护性问题?明确地说,我并不是要征求意见,而是要更好地理解采用这种编码实践的下游影响(即,直到代码库变得很大之前可能不会产生的影响)。
13 algorithms 

1
大稀疏整数矩阵的算法
我正在寻找一个对大型稀疏矩阵执行矩阵运算而又不牺牲数值稳定性的库。矩阵将是1000+×1000+,矩阵的值将在0到1000之间。我将执行索引演算算法,因此将串行生成(稀疏)矩阵的行向量。在开发每一行时,我将需要测试线性独立性。一旦我用所需数量的线性独立向量填充矩阵,便需要将矩阵转换为简化的行梯形形式。 现在的问题是,我的实现使用高斯消去法来确定线性独立性(一旦找到所有行向量,就确保行梯形形式)。但是,给定矩阵的密度和大小,这意味着每个新行中的条目随时间呈指数增长,因为必须找到前导条目的1cm才能执行抵消。寻找矩阵的简化形式进一步加剧了该问题。 所以我的问题是,是否有一种算法或更好的一种实现可以测试线性独立性并解决缩小的行梯形形式,同时保持条目尽可能小?线性独立性的有效测试尤为重要,因为在索引演算算法中,它最多执行。

1
从3D中Delaunay镶嵌衍生的图形的枚举
是否有一种算法可以枚举与3D点中的点Delaunay细分相关的图形? 如果是这样,是否存在与任何“ Delaunay图”相对应的几何形状的有效参数化? 我希望系统地枚举指定组成的分子的所有稳定几何形状,而无需任何先验的结合等知识。 编辑:令为具有个顶点的图形集。令是的个点到对应于3D中所述点的Delaunay细分的图的映射。 N D :R 3 N → G N N R 3GNGNG_NNNND:R3N→GND:R3N→GND: \mathbb{R}^{3N} \to G_NNNNR3R3\mathbb{R}^3 如何有效地枚举)?D(R3N)D(R3N)D(\mathbb{R}^{3N}) 此外,给定一个图,如何有效地参数化)?d - 1(克)g∈Gng∈Gng\in G_nD−1(g)D−1(g)D^{-1}(g) 编辑:2D中的示例:对于4点,有2个Delaunay图。 1−╲2|4−╱3 and 1|3−×−2|41−2−3╲|╱4 and 1−2|×|3−4 \begin{matrix} 1 & - & 2 & - & 3 \\ &\diagdown &| & \diagup\\ &&4 \end{matrix}\mbox{ and } \begin{matrix} …

1
积分变换求逆的数值方法?
我正在尝试将以下整数转换数字化: F(y)=∫∞0yexp[−12(y2+x2)]I0(xy)f(x)dxF(y)=∫0∞yexp⁡[−12(y2+x2)]I0(xy)f(x)dxF(y) = \int_{0}^{\infty} y\exp{\left[-\frac{1}{2}(y^2 + x^2)\right]} I_0\left(xy\right)f(x)\;\mathrm{d}x 因此,对于给定的F(y)F(y)F(y)我需要近似f(x)f(x)f(x) ,其中: f(x)f(x)f(x)和F(y)F(y)F(y)是实数和正数(它们是连续的概率分布) x,yx,yx,y是实数和正数(它们是大小) 我现在有一个非常凌乱而蛮力的方法: 我定义f(x)f(x)f(x)和样条曲线在一系列点上,通过随机采样“猜测”样条曲线点的值,从而得出预测的F(y)F(y)F(y)。我写的基本遗传算法使预测的和测量的F(y)F(y)F(y)数组之间的差异最小。然后,我将算法收敛到的f(x)f(x)f(x)作为反演的答案。 这种方法在某些简单的情况下效果很好,但对我来说却很杂乱,而且不够健壮。 谁能为我提供解决此问题的更好方法的指导? 感谢您的时间和帮助! [x张贴于计算机科学]

2
胆固醇系数的计算
因此,Cholesky分解定理指出,任何实对称正定矩阵都具有Cholesky分解,其中是下三角矩阵。中号= 大号大号⊤大号中号MM中号= L L⊤M=LL⊤M= LL^\top大号LL 考虑到,我们已经知道有快速的算法来计算其乔莱斯基因素。大号中号MM大号LL 现在,假设给了我一个矩形矩阵,我知道是正定的。有没有一种方法可以计算的Cholesky因子,而无需显式计算,然后应用Cholesky分解算法?甲甲⊤甲大号甲⊤甲甲⊤甲m × nm×nm\times nAAAA⊤AA⊤AA^\top ALLLA⊤AA⊤AA^\top AA⊤AA⊤AA^\top A 如果是一个非常大的矩形矩阵,则执行显然很昂贵,因此是个问题。一个⊤一AAAA⊤AA⊤AA^\top A

3
我正在寻找C ++中的并行动态图库
您好scicomp社区, 我曾使用诸如NetworkX(Python),JUNG和YFiles(Java)之类的框架从事图算法研究。我现在正在进入并行和高性能计算领域。对于一个新项目,我正在寻找具有以下功能的C ++图形库: 具有直观的界面,可进行算法开发 支持动态操作:例如,任意节点/边缘的插入和删除 支持并行化:例如,使程序员免受多线程问题的影响 内存开销低,适合高性能计算 请建议一些图书馆,并讨论这些标准以及利弊。

2
mpi_allgather操作的计算成本与收集/分散操作相比如何?
我正在研究一个可以通过使用单个mpi_allgather操作或一个mpi_scatter和一个mpi_gather操作来并行化的问题。这些操作在while循环内被调用,因此它们可能被多次调用。 在使用MPI_allgather方案的实现中,我正在将分布式矢量收集到所有进程中以进行重复矩阵求解。在另一种实现中,我将分布式矢量收集到单个处理器(根节点)上,在该处理器上求解线性系统,然后将求解矢量散布到所有进程中。 我很好奇的是,一次收集操作的成本是否比分散和收集操作的总和还要多。消息的长度是否在其复杂性中起重要作用?在mpi的实现之间是否有所不同? 编辑:

3
三对角矩阵本征系统的并行算法
我正在做一个大型稀疏矩阵(约200万个元素)的Lanczos对角化。Lanzcos算法中的几乎所有步骤都是在GPU上并行完成的,除了对角化Lanczos矩阵以检查收敛性。为此,我一直在使用《数字食谱》中的TQLI算法。是否有找到平行或容易平行的对角矩阵本征系统的方法?是否存在TQLI的并行版本?

3
如何实现两个粒子积分<ij | kl>的有效索引功能?
这是一个简单的对称枚举问题。我在这里提供了完整的背景知识,但是不需要量子化学知识。 这两种粒子组成是: ⟨ 我Ĵ | ķ 升⟩ = &Integral; ψ * 我(X)ψ * Ĵ(X ')ψ ķ(X)ψ 升(X ')⟨ 我Ĵ | ķ 升⟩⟨一世Ĵ|ķ升⟩\langle ij|kl\rangle 它有以下4个对称性: ⟨ 我Ĵ | ķ 升⟩ = ⟨ Ĵ 我| 升ķ ⟩ = ⟨ ķ 升| 我Ĵ ⟩ = ⟨ 升ķ | Ĵ 我⟩ 我已计算在一维数组的积分,并将它们存储的函数,索引如下:⟨ 我Ĵ | …

1
相对于非结构化六面体网格对点云进行排序
题 您将如何针对非结构化六面体网格对点云进行分类? 每个单元都有一个中心和一个代表它的唯一标签。基本上有两个云点(原始点云和单元中心的点云),但是我不确定单元格的几何信息(边界框)是否有用。 结果 我做了一些询问,并在文献中进行了搜索: 如果网格是六面体的并且是非结构化的,则问题将简化为正交范围搜索。为此,最常使用kd树。如果基于八叉树数据结构对网格进行细化,则可以在其周围构建范围搜索算法。目的是避免处理直接的网格几何,而专注于点云A-点云关系B。点云A:查询点,点云B:网格单元中心。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.