计算科学

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

7
计算物理学杂志的替代品
过去,《计算物理学杂志》一直是计算科学的重要刊物,而我之前曾在那发表。为了使那些(如我)签署了Elsevier抵制的人的利益,什么样的非Elsevier期刊才是发布本来可以提交给《计算物理学杂志》的文章的合适场所? 一个好的选择应该是: 与JCP的主题重叠(至少部分重叠) 拥有良好的声誉 不会由爱思唯尔发布 注意:当我说“声誉”时,我并不是说影响因素。请参阅这篇文章,证明这两者在该领域没有很好的相关性。

9
什么是在C ++中运行参数研究的好方法
问题 我目前正在进行有限元Navier Stokes仿真,并且我想研究各种参数的影响。在输入文件中或通过命令行选项指定了一些参数。其他参数在Makefile中作为标志提供,因此每当我更改这些选项时,都必须重新编译我的代码。我很想获得一些有关系统地探索参数空间的好方法的建议。 是否有有用的C ++ / Python库/框架可以帮助解决此类问题?例如,发现boost.Program_options很有帮助,因为可以使用命令行参数来重载输入文件选项。我还看到有人使用工作文件非常有效地描述每种情况,并且一位同事建议将参数作为注释块写入vtu文件也可以工作。 也许根本不值得花很多时间在这上面吗?只是分散注意力和时间流失,最好只是通过测试过程中的蛮力和特设肌肉吗? 一些想法 我目前主要是手工做事,遇到以下问题: 命名测试用例。我尝试将结果存储在以运行参数命名的文件夹中,并用下划线将其分隔,例如Re100_dt02_BDF1...。如果缩写太多,它们很快就会变长或难以阅读/难以理解。另外,实数参数包括.尴尬/丑陋的a。 记录运行数据。有时我希望看到结果写入终端并也保存到文本文件中。例如,来自StackOverflow的答案有些帮助,但解决方案似乎有点麻烦。 根据参数绘制数据。从各种日志文件中收集相关数据需要花费一些时间,然后我可以将其绘制到一个文件中,如果使用更好的系统,这也许会变得更容易。 记录有关数据的注释。检查结果后,我在文本文件中写了一些注释,但要使其与结果文件夹保持同步有时很困难。

7
量子力学定律在模拟中在哪里分解?
作为拥有物理学学士学位的人,当我开始进行分子模拟时,我有点被丑化了。发现即使是最详细且计算最昂贵的模拟也无法从第一原理中定量地再现水的全部行为,这真是令人震惊。 以前,我给人的印象是,量子力学的基本定律是一个已解决的问题(除了重力,通常认为在分子尺度上与重力无关)。但是,似乎一旦尝试扩大这些定律并将其应用于比氢原子更大或更复杂的任何事物,它们的预测能力就会开始崩溃。 从数学的角度来看,我了解到波浪函数很快变得太复杂而无法解决,并且需要近似(如Born-Oppenheimer)来使波浪函数更易于处理。我还了解到,随着所研究系统的时间和空间比例的增加,这些近似值会引入误差,误差会越来越大。 这些近似误差中最大和最显着的性质是什么?如何获得对这些错误的直观了解?最重要的是,我们如何才能采用从头开始的方法,使我们能够准确地模拟整个分子和分子种群?阻止人们开发此类仿真的最大未解决问题是什么?

16
计算科学中“两个容易,三个很难​​”的好例子
我最近遇到了一个元现象的表述:“ 两个很容易,三个很困难 ”(Federico Poloni用这种方式表述),可以描述如下: 当为两个实体提出特定问题时,相对容易解决。但是,用于三实体公式化的算法极大地增加了难度,甚至可能使解决方案不可行或无法实现。 (我欢迎提出建议,以使措辞更加美观,简洁和准确。) 您知道在计算科学的各个领域(从纯线性代数开始,到总括式计算物理结束)有哪些好例子?

