计算科学

科学家使用计算机解决科学问题的问答

1
替换C ++中的Mathematica的QuasiMonteCarlo集成
我有一个Mathematica程序,使用该QuasiMonteCarlo方法在3或4维中执行一些积分。问题是,要花费一些令人讨厌的时间,以致于某些计算无法在我们的HPC群集上提供的最大工作时间内完成。因此,我正在考虑用C ++重写该程序,我怀疑它将大大提高它的速度。 我查看了GSL文档,虽然有关于准随机序列和常规MC集成的部分,但没有任何东西可以将它们组合在一起。同样,一两个Google搜索并没有发现任何看起来像是广受信任的实现。在C ++中,经过良好测试的QMC集成实现方式有哪些选择? 为了保持一致性,如果可以选择,我宁愿使用Mathematica实现的类似于Halton-Hammersley-Wozniakowski方法的方法。

4
快速傅立叶变换(FFT)的可伸缩性
为了对均匀采样的数据(例如结合PDE求解器)使用快速傅里叶变换(FFT),众所周知,FFT是)算法。当并行处理n → ∞(即非常大)时,FFT缩放比例如何?Ø(ñ日志(n )O(nlog⁡(n)\mathcal{O}(n\log(n)n → ∞n→∞n\to\infty

1
混合整数线性程序的有效解
许多重要问题可以表示为混合整数线性程序。不幸的是,计算此类问题的最佳解决方案是NP-Complete。幸运的是,有些近似算法有时仅需适量的计算即可提供高质量的解决方案。 我应该如何分析特定的混合整数线性程序以查看其是否适合这些近似算法之一?该程序可能具有哪些相关特征或品质? 当今使用的相关算法有哪些,这些质量如何映射到这些算法上? 我应该寻找哪些软件包进行实验?

3
有限体积法:非结构化网格与八叉树自适应+细胞切割
我正在使用使用任意非结构化网格的OpenFOAM C ++计算连续体力学库(它可以处理流固耦合,MHD流...)。这是由使用快速生成(通常是自动)非结构化网格的优点来模拟复杂几何体中的问题的想法所驱动的。 但是,最近我遇到了另一种方法:使用单元格“切割”的八叉树自适应笛卡尔网格,其中使用主动网格细化来描述复杂的几何形状。 从数字的角度来看,笛卡尔网格更准确,所以我的问题是:有没有人使用/实现这两种方法中的一种或两种?他们如何相互比较? 我正在开发用于两相流体流动的代码,并且我注意到例如可以很容易地在笛卡尔网格上使场梯度的重建更加准确,而非结构化网格则需要线性回归以实现场的突然变化...

3
在哪些应用案例中加性预处理方案优于乘法式预处理方案?
在域分解(DD)和多网格(MG)方法中,可以将块更新或粗略校正的应用组合为加法或乘法。对于逐点求解器,这是Jacobi和Gauss-Seidel迭代之间的差异。为乘法平滑充当小号(X ø 升d,b )= X Ñ ë 瓦特当施加甲X = bAx=bAx = b小号(xÒ 升d,b )= xñ Ë W ^S(xold,b)=xnewS(x^{old}, b) = x^{new} X我+ 1= Sñ(Sn − 1(。。。,小号1个(x一世,b )。。。,b ),b )xi+1=Sn(Sn−1(...,S1(xi,b)...,b),b) x_{i+1} = S_n(S_{n-1}( ..., S_1(x_i, b) ..., b), b) 然后将添加剂平滑剂应用为 X我+ 1= x一世+ ∑ℓ = 0ñλℓ(Sℓ(x一世,b )− x一世)xi+1=xi+∑ℓ=0nλℓ(Sℓ(xi,b)−xi) x_{i+1} = x_{i} …

2
快速找到点集中的粗线
在特定类别的检测器中,我们的数据以二维的成对点的形式出现,我们希望将这些点串成线。 数据比较嘈杂,并且在一个方向进行分箱,但在另一个方向进行分箱。即使每个检测器元件都在工作,我们也不能保证每个容器都命中,因此可能会跳过。 我们当前的分析链看起来像 调整命中值以校准单个检测器元件 查找集群 群集的粗拟合线 将集群连接成更长的线状结构 ... 这个问题与步骤(3)有关。 我们已经在该步骤中使用了Hough变换,并且效果很好,但是当我们尝试从测试床扩展到全尺寸项目的仿真时,它变得缓慢得令人无法接受。 我正在寻找一种更快的方法。 对于那些可能关心实际用例的人来说,这里是一个液态氩时间投影室

3
高效的三对角矩阵算法实现
我正在使用隐式数值方案解决物理问题。这导致我用三对角矩阵求解线性方程。我已经从Wikipedia 编写了此算法。我想知道是否有一个有效的库可以优化方式解决这类方程。一个重要的注意事项是,矩阵本身仅在系统参数发生变化时才会发生变化,因此我有机会对一些算法步骤进行了预先计算,以获得了不错的性能表现。我正在使用C ++。

2
自动分化何时便宜?
自动微分使我们能够对特定输入上的程序的派生进行数值评估。有一个定理,这种计算的成本不到运行原始程序的成本的五倍。这个五分之一是一个上限。 在什么情况下可以进一步降低成本?许多现场派生代码以接近原始程序的速度运行。如何获得这种加速? 可以利用原始程序的哪些特征来加快计算速度? 可以采用哪些软件工程技巧来加快计算速度?

2
是否存在使用本机C99复杂类型的C的ODE求解器的开源集?
我一直在使用GSL作为许多模拟的基础,但出于我的目的,这有点过头了,并且出于遗留原因,它定义了自己的复杂类型。除了编写自己的Runge-Kutta ODE求解器(可能效率不高)外,还有没有使用本机C99复杂类型的开源ODE求解器?
12 c  ode 

1
对于具有各向异性边界网格的不可压缩流,哪些空间离散化有效?
高雷诺数流产生非常薄的边界层。如果在“大涡流模拟”中使用了壁分辨率,则宽高比可能约为10610610^6。在这种情况下,许多方法变得不稳定,因为insup常数会随着长宽比的平方根或更差而降低。insup常数很重要,因为它会影响线性系统的条件数和离散解的逼近性质。尤其是,以下关于离散误差保持的先验界限(Brezzi和Fortin 1991) μ∥u−uh∥H1≤C[μβinfv∈V∥u−v∥H1+infq∈Q∥p−q∥L2]∥p−ph∥L2≤Cβ[μβinfv∈V∥u−v∥H1+infq∈Q∥p−q∥L2]μ‖u−uh‖H1≤C[μβinfv∈V‖u−v‖H1+infq∈Q‖p−q‖L2]‖p−ph‖L2≤Cβ[μβinfv∈V‖u−v‖H1+infq∈Q‖p−q‖L2]\begin{split} \mu \lVert {\mathbf u} - \mathbf u_h \rVert_{H^1} \le C \left[ \frac{\mu}{\beta} \inf_{\mathbf v \in \mathcal V} \lVert{\mathbf u - \mathbf v}\rVert_{H^1} + \inf_{q \in \mathcal Q} \lVert p-q \rVert_{L^2} \right] \\ \lVert{p - p_h}\rVert_{L^2} \le \frac{C}{\beta} \left[ \frac{\mu}{\beta} \inf_{\mathbf v \in \mathcal V} \lVert{\mathbf u - …

5
昂贵目标函数的全局最大化
我感兴趣的最大化全球许多(函数)实参数(一个复杂的模拟的结果)。但是,该功能的评估相对昂贵,每个参数集大约需要2天。我正在比较不同的选择,并且想知道是否有人提出建议。≈ 30≈30\approx 30 我知道对于这类过程,有一套方法涉及开发近似函数,然后将其最大化(例如,Jones等人的“昂贵的黑匣子函数的有效全局优化”)。但是,这似乎与编码有关。 我确实有能力并行运行大量仿真(50多个)。这似乎暗示着要使用遗传算法之类的方法来进行优化-因为我可以像创建一个一样快地创建大量候选解决方案。 这是我的问题:1)是否有人有免费获得这种全球性求解器/建议的实施经验?2)是否有理由在这里偏爱或避免使用遗传算法? 这是一个物理问题,我的早期实验表明,随着我更改参数,品质因数变化相当平稳。 更新: 感谢您的帮助!其他一些细节:除了最大位置之外,我不需要任何信息。模拟是确定性的,而不是蒙特卡洛,因此复杂性并不大。参数没有明确的界限或约束。我拥有的另一条信息(以前没有提到过)是对所需最大数量的了解。在寻找全局最大值时,我也会对任何规模或更大的规模感到满意-我不知道这是否会提供任何帮助。希望我能更系统地进行筛查(如Brian Borchers所建议的拉丁超立方体),这种情况将会出现。

4
非结构化网格的有效插值方法?
我想知道一种在两个非结构化网格之间插值数据的好方法,其中一个网格是另一个网格的粗略版本。 效率对我来说非常重要,因为我正在解决一个瞬态PDE问题,在该问题中,我需要在解决方案的每个步骤之间在网格之间传输数据。 我考虑过使用kd-tree搜索给定点的最近节点,然后使用该元素的形状函数(FEM模拟)对数据进行插值。这是一个好的解决方案吗?有更好的吗? 您是否还知道C / C ++中的任何健壮和可靠的库来完成此任务? *我知道有一个类似的问题,但它要求在结构化网格上使用最准确的方法。

4
解决具有初始值和最终值约束的耦合ODE
我的问题的实质如下:我有两个ODE的系统。一个具有初始值约束,另一个具有最终值约束。可以将其视为对某些变量具有初始值约束而对其他变量具有最终值约束的单个系统。 详细信息如下: 我正在尝试使用连续时间有限水平LQR控制器来驱动线性动力学系统。我想继续使用Python生态系统。 该系统是在形式,受X˙(t )= A x (t )+ B u (t )x˙(t)=Ax(t)+Bu(t)\dot{x}(t) = Ax(t) + Bu(t)x (0 )= x0x(0)=x0x(0)=x_0 LQR解决方案生成矩阵,使得在线性的最优控制输入u(t)为u (t )= K (t )x (t )。x (t )ķ(吨)K(t)K(t)x (t )x(t)x(t)u (t )= K(t )x (t )u(t)=K(t)x(t)u(t) = K(t)x(t) 其中ķ(t )= R− 1乙ŤP(吨)K(t)=R−1BTP(t)K(t) = R^{-1} B^T P(t) 和是解决一个连续时间黎卡提微分方程(请注意,此P (吨)是一个矩阵)P(吨)P(t)P(t)P(吨)P(t)P(t) …

2
Matlab [Q,R,E] = qr(A)后面对应的LAPACK函数是什么?
我目前试图廉价地为矩阵计算一个好的秩估计。因此,我使用计算了一个columnt枢轴QR分解AAA [Q,R,E]=qr(A) 在Matlab中。我估计军衔使用AAA tol = size(A,n)*eps*norm(A,'fro'); r = sum(abs(diag(R))>tol) 这可以正常工作,并且在R的所有对角线条目上绘制图如下所示: RRR 这两个实验的输入矩阵完全相同。 我的问题现在是Matlab旋转QR分解的列依赖哪个LAPACK函数? 感谢您的帮助,Grisu 编辑: DGEQPF给出相同的错误结果。 编辑2: AAAE+sign(E,F)E+sign(E,F)E+sign(E,F) AAA RRR 我将LAPACK 3.4.0与OpenBlas / GotoBLAS(64位)一起使用 Matlab 7,2007b,2010b Linux 32位 Edit3:-使用GDB,我发现Matlab 2010b从/usr/ubuntu10.04/matlabr2010b/bin/glnx86/../../bin/glnx86/../中在dgeqp3_()中调用DGEQP3:#3 0xaa46ce2f。 ./bin/glnx86/mllapack.so为什么使用LAPACK会得到错误的结果(3.4.0包括工作说明176中提到的修复程序)?
12 matlab  lapack 

1
加权SVD问题?
给定两个矩阵和B,我想找到向量x和y,使得 min ∑ i j(A i j − x i y j B i j)2。 以矩阵形式,我试图最小化的Frobenius范数甲- DIAG(X )⋅ 乙⋅ DIAG(Ý )= 甲- 乙∘ (X ÿ ⊤AAABBBxxxyyymin∑ij(Aij−xiyjBij)2.min∑ij(Aij−xiyjBij)2. \min \sum_{ij} (A_{ij} - x_i y_j B_{ij})^2. 。A−diag(x)⋅B⋅diag(y)=A−B∘(xy⊤)A−diag(x)⋅B⋅diag(y)=A−B∘(xy⊤)A - \mbox{diag}(x) \cdot B \cdot \mbox{diag}(y) = A - B \circ (x y^\top) 通常,我想以min ∑ i …

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.