计算科学

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

7
通过翻牌计数进行算法分析已经过时了吗?
在我的数值分析课程中,我学会了通过计算相对于问题的大小所需的浮点运算(触发器)的数量来分析算法的效率。例如,在Trefethen&Bau的“数值线性代数”一书中,甚至有3D外观的翻牌计数图片。 现在时髦地说“触发器是免费的”,因为获取不在缓存中的任何内容的内存等待时间比触发器的成本大得多。但是,我们仍在教学生数数失败,至少在数值分析课程中是如此。我们应该教他们计算内存访问吗?我们需要写新的教科书吗?还是内存访问太特定于机器而无法花费时间?从瓶颈还是访问内存的角度来看,长期趋势是什么? 注意:以下某些答案似乎是在回答一个不同的问题,例如“我是否应该过分重写我的实现以节省一些触发器或提高缓存性能?” 但是我要问的更多的是“ 用算术运算或内存访问来估计算法复杂性是否更有用?”

9
函数式程序设计与科学计算
如果这是一个模糊的问题,我深表歉意,但是这里有: 在过去的几年中,函数式编程在软件工程界引起了很多关注。许多人已经开始使用诸如Scala和Haskell之类的语言,并声称比其他编程语言和范例更成功。我的问题是:作为高性能计算/科学计算专家,我们应该对函数式编程感兴趣吗?我们应该参加这次小型革命吗? 函数式编程在SciComp工作领域中的优缺点是什么?

4
是什么使Fortran快速?
Fortran在数值编程中占有特殊的位置。您当然可以使用其他语言来制作优质,快速的软件,但是Fortran虽已发展多年,但仍然保持着出色的性能。此外,在Fortran中编写快速程序更加容易。我已经用C ++编写了快速程序,但是您必须更加小心指针别名之类的内容。因此,必须有一个原因,并且是一个非常技术性的原因。是因为编译器可以优化更多吗?我真的很想知道技术细节,因此,如果我使用另一种语言,则可以考虑这些因素。 例如,我知道-或我认为-有一件事是,该标准指定指针在内存中始终是连续的,这意味着更快的内存访问。我相信您可以在C ++中通过向编译器提供标志来做到这一点。通过这种方式,有助于了解Fortran的优势,因此,如果使用其他语言,我们可以效仿。


4
数值误差的科学标准
在我的研究领域中,实验误差的规范被普遍接受,未能提供实验误差的出版物受到了强烈批评。同时,我经常发现提供的数值计算结果没有考虑任何数值误差,尽管(或者可能是因为)经常有可疑的数值方法正在起作用。我说的是由离散化和数值计算的有限精度等导致的误差。当然,这些误差估计值并不总是很容易获得,例如在流体动力学方程的情况下,但是我似乎常常是由于懒惰而导致的,我相信数值误差估计的规范应该与实验结果一样是标准的。因此,我的问题是:

8
如何将代码链接到出版物
科学计算领域的学术论文(以及如今的许多其他领域)通常包含大量代码或什至是为该论文专门编写的或用于在论文中获得结果的整个软件包。帮助论文读者访问代码的最佳方法是什么?我当前的方法是在论文或引文中添加指向Github存储库的链接(以及特定的版本标签)。

14
建议使用哪些软件和工作流程来发布科学数据和图表?
从简单绘制几个数据点到创建具有详细样式,数学排版和“专业质量”的出版物级图形,哪种软件提供了良好的工作流程? 这与David的问题有关(哪些属性使图形具有专业品质?),但重点不是属性,而是软件或通用的工作流程。我对一些程序(Gnuplot,Origin,Matplotlib,TikZ / PGFplot,Qtiplot)有肤浅的经验,但是同时进行数据分析和漂亮的数字似乎很难做到。 是否有一些软件可以做到这一点,还是我应该更深入地研究其中一个软件包? 编辑:我当前的工作流是不同组件的混合,它们或多或少地协同工作,但总的来说并不能真正有效,我认为这对大学实验室的许多科学家来说都是很典型的。通常,它是一条从实验到发布的链条,如下所示: 获取实验数据(通常为ASCII形式,但布局不同,例如标题,注释,列数) 快速绘制数据,以检查20年前编写的Origin,Gnuplot或奥术绘图程序是否正常。 数据的更详细分析:减去背景贡献,分析依赖性和相关性,符合理论模型。许多科学家使用Origin来完成这项任务,一些Matlab和Python / Scipy / Numpy的使用正在增加。 创建专业人物,这涉及调整期刊指南,数学排版和常规编辑。目前,我为此使用Origin,但是它有一些缺点(仅尝试获得精确为0.5pt的线宽是不可能的)。对于组合/抛光图形,我主要使用Adobe Illustrator,因为它可以很好地处理PDF文档的导入/导出,但是我宁愿不必为每个图执行两个步骤。 我添加了一个示例,最后看起来是什么样的(因为大多数情况下都是通过手工更改来创建的,这很痛苦,并且提供界面(例如,为所有元素设置线宽的界面的任何内容都会很不错)):

3
并行ODE方法的最新技术水平是什么?
我目前正在研究ODE集成的并行方法。有很多新旧文献描述了各种各样的方法,但是我没有发现任何有关该主题的最新调查或概述文章。 Burrage着有这本书[1],但是它已经有20多年的历史了,因此没有涵盖许多更现代的想法,例如超现实算法。 [1] K. Burrage,常微分方程的并行和顺序方法,克拉伦登出版社,牛津,1995年

2
为什么除法比其他算术运算那么复杂?
我最近遇到一种情况,我需要在一个缺少整数的运算符(ARM Cortex-A8)上进行整数除法运算。在尝试研究为什么必须这样做时,我发现在几乎所有整数(或定点)架构上,除法运算比加法,减法或乘法要花费更多的周期。为什么会这样呢?它不是像其他所有东西一样用两层AND-OR逻辑表示的吗?

5
是否可以在SciComp从事职业而不贡献武器研究?
我正在参加有关数值方法的国际会议(ICIAM2019),并对与武器研究直接相关的应用盛行感到惊讶。 例子: 一位获奖者讲述了雷达重建/运动物体检测的数学问题,他在演讲中描述了在地面上使用主动雷达探测“运动对象”在8 km高的雷达“平台”的状况,关于这个问题有多么棘手。 人们正在提出精确解析和模拟冲击波的方法,而谷歌的快速搜索显示他们正在从事“惯性约束融合”。 在会后的晚餐上,我坐在洛斯阿拉莫斯做数字的人们旁边。 我正在使用应用数学和数值方法来攻读博士学位,老实说,我没想到获得奖项并被摆上大舞台的人们正在进行武器研究。我还注意到,大概比我聪明的听众对这项工作表示赞赏。 我想知道我是否想成为这个社区的一员,是否有可能在不直接或间接地促进武器研究的情况下建立应用数学事业。这是耸耸肩的东西吗?我现在还处于初期,非常感谢经验丰富的人们的建议。

4
MATLAB反斜杠运算符如何求解平方矩阵的
我将一些代码与“常规” MATLAB代码进行了比较。我对结果感到惊讶。 我运行了一个示例代码(稀疏矩阵) n = 5000; a = diag(rand(n,1)); b = rand(n,1); disp('For a\b'); tic;a\b;toc; disp('For LU'); tic;LULU;toc; disp('For Conj Grad'); tic;conjgrad(a,b,1e-8);toc; disp('Inv(A)*B'); tic;inv(a)*b;toc; 结果: For a\b Elapsed time is 0.052838 seconds. For LU Elapsed time is 7.441331 seconds. For Conj Grad Elapsed time is 3.819182 seconds. Inv(A)*B Elapsed time …

7
如果我希望将来的代码在petascale机器上运行,我应该投资哪种编程范例?
从对Top500的调查中可以很明显地看出,该行业正朝着处理核心呈指数增长的趋势发展。最大的超级计算机都使用MPI进行节点之间的通信,尽管似乎没有明显的节点上并行性趋势,并且使用最简单(但不一定是最有效)的方法将单个MPI进程映射到每个核心,自动来自编译器,OpenMP,pthreads,CUDA,Cilk和OpenCL的并行化。 我是维护和开发有潜力在世界上一些最大的超级计算机上使用的代码的一组科学家之一。假设开发人员时间有限,那么我该如何适应未来的发展,以便可以利用世界上功能最强大的计算机的性能?我应该对流程互连体系结构做出哪些假设?当我们进入众核时代时,将遭受哪些范式?在Petascale机器上是否可以在生产中使用分区的全球地址空间语言?


6
用于Matrix表达式的符号软件包?
我们知道是对称且正定的。我们知道是正交的:乙一种A\mathbf A乙B\mathbf B 问题:对称且正定的吗?答:可以。乙 ⋅甲 ⋅乙⊤B⋅A⋅B⊤\mathbf B \cdot\mathbf A \cdot\mathbf B^\top 问题:电脑可以告诉我们吗?答:可能吧。 是否存在处理和传播有关矩阵的已知事实的符号代数系统(例如Mathematica)? 编辑:明确地说,我问这个问题关于抽象定义的矩阵。即我没有和显式条目,我只知道它们都是矩阵,并且具有特殊的属性,例如对称,正定等。乙一种AA乙BB


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.