2
微小的行列式是否暗含矩阵的病态?
如果我有一个平方的可逆矩阵,并且采用它的行列式,并且发现,这是否意味着该矩阵的条件差?det(A)≈0det(A)≈0\det(A) \approx 0 反过来也正确吗?病态矩阵的行列式几乎为零吗? 这是我在Octave中尝试过的方法: a = rand(4,4); det(a) %0.008 cond(a)%125 a(:,4) = 1*a(:,1) + 2*a(:,2) = 0.000000001*ones(4,1); det(a)%1.8E-11 cond(a)%3.46E10

5
用户需要MPI C ++接口提供哪些功能?
MPI标准的3.0版本正式删除了C ++接口(先前已弃用)。尽管实现可能仍支持它,但MPI-3中的新功能没有MPI标准中定义的C ++接口。有关更多信息,请参阅http://blogs.cisco.com/performance/the-mpi-c-bindings-what-happened-and-why/。 从MPI中删除C ++接口的动机是,与C接口相比,它没有任何重要价值。除“ s / _ / :: / g”外,几乎没有区别,并且未使用C ++用户习惯的许多功能(例如,通过模板自动确定类型)。 作为参加MPI论坛并与许多实现了自己的MPI C函数C ++接口的C ++项目一起工作的人,我想知道MPI C ++接口的理想功能是什么。尽管我什么也不做,但我希望看到一个满足许多用户需求的独立MPI C ++接口的实现。 是的,我熟悉Boost :: MPI(http://www.boost.org/doc/libs/1_54_0/doc/html/mpi.html),但它仅支持MPI-1功能,并且序列化模型应为支持RMA极其困难。 我喜欢的一个MPI的C ++接口是Elemental(https://github.com/poulson/Elemental/blob/master/src/core/imports/mpi.cpp),所以也许人们可以提供一些专业知识方法。特别是,我认为MpiMap解决了一个基本问题。
28 c++  mpi 

4
处理正定对称(协方差)矩阵的逆矩阵?
在统计数据及其各种应用中,我们经常计算协方差矩阵,该方差矩阵是正定的(在考虑的情况下)并且是对称的,用于各种用途。有时,我们需要此矩阵的逆进行各种计算(例如,以该逆为(仅)中心矩阵的二次形式)。考虑到该矩阵的质量和预期用途,我想知道: 就数值稳定性而言,逆运算的最佳计算或使用方法(一般来说是二次形式或矩阵矢量乘法)是什么?可以派上用场的一些分解?

7
计算一般矩阵最大特征值的最快方法是什么?
编辑:我正在测试是否任何特征值具有一个或更大的幅度。 我需要找到一个大型的稀疏,非对称矩阵的最大绝对特征值。 我一直在使用R eigen()函数,该函数使用EISPACK或LAPACK中的QR算法查找所有特征值,然后使用它abs()来获取绝对值。但是,我需要做得更快。 我也尝试过在igraphR包中使用ARPACK接口。但是,它给了我的一个矩阵一个错误。 最终实现必须可以从R访问。 可能会有多个相同大小的特征值。 你有什么建议吗? 编辑: 精度只需要是1e-11。到目前为止,“典型”矩阵是。我已经能够对此进行QR分解。但是,也可以有更大的对象。我目前开始阅读有关Arnoldi算法的信息。我了解这与Lanczsos有关。386 × 386386×386386\times 386 EDIT2:如果我有多个矩阵正在“测试”,并且我知道有一个不变的大子矩阵。是否可以忽略/丢弃它?


5
在numpy中就地置换矩阵
我想通过使用python的numpy库更改其若干行和列的顺序来就地修改密集的正方形转换矩阵。从数学上讲,这对应于将矩阵乘以置换矩阵P并将其乘以P ^ -1 = P ^ T,但这并不是计算合理的解决方案。 现在,我正在手动交换行和列,但是我希望numpy有一个不错的函数f(M,v),其中M具有n行和列,而v具有n项,以便f(M,v)更新M根据索引排列v。也许我只是在搜索互联网上失败了。 numpy的“高级索引”可能会发生这种情况,但是我的理解是这样的解决方案不会就位。同样,对于某些简单情况,仅跟踪索引排列可能就足够了,但是在我的情况下这并不方便。 补充: 有时当人们谈论排列时,它们仅表示对随机排列进行采样,例如,这是在统计中获取p值的过程的一部分。或者,它们的意思是计数或枚举所有可能的排列。我不是在谈论这些事情。 补充: 矩阵足够小以适合桌面RAM,但又足够大,我不想深思熟虑地复制它。实际上,我想使用尽可能大的矩阵,但我不想处理无法将其保存在RAM中的不便,并且我会对矩阵执行O(N ^ 3)LAPACK运算,这也会限制实际矩阵的大小。我目前不必要地复制这么大的矩阵,但我希望可以很容易地避免这种排列的情况。

8
我应该使用哪个软件包用Python包装现代Fortran代码?
我知道,并且已经使用f2py2e封装了一些旧的Fortran 77代码,但是我的理解是它不适用于更新的Fortran 95代码。我研究了我应该使用的东西,并且碰到了fwrap和G3 f2py,它们似乎都没有给出关于它们当前状态或使用方式的任何解释(除了基本用法之外)。 我还看到f2py版本可以选择使用第三代f2py,但是它被评论为不起作用。鉴于此,我不知道应该为uni项目使用哪个项目。我应该为新代码使用哪一个? PS这基本上是与/programming/10665717/current-best-method-for-wrapping-modern-fortran-code-with-python相同的问题,建议在这里提问可能会提供更好的答案。
27 python  fortran 

3
BLAS,LAPACK和其他线性代数库的关系是什么?
我一直在研究我一直在从事的项目的C ++线性代数库。我仍然没有掌握的东西是BLAS和LAPACK与其他线性代数库的连接。 浏览关于线性代数库的这篇文章,我发现有趣的是: 一些库独立于BLAS和LAPACK 有些需要BLAS和LAPACK 有些具有BLAS和LAPACK的可选接口 而且据我了解,您可以使用BLAS和LAPACK直接解决线性代数问题 我可以想象有些库只是用C和Fortran编写的BLAS和LAPACK库的C ++接口,而另一些则实现了自己的替代例程,但是 BLAS和LAPACK的可选接口的含义是什么?选择退出后您失去了什么,图书馆正在做什么呢? 是否有任何库提供的不仅仅是接口?例如,UMFPACK用C编写,并且具有BLAS和LAPACK的可选接口。BLAS和LAPACK不能自己做什么UMFPACK(或其他库)?

3
如何测试数字ODE求解器实现?
此问题是从数学堆栈交换迁移而来的,因为可以在计算科学堆栈交换中回答。 迁移 6年前。 我将开始研究数字ODE求解器的软件库,并且正在为如何为求解器实现制定测试而苦苦挣扎。我的目标是,库,最终将包括两个非刚性和刚性问题解决者,以及至少一个隐式求解(或多或少看齐的能力将ode在Matlab程序),所以测试方法需要反映各问题类型和针对不同求解器的条件。 我现在的问题是,我不知道从哪里开始测试。我可以想到几种不同的方法来测试算法的输出: 测试具有解析解的问题,并检查数值解是否在所有返回的数据点的公差范围内。这需要了解许多分析问题,这些问题具有我想要不同求解器使用的所有属性(刚度,隐式问题等),而我却没有,至少没有超出我的头脑。 此方法测试求解器方法的结果。因此,不能保证求解器实际上是有效的,只是不能解决给定的测试问题。因此,我怀疑需要大量测试问题才能放心地验证求解器是否正常工作。 使用我打算实现的算法在几个时间步骤内手动计算解决方案,然后对求解器进行相同的操作,并检查结果是否相同。这不需要真正解决问题的知识,但是反过来又需要大量动手工作。 这种方法,在另一方面,只测试算法由我来说,这是很好的-如果别人已经证明,4 次阶龙格库塔的作品,我不觉得一个迫切需要。但是,我确实担心制定测试用例会非常麻烦,因为我不知道一种生成测试数据的好方法(除了可能需要手工,否则很多工作……)。 根据我目前的知识,上述两种方法都对我造成严重的限制-我不了解第一个方法的一系列好的测试问题,也不了​​解第二个方法的良好生成方法。 还有其他方法可以验证数值ODE求解器吗?在实现方面还有其他标准需要验证吗?有没有很好的(免费)资源可以测试ODE求解器1? 编辑: 由于这个问题非常广泛,我想澄清一下。我要创建的测试套件将满足两个主要目的: 验证求解器是否可以按预期工作,以解决他们要解决的问题。换句话说,非刚性问题的求解器可以解决刚性问题,但应在非刚性问题上表现出色。同样,如果库中还有其他提供更高准确性的求解器,则可能不必强制执行非常准确的结果-只需“足够准确”即可。因此,我的问题的一部分是对哪些求解程序应使用哪些测试;或至少应该如何决定这一点。 安装磁带库后进行完整性测试。这些测试不必(不应)详尽或费时;只是可以在5秒钟内运行的最基础知识,但是如果有些东西太奇怪了,这将提醒用户。因此,我还需要一种构造测试的方法,该方法非常简单,但是仍然可以告诉我有关库状态的信息。 1是的,我一直在搜寻我的眼睛,但是我发现的大部分内容都是带有非常琐碎示例的讲义,但值得注意的是Bari的CWI ODE测试集例外,我不知道我是否或如何做。可以用于我的目的,因为它比我要测试的解决方案更复杂。
26 ode 

2
Crank-Nicolson是反应扩散对流(对流)方程的稳定离散化方案吗?
我对PDE的常见离散化方案不是很熟悉。我知道Crank-Nicolson是离散化扩散方程的流行方案。平流期也是一个不错的选择吗? 我对解决反应扩散对流方程很感兴趣, ∂u∂t+∇⋅(vu−D∇u)=f∂u∂t+∇⋅(vu−D∇u)=f\frac{\partial u}{\partial t} + \nabla \cdot \left( \boldsymbol{v} u - D\nabla u \right) = f 其中DDD是物质的扩散系数uuu和vv\boldsymbol{v}是速度。 对于我的特定应用,方程式可以写成 ∂u∂t=D∂2u∂x2Diffusion+v∂u∂xAdvection (convection)+f(x,t)Reaction∂u∂t=D∂2u∂x2⏟Diffusion+v∂u∂x⏟Advection (convection)+f(x,t)⏟Reaction\frac{\partial u}{\partial t} = \underbrace{D\frac{\partial^2 u}{\partial x^2}}_{\textrm{Diffusion}} + \underbrace{\boldsymbol{v}\frac{\partial u}{\partial x}}_{\textrm{Advection (convection)}} + \underbrace{f(x,t)}_{\textrm{Reaction}} 这是我应用的Crank-Nicolson方案, un+1j−unjΔt=D[1−β(Δx)2(unj−1−2unj+unj+1)+β(Δx)2(un+1j−1−2un+1j+un+1j+1)]+v[1−α2Δx(unj+1−unj−1)+α2Δx(un+1j+1−un+1j−1)]+f(x,t)ujn+1−ujnΔt=D[1−β(Δx)2(uj−1n−2ujn+uj+1n)+β(Δx)2(uj−1n+1−2ujn+1+uj+1n+1)]+v[1−α2Δx(uj+1n−uj−1n)+α2Δx(uj+1n+1−uj−1n+1)]+f(x,t)\frac{u_{j}^{n+1} - u_{j}^{n}}{\Delta t} = D \left[ \frac{1 - \beta}{(\Delta x)^2} \left( u_{j-1}^{n} - …

3
标准库中的计算成本是多少?
分子模拟中必须处理的主要问题之一是距离相关力的计算。如果我们可以将力函数和距离函数限制为分离距离偶次幂,则只需计算距离的平方即可,而不必担心。但是,如果有奇数次方,则需要处理。rrrr2=r⋅rr2=r⋅rr^2 = {\bf r \cdot r}rrrr=r2−−√r=r2r = \sqrt{r^2} 我的问题是:在通用语言(C / C ++,Fortran,Python)等库中实现的计算成本是多少?通过手动调整特定体系结构的代码,确实可以获得很多性能改进吗?x−−√x\sqrt{x}
26 efficiency 

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.