计算科学

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


2
如何在科学程序中使用Fortran中的函数指针
这是C中函数指针的典型用法。我想在Fortran中做类似的事情。我有一些想法,但是我想知道是否有一些规范的方法可以做到。 用户传递的函数指针和上下文将被存储,然后在以后调用。 typedef PetscErrorCode (*TSIFunction)(TS,PetscReal,Vec,Vec,Vec,void*); PetscErrorCode TSSetIFunction(TS ts,Vec res,TSIFunction f,void *ctx); 在以后的不同时间使用他们的上下文来回调用户的功能。 在PETSc中,它们也大量使用字符串->函数指针表。一切都是插件,因此用户可以注册自己的实现,并且是一流的。 #define PCGAMG "gamg" PCRegisterDynamic(PCGAMG ,path,"PCCreate_GAMG",PCCreate_GAMG); 这会将创建例程注册在“ FList”中,然后PCSetFromOptions()可以选择此方法,而不是其他任何选择。如果系统支持动态加载,则可以跳过对PCCreate_GAMG符号的编译时依赖性,而只传递NULL,则将在运行时在共享库中查找该符号。 请注意,这一步骤超出了“工厂”的范围,它是一种类似于马丁·福勒(Martin Fowler)称之为“服务定位器”的控制设备的倒置。 注意:这是在我与杰德·布朗的私人通信中提出的,他在那儿向我提出了这个问题。我决定将其外包,看看人们能提出什么答案。
11 petsc  fortran 

6
哪些开源工具可用于可视化分子振动?
我想想像一个不是正常模式的分子振动。我想展示运动的静态矢量表示,我想在矢量样式(大小,颜色等)上有一些灵活性。我也有兴趣制作振动视频。 显示分子振动有哪些好的资源? 我更喜欢开放源代码工具,但是如果它确实比替代软件更好,我将使用商业软件进行娱乐。

6
具有不规则边界的域的有限差异
谁能帮助我找到有关泊松数值解(有限差分法和Crank-Nicolson方法)的书,以及包括不规则几何体(例如,由矩形和圆形之间的区域组成的区域)的扩散方程(尤其是书本或链接)在这种情况下的MATLAB代码示例)?

5
集中精力学习数学或计算是否更可取?
在研究Krylov子空间方法的同时,我可以选择探索HPC背后的数学或计算理论(硬件,OS,编译器等)领先一步。目前,我知道,这两个足以只是通过获得。例如,我知道如何推导CG方程和迭代方法的基础,但是对于细节和诸如Preconditioners和Convergence之类的更复杂的东西我一无所知。同样,我知道有限元方法的基础(弱形式,非弱形式,诸如Codomain和Galerkin之类的东西),但不知道其深度。在计算方面,我知道如何以所有可能的语言进行串行编码,并且可以很好地使用OpenMP和MPI。我不太了解硬件和缓存。 我的问题是:一个人应该专注于什么:数学或计算?它们在HPC中密不可分吗?是否建议一个人了解一个而不是另一个? 编辑:我目前主修机械工程(我很遗憾),并且有大量的工程和计算课程(流体,传热等)。我今年将加入HPC研究生院,在开始研究生学习之前,我想加强一些方面(数学/比较/混合)。我同样喜欢数学和数学(因此“尽享更多乐趣”是多余的)。

1
如何在有限元法中建立集总质量矩阵
当使用有限元方法求解与时间相关的PDE时,例如说热方程,如果我们使用显式的时间步长,则由于质量矩阵,我们必须求解线性系统。例如,如果我们坚持使用热方程示例, ∂ü∂Ť= Ç ∇2ü∂u∂t=c∇2u\frac{\partial{u}}{\partial{t}} = c\nabla{}^{2}u 然后使用前向欧拉,我们得到 中号(un + 1- 你ñdŤ)= − c KüñM(un+1−undt)=−cKunM(\frac{u^{n+1}-u^{n}}{dt}) = -cKu^{n} 因此,即使我们使用显式的时间步进方案,我们仍然必须求解线性系统。这显然是一个主要问题,因为使用显式方案的主要优点是不必求解线性系统。我已经读过,解决此问题的常用方法是改用“集总”质量矩阵,该矩阵将常规(一致?)质量矩阵转换为对角矩阵,从而使反演变得微不足道。在进行谷歌搜索后,我仍然不能完全确定这个集总质量矩阵是如何创建的。例如,看他的关于扩散-扩散方程的质量集总的数值实验由Edson Wendland Harry和Edmar Schulz编写,他们通过简单地将所有系数求和到对角线上来创建集总质量矩阵。因此,例如,如果我们原始的一致质量矩阵为: ⎛⎝⎜⎜⎜421个22421个1个24221个24⎞⎠⎟⎟⎟(4212242112422124)\begin{pmatrix} 4 & 2 & 1 & 2 \\ 2 & 4 & 2 & 1 \\ 1 & 2 & 4 & 2 \\ 2 & 1 & 2 …

2
计算截断的SVD,一次一个奇异值/向量
是否有一种截断的SVD算法可以一次计算一个奇异值? 我的问题:我想计算一个大的密集矩阵M的前ķķk奇异值(和奇异矢量),但是我不知道k的合适值是多少。M很大,因此出于效率考虑,我宁愿不评估完整的SVD,而只是在之后截断最小的SV。中号中号Mķķk中号中号M 理想情况下,将计算的奇异值的方式σ1个,σ2,…σ1个,σ2,…\sigma_1, \sigma_2,\ldots顺序,从最大(σ1个σ1个\sigma_1)到最小(σñσñ\sigma_n)。这样一来,我可以简单地停止计算计算后ķķk个奇异值,如果σķ/ σ1个σķ/σ1个\sigma_k/\sigma_1下降到低于某个阈值。 是否存在这样的算法(最好使用Python实现)?在谷歌搜索中,我只发现了以k为参数的截断SVD函数,因此迫使您先验猜测。

2
熊猫的局限性及其在Python中的替代方案
我在某处读到Pandas最初是为金融世界开发的,至少不是特别针对自然科学(物理学,生物学等)开发的,所以有没有类似的数据分析Python程序包更加“面向自然科学”? 我刚开始使用Pandas,已经遇到了两个问题,如果不使用其他软件包或自制解决方案便无法解决: 如何处理不确定性? 如何轻松定义我的数据单位? 也许还有其他问题,但我缺乏更准确的经验。目前,我考虑了不确定性软件包来解决第一点,但是我不确定它是否可以在Pandas上正常工作,并且不会降低计算速度。实际上,我并不是在寻找一种具有不确定性的计算方式,而只是一种将不确定性与导入的数据一起存储的简单方法。第二点,我没有找到比创建除DataFrame之外的字典来管理与每个数据关联的单元更好的解决方案。 如果您遇到过同样的问题,您是如何解决的?或者您在自然科学中使用了哪些其他软件包进行Python中的数据处理/存储/分析?

3
小点的3D凸包的体积全部设置在船体上
除了3D之外,我有一个与之前提出的问题类似的问题,我只需要体积而不是船体的实际形状。 更精确地讲,我在3D中得到了一小部分点(例如10-15),已知所有这些点都位于点集的凸包上(因此它们都“重要”并定义了壳)。我只想计算船体的体积,我不在乎计算实际的多面体。有一种有效的算法可以做到这一点吗?

2
梯度下降和共轭梯度下降
对于一个项目,我必须实现这两种方法并比较它们在不同功能上的执行方式。 看来共轭梯度法是要解决的线性方程组 Ax=bAx=b A\mathbf{x} = \mathbf{b} 其中是对称,正定和实数的n×n矩阵。AAA 另一方面,当我阅读有关梯度下降的文章时,我看到了Rosenbrock函数的示例,即 f(x1,x2)=(1−x1)2+100(x2−x21)2f(x1,x2)=(1−x1)2+100(x2−x12)2 f(x_1,x_2) = (1-x_1)^2+100(x_2-x_1^2)^2 如我所见,我无法使用共轭梯度法解决此问题。还是我想念什么?

1
在Matlab中实现最佳运输翘曲
我正在实施“ 注册和翘曲的最佳大众运输 ”一文,我的目标是将其联机,因为我只是在网上找不到任何欧拉大众运输代码,这至少对于图像处理领域的研究界很有意义。 论文可以总结如下: - 使用沿x和y坐标的一维直方图匹配找到初始图 求解,其中u ^ \ perp代表逆时针旋转90度,\ triangle ^ {-1}表示具有Dirichlet边界条件(= 0)的泊松方程的解,和都是雅可比矩阵的行列式。 -保证了时间步长dt &lt;\ min | \ frac {1} {\ mu_0} \ nabla ^ \ perp \ triangle ^ {-1} div(u ^ \ perp)|的稳定性。uuuut=1μ0Du∇⊥△−1div(u⊥)ut=1μ0Du∇⊥△−1div(u⊥)u_t = \frac{1}{\mu_0} Du \nabla^\perp\triangle^{-1}div(u^\perp)u⊥u⊥u^\perp△−1△−1\triangle^{-1}DuDuDudt&lt;min|1μ0∇⊥△−1div(u⊥)|dt&lt;min|1μ0∇⊥△−1div(u⊥)|dt<\min|\frac{1}{\mu_0}\nabla^\perp\triangle^{-1}div(u^\perp)| 对于数值模拟(在常规网格上执行),他们表示使用matlab的poicalc求解泊松方程,他们使用空间有限导数的中心有限差分,但使用逆风方案计算的Du除外DuDuDu。 使用我的代码,映射的能量函数和卷曲适当减小了几次迭代(取决于时间步长,从几十到几千)。但是在那之后,模拟爆炸:能量增加,只需很少的迭代即可达到NAN。我尝试了几个阶数的微分和积分(可以在这里找到cumptrapz的高阶替换项)以及不同的插值方案,但是我总是遇到相同的问题(即使在非常平滑的图像上,各处也不为零等)。 有人会对我所面对的代码和/或理论问题感兴趣吗?代码很短。 具有调试功能的代码 登记功能 测试代码,前提是您要注册两张相同大小的图像 只是必要的功能,没有测试内容(&lt;100行) 请在最后用gradient()替换gradient2()。这是一个高阶梯度,但也不能解决问题。 我现在只对本文的最佳运输部分感兴趣,而不对附加的正则化术语感兴趣。 谢谢 …

1
是否有用于数字软件开发的测试框架
我发现我的许多计算科学编程都具有标准测试框架未涵盖的测试要求: 计算时间测试 为了确保算法不会变慢。我可以做一些类似的事情, assureSmallerEqual(RuntimeWrapper(algorithm),53)但是我希望在我从事算法工作时可以不断降低53秒的阈值,例如assureSmallerEqual(RuntimeWrapper(algorithm),'previousbest+noisetolerance') 性能测试 为了确保以前找到与解析解近似良好的算法,仍然可以找到至少与之相当或更好的解。同样,这可以通过标准集成测试来模拟,但是我希望随着算法变得越来越好,公差会不断缩小。考虑替换assureAlmostEqual(foo(),1,places=3)为assureAlmostEqual(foo(),1,places='previousbest') 物理需求测试 为了确保算法不会突然需要更多的内存/硬盘空间。与1.非常相似。 抽象需求测试 要确保对二次逼近很好的算法不会突然需要三次逼近,或者对时间步长为0.1很好的算法不会突然需要0.01的稳定性。同样,这些可以通过标准集成测试来模拟,但是目标是记住达到某个目标的最小需求参数,因此这将需要大量的手动更新。例如,如果foo(10)以前没有例外,我希望该框架确保foo(10)仍然有效,并尝试foo(9)现在是否有效(在这种情况下,所有将来的测试都将确保foo(9)仍然有效)。 有人可能会争辩说,我所要求的并不是从单元/集成测试的角度描述测试,因为例如可以增加运行时间来换取其他改进,这是可以接受的。 但是实际上,我知道如果我具有上述测试功能,那将节省很多调试时间,因为在95%的情况下,由于引入的错误导致要求和性能出现了问题。确实,我知道这样一个事实,即如果严格地应用了上述测试,可以避免使用外部数值软件库发现的许多错误(经过大量时间检查自己的代码)。 聚苯乙烯 命名类似的问题/programming/34982863/framework-for-regression-testing-of-numerical-code并非重复,因为它描述了使用标准回归测试框架更容易实现的功能。 问题“ 用于单元测试和测试驱动的开发的策略”要求使用策略,而不是帮助实现这些策略的框架(答案中所要求/提供的策略与我在此描述的内容不同)。
10 testing 

1
当具有自治性时,常微分方程数值近似系统是否存在捷径?
解决ODE的现有算法处理函数,其中。但是在许多物理系统中,微分方程是自治的,因此,,而忽略。通过这种简化的假设,可以在现有的数值方法中看到哪些改进?例如,如果,则问题变为,我们转向一类完全不同的算法来集成一维积分。对于,最大可能的改进是减小的维数ÿ∈[RÑdÿdÿdŤ= f(y, t )dydt=f(y,t)\frac{dy}{dt} = f(y, t)ÿ∈ [Rñy∈Rny \in \mathbb R^nÝ∈[RÑ吨Ñ=1吨=∫dÿdÿdŤ= f(y)dydt=f(y)\frac{dy}{dt} = f(y)ÿ∈ [Rñy∈Rny \in \mathbb R^nŤttn = 1n=1n=1 n&gt;1yt = ∫dÿF(y)t=∫dyf(y)t = \int \frac{dy}{f(y)}n &gt; 1n&gt;1n>1ÿyy通过1中,由于随时间变化的情况下,可以通过追加模拟到,改变的结构域从到。y y R n R n + 1Ťttÿyyÿyy[RñRn\mathbb R^n[Rn + 1Rn+1\mathbb R^{n+1}
10 ode  numerics 

1
寻找特征值重新排序算法的基准问题
可以使用正交模拟变换将每个实矩阵简化为实Schur形式。此处,矩阵为准三角形形式,在主对角线上具有1 x 1或2 x 2块。每1由1块对应于一个真实特征值和每个2×2块对应于一对复共轭本征值的。一个一个AŤ= UŤ一个üŤ=üŤ一个üT = U^T A UüüUŤŤT一个一个A一个一个A 特征值重排序问题包括找到正交相似度变换,使得用户对的特征值的选择沿着S = V T T V的左上角的对角线出现。VVV一个一个A小号= VŤŤV小号=VŤŤVS = V^T T V 在LAPACK中,相关的例程双精度例程称为DTRSEN。Daniel Kressner写了一个被封锁的版本,名称为BDTRSEN。ScaLAPACK例程是PDTRSEN。 我正在寻找能够解决特征值重排序问题的真正优势的应用程序和算法。 我们可以轻松地生成准三角形式的测试矩阵,但是在确定用户特征值选择的实际分布形状时遇到了麻烦。 在我看来,具有Ritz加速度的子空间迭代是测试重新排序算法改进的理想算法。它需要(稀疏)矩阵向量乘法,高QR算法和重排序算法。 但是,对于我来说很难发现现实生活中的问题,因为很明显,一组特定的特征对在物理上是有趣的。 我们可以使用共享内存机器对维度为40,000的密集矩阵进行特征值重新排序。当用户选择所有特征值的约50%时,可获得最佳性能。

1
“反犯罪”一词的首次出现
在反问题研究中,通常是从一组已知的参数中构造一个综合数据集,然后测试反演技术是否可以重构这些参数。为此,将适当级别的随机噪声添加到合成数据很重要。此外,如果用于计算合成数据的方法基于有限差分或有限元网格,那么在反演过程中不要使用相同的网格也很重要。否则,反演过程实际上就是对近似数值正向模型进行反演。“反犯罪”一词已用来描述这一点。 当我最初对这些问题感兴趣时,这个词很常用。我知道它会出现在1992年由Colton和Kress出版的《反声学和电磁散射理论》一书中。

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.