计算科学

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

7
在Python中并行化for循环
Python中是否有任何类似Matlab parfor的工具?我找到了这个线程,但是已经有四年了。我认为也许有人在这里可能有更多的近期经验。 这是我要并行化的事物类型的示例: X = np.random.normal(size=(10, 3)) F = np.zeros((10, )) for i in range(10): F[i] = my_function(X[i,:]) where my_function取一个ndarraysize (1,3)并返回一个标量。 至少,我想同时使用多个内核,例如parfor。换句话说,假设具有8到16核的共享内存系统。

6
什么属性使图形“专业品质”?
我听说有人说,ORIGIN制作的地块看起来看起来像是光滑且“专业的”,而Mathematica制作的地块则看起来并不专业。但是,大多数绘图创建程序都是可配置的,因此可以断定,通过正确设置刻度位置和标签,字体和颜色选择,标签对齐等设置,我应该能够使用Mathematica制作图形/ matplotlib / Gnuplot / etc。看起来和ORIGIN的产品一样好。但是,在这种情况下,一个人物“专业”意味着什么? 换句话说,如果我的目标是创造出可能看起来最好的图形以包含在科学论文中,那么通常建议针对该目标选择哪些设计选择?显然,人们必须选择适当的那种情节,如柱状图与散点图和线性对数刻度,但这些选择,我们总是想到无论哪个绘图程序,我们正在使用。我对我们通常不会考虑的事物更感兴趣,这些事物通常是根据某些绘图程序的默认设置进行设置的,但是可以更改它们以改善图形的外观。

11
发表强调软件的论文的场所
软件是计算科学的基础部分,并且日益被视为科学记录的必要部分。鉴于使用现有代码和经过良好测试的代码的价值,似乎有必要尽可能广泛地交流有用代码的存在并赞扬其创建者。在学术环境中,这意味着发表一些主要针对软件的论文。 谁可以在哪里发表主要着眼于计算软件的学术著作?完全清楚地说,我指的是可能不包含任何新的数学,算法等的作品-它们实际上专注于软件。 我也想听听那些向这些期刊提交过此类论文的人的来信,他们的经历是什么样的,以及他们推荐的场所。 给出的答案摘要: 数学软件交易 科学编程 SIAM科学计算期刊(SISC)软件部分 数值软件档案 开放式研究计算 计算机物理通讯 工程软件的进步 统计软件杂志 化学理论与计算杂志 生物学和医学的源代码 一号 国际量子化学杂志 流行病学 科学与工程计算 计算化学 地球科学模型开发 机器学习研究杂志 数学编程计算 开源软件杂志

1
截至2013年末,CUDA与OpenCL
从程序员的角度来看,CUDA和OpenCL在2013年末之间如何比较?我的小组正在考虑尝试利用GPU计算。通过选择仅支持OpenCL但不支持CUDA的硬件,我们是否会大大限制自己? 具体来说,以下假设是否正确? CUDA中所有可能的功能在OpenCL中也可能 只要我们不使用库,给定的任务就不会很容易(或更难)地完成 CUDA的主要优势是库的可用性 两者都对所有三个主要平台(Win / OSX / Linux)都具有良好的支持。
34 hpc  gpu  cuda  opencl 

8
如何确保模拟结果和论文中的结果始终保持同步?
在我的一篇论文中,我列出了一些数字结果以及一些数字。我想做的是确保论文中的数值结果始终与代码一致。现在,我只是将模拟结果的数值结果直接复制到纸张中,这非常简单且技术含量低,但容易出错,因为我可能会错误地复制结果,或者忘记将纸张结果与代码输出。 有没有一种很好的方法可以使我在论文中引用的数值结果与我的代码生成的结果保持同步?(在这里,我认为执行代码很容易且实用,只要我想更新论文即可。)这些数值结果不一定适合表格形式。有时,手稿中有表格,但更常见的是,我在方程式中将仿真参数列为数字。例如: y∗=(y∗1,…,y∗n)y∗=(y1∗,…,yn∗)\begin{align} \mathbf{y}^{*} = (y_{1}^{*}, \ldots, y_{n}^{*}) \end{align} 我想替换初始条件y ∗的元素y∗y∗\mathbf{y}^{*}用实际参数我在模拟中使用了实际参数,该模拟对常微分方程组进行了数值积分。使用一个表来处理一次性数据(例如本例)似乎是多余的,而且墨水过多。 我认为数字是一种更简单的情况:只要“构建”文档(从LaTeX源,Markdown,RST等),就可以通过执行代码来开始构建过程。但是,如果人们有更好的建议可以使模拟生成的图形与我的论文保持同步,那么我很乐意听到它们。

6
有简单的方法可以数值求解时间相关的薛定ding方程吗?
我想对一维简单电位上的波包散射进行一些简单的模拟。 是否有简单的方法来数值求解单个粒子的一维TDSE?我知道,通常来说,尝试使用朴素的方法来积分偏微分方程会很快以灾难告终。因此,我正在寻找算法 在数值上是稳定的 易于实现,或易于访问的代码库实现, 运行得相当快,希望 比较容易理解。 我还想相对地避开频谱方法,尤其是那些只像往常一样解决与时间无关的Schrödinger方程的方法。但是,我对使用B样条或诸如此类的伪谱方法感兴趣。如果该方法可以发挥与时间有关的潜力,那么那绝对是一个好处。 当然,任何这种方法都将始终具有许多缺点,因此我想听听这些缺点。什么时候不起作用?什么是常见的陷阱?可以采用哪些方法,不能采用哪些方法?

2
在完全封闭的诺伊曼边界条件(边界处的反射)下通过有限差分求解对流方程时的奇异振荡
我正在尝试求解平流方程,但是当波从边界反射时,解决方案中会出现奇怪的振荡。如果有人在看过此文物之前,我很想知道原因以及如何避免它! 这是一个动画gif,在单独的窗口中打开以查看动画(它仅被缓存一次,或仅播放一次!) 请注意,在波开始从第一个边界开始反射之前,传播似乎非常稳定。您认为这里可能会发生什么?我花了几天时间仔细检查我的代码,找不到任何错误。奇怪的是,似乎有两种传播的解决方案:一种是积极的,一种是消极的。从第一个边界反射之后。解决方案似乎沿着相邻的网格点传播。 实现细节如下。 对流方程, ∂ü∂Ť= v ∂ü∂X∂ü∂Ť=v∂ü∂X\frac{\partial u}{\partial t} = \boldsymbol{v}\frac{\partial u}{\partial x} 其中是传播速度。vv\boldsymbol{v} Crank-Nicolson是对流方程的无条件 稳定离散化,条件是在空间中缓慢变化(傅立叶变换时仅包含低频分量)。u (x )ü(X)u(x) 我应用的离散化是 ϕn + 1Ĵ- φñĴΔ Ť= v [ 1 - β2 Δ X(ϕñj + 1- φñj − 1) + β2 Δ X(ϕn + 1j + 1- φn + 1j − 1)]ϕĴñ+1个-ϕĴñΔŤ=v[1个-β2ΔX(ϕĴ+1个ñ-ϕĴ-1个ñ)+β2ΔX(ϕĴ+1个ñ+1个-ϕĴ-1个ñ+1个)] …


3
如何选择一种求解线性方程的方法
据我所知,有四种方法可以解决线性方程组(如果有更多方法,请纠正我): 如果系统矩阵是满级方阵,则可以使用Cramer规则; 计算系统矩阵的逆或伪逆; 使用矩阵分解方法(将高斯或高斯-乔丹消除法视为逻辑分解); 使用迭代方法,例如共轭梯度法。 实际上,您几乎从不希望通过使用Cramer规则或计算逆或伪逆来求解方程,尤其是对于高维矩阵,因此第一个问题是何时分别使用分解方法和迭代方法。我猜这取决于系统矩阵的大小和属性。 就您所知,第二个问题是,就数值稳定性和效率而言,哪种分解方法或迭代方法最适合某些系统矩阵。 例如,使用共轭梯度法来求解方程,其中矩阵是对称和正定的,虽然它也可以应用到任何线性方程通过转换Ax=bAx=b\mathbf{A}x=b到ATAx=ATbATAx=ATb\mathbf{A}^{\rm T}\mathbf{A}x=\mathbf{A}^{\rm T}b。对于正定矩阵,也可以使用Cholesky分解方法来寻找解。但是我不知道何时选择CG方法以及何时选择Cholesky分解。我的感觉是,对于大型矩阵,我们最好使用CG方法。 对于矩形矩阵,我们可以使用QR分解或SVD,但同样,我也不知道如何选择其中之一。 对于其他矩阵,我现在不介绍如何选择合适的求解器,例如厄米/对称矩阵,稀疏矩阵,带矩阵等。


9
学习有限元的现代资源
我需要开始使用有限元方法。我即将开始使用Claes Johnson 的有限元方法来阅读偏微分方程的数值解,但它的日期为1987年。 两个问题: 1)那里有关于该主题的较新的好的资源/教科书/电子书/讲义? 2)通过阅读1987年的书,我有多少想念的地方? 谢谢。


2
什么时候应该使用log1p和expm1?
我有一个简单的问题,对于Google来说真的很难(除了每位计算机科学家应该知道的有关浮点算术的规范论文之外)。 什么时候应该使用诸如log1p或的功能expm1代替log和exp?什么时候不应该使用它们?这些功能的不同实现在用法上有何不同?

8
科学的工作流程管理系统
谁能推荐我一个好的工作流程管理系统(WMS),最好使用Python?到目前为止,我一直在使用GNU Make,但是它引入了一层我想避免的复杂性。一个好的WMS应该具有以下功能: 与命令行工具和Python脚本轻松集成, 简单易用,重量轻, 处理依赖关系 提供命令行界面, 提供日志记录机制, (可选)提供数据来源。 我知道WMS在生物信息学中非常流行(例如Galaxy),但是我正在寻找更通用的东西。
30 software  python 

4
有哪些工具或方法可用来加快用Python编写的代码的速度?
背景:我想我可能想移植一些使用Krylov子空间方法从MATLAB到Python来计算矩阵指数矢量乘积的代码。(具体来说,是Jitse Niesen的expmvp函数,该函数使用本文中介绍的算法。)但是,我知道,除非我大量使用了来自编译库的模块中的函数(即,我仅使用原始Python,并且没有很多内置的Python代码,在功能上),那么它可能会很慢。 问题:哪些工具或方法可用来帮助我加快用Python编写的代码的性能?特别是,我对使流程尽可能自动化的工具感兴趣,尽管也欢迎使用一般方法。 注意:我有一个较旧版本的Jitse算法,并且已经有一段时间没有使用它了。快速编写此代码可能很容易,但是我觉得它可以成为一个很好的具体示例,并且与我自己的研究有关。辩论我在Python中实现此特定算法的方法完全是另一个问题。

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.