计算科学

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

3
用数值方法解决一些PDE问题时,可变比例缩放是否必不可少?
在半导体仿真中,通常需要对方程进行缩放以使它们具有归一化的值。例如,在极端情况下,半导体中的电子密度可能会变化超过18个数量级,而电场会发生形状变化,变化超过6个(或更多)数量级。 但是,论文从未真正给出这样做的理由。我个人很高兴以实际单位处理方程式,这样做有任何数值上的优势,否则是不可能的吗?我认为使用双精度数字将足以应付这些波动。 这两个答案都非常有用,非常感谢!

1
在谐波振荡器的情况下,为什么SciPy eigsh()会产生错误的特征值?
我正在开发一些更大的代码,以在计算物理学的背景下执行巨大的稀疏矩阵的特征值计算。由于特征值在分析上是众所周知的,因此我在一维上针对简单的谐波振荡器测试了例程。这样做并将我自己的例程与SciPy的内置求解器进行比较,我遇到了下图中显示的异常情况。在这里可以看到第一个100个数值地计算本征值和分析本征值λ 一个Ñ 一个λñ ü 米λñü米\lambda_{num}λ一个ñ 一λ一种ñ一种\lambda_{ana} 在特征值40附近,数值结果开始与分析结果有所不同。这并不令我感到惊讶(除非在讨论中提到,否则我不会在这里解释原因)。但是,令我惊讶的是eigsh()会生成简并的特征值(大约特征值80)。为什么即使很少的特征值,eigsh()的行为也是如此? import numpy as np from scipy.sparse.linalg import eigsh import myFunctions as myFunc import matplotlib.pyplot as plt #discretize x-axis N = 100 xmin = -10. xmax = 10. accuracy = 1e-5 #stepsize h = (xmax - xmin) / (N + 1.) #exclude first and …

3
Fortran:计时代码部分的最佳方法?
有时在优化代码时需要对代码的某些部分进行计时,但我多年来一直在使用以下代码,但想知道是否有更简单/更好的方法来做到这一点? call system_clock(count_rate=clock_rate) !Find the time rate call system_clock(count=clock_start) !Start Timer call do_something_subroutine !This is what gets timed call system_clock(count=clock_stop) ! Stop Timer e_time = real(clock_stop-clock_start)/real(clock_rate)

1
是否转换
我曾经听说过,当人们试图对数字进行形式积分时 ∫∞0f(x)J0(x)dx∫0∞f(x)J0(x)dx\int_0^\infty f(x) J_0(x)\,\mathrm{d}x 如果平滑且行为良好(例如,本身本身不是高度振荡的,非奇异的等),则将其重写为f(x)f(x)f(x) 1π∫π0∫∞0f(x)cos(xsinθ)dxdθ1π∫0π∫0∞f(x)cos⁡(xsin⁡θ)dxdθ\frac{1}{\pi}\int_0^\pi \int_0^\infty f(x) \cos(x\sin\theta) \,\mathrm{d}x\,\mathrm{d}\theta 并首先数值计算内部积分。我看不出有什么理由可以期望它能起作用,但是数值方法的准确性很少是显而易见的。 当然,我知道执行此操作的最佳方法是使用针对像这样的振荡积分优化的方法,但是出于好奇的缘故,假设我将自己限制为使用某些正交规则。任何人都可以确认或驳斥进行这种转换会提高积分的准确性吗?和/或向我指出解释该问题的消息来源?

5
最小绝对偏差之和(
我有一个数据集并且想要找到参数m,以使其最小化和k ∑ i = 1 | m − x i | 。 那是x1,x2,…,xkx1,x2,…,xkx_{1}, x_{2}, \ldots, x_{k}mmm∑i=1k∣∣m−xi∣∣.∑i=1k|m−xi|.\sum_{i=1}^{k}\big|m-x_i\big|. minm∑i=1k∣∣m−xi∣∣.minm∑i=1k|m−xi|.\min_{m}\sum_{i=1}^{k}\big|m-x_i\big|.


4
如何计算结构相同的两个不同VTK文件中存储的两个字段之间的数值差?
假设我有两个VTK文件,它们都是结构化网格格式。结构化网格是相同的(它们具有相同的点列表,并且顺序相同),并且在每个VTK文件中都有一个字段称为“ Phi”。我想再次创建具有相同结构化网格的第三个VTK文件,并绘制一个字段,该字段是第一个VTK文件中的Phi和第二个VTK文件中的Phi之间的差异。 我知道如何手动执行此操作;我可以解析两个VTK文件中的原始文本,将数据复制到数组中,从另一个数组中减去一个数组,然后将正确格式的数据转储到新文件中。有没有更好的方法来计算此差异并将其导出到VTK?使用Python或像VisIt或Paraview这样的可视化软件中的解决方案比使用像C ++这样的编译语言更可取。 计算该差异的目的是比较用于计算PDE解的不同数值方法。由于我使用相同的软件来生成解决方案,因此我可以保证,除字段Phi外,所有数据在我生成的每个文件中都是相同的。

1
hdf5的替代品
我已经使用HDF5多年了,但是随着数据集大小的增加,我开始遇到这里列出的相同问题 http://cyrille.rossant.net/moving-away-hdf5/ 您能指出我使用HDF5之类的格式吗?-对并行写入的良好支持-支持对大型矩阵的分块访问 我的典型用例是100k x 100k整数矩阵。从逻辑的角度来看,我希望将其作为一个完整的文件,但是我需要使用并行工作程序将其逐块写入。

2
在GPU上解决ODE系统的选项?
我想在“平凡的可并行化”设置下将ODE的求解系统投放到GPU上。例如,使用512个不同的参数集进行灵敏度分析。 理想情况下,我想使用智能自适应时间步长求解器(例如CVODE)而不是固定时间步长(例如Forward Euler)来执行ODE解决方案,而是在NVIDIA GPU而不是CPU上运行它。 有人这样做吗?有图书馆吗?
15 ode  gpu 

1
如何在共享内存模式(如OpenMP)中运行MPI-3.0
我正在并行化代码以数字方式求解5维人口平衡模型。当前,我在FORTRAN中有一个很好的MPICH2并行化代码,但是随着我们增加参数值,数组变得太大而无法在分布式内存模式下运行。 我可以访问具有15个节点的群集,其中每个节点具有两个8个核心CPU和128GB RAM。我想在共享内存模式下以MPI-3.0编写运行程序,以便每个进程都不会生成每个数组的自己的副本。 在集群上运行任何东西之前,必须在运行Ubuntu的桌面上对其进行测试。它实质上是集群的一个刀片,因为它具有两个8个核心CPU和128 GB的RAM。我将在上面编写和测试我的代码,因此请针对在Ubuntu计算机上运行程序调整您的响应。 我已经读到有一种方法可以在共享内存模式(如OpenMP)而不是其默认的分布式内存模式下运行MPI-3.0。 问题: 我将如何更改我的代码?我是否需要添加对其他MPI函数的调用MPI_WIN_ALLOCATE? 如何编译我的代码以在共享内存模式下运行MPI-3.0?如果跨越多个节点,情况会有所不同吗? 请提供示例编译脚本。我也只有GNU编译器。我使用的群集不支持Intel编译器。

1
与Adams-Bashforth算法相比,使用Adams-Moulton有哪些相对优势?
我正在计算两个空间维度和时间上两个耦合的PDE的系统。由于函数评估很昂贵,因此我想使用多步方法(使用Runge-Kutta 4-5初始化)。 使用五个先前的函数求值的Adams-Bashforth方法的全局误差为(在s = 5的情况下O(h5)O(h5)O(h^5)s=5s=5s=5在下面引用的Wikipedia文章下),并且每步需要一个函数求值(每个PDE)。 另一方面,Adams-Moulton方法每个步骤需要进行两次功能评估:一项用于预测步骤,另一项用于校正步骤。再一次,如果使用五个函数求值,则全局误差为。(s = 4O(h5)O(h5)O(h^5)s=4s=4s=4 Wikipedia文章中的) 那么,在Adams-Bashforth上使用Adams-Moulton的背后原因是什么?它具有相同数量级的错误,功能评估的次数是两倍。从直觉上讲,预测校正方法应该是有利的,但是有人可以对此进行定量解释吗? 参考:http : //en.wikipedia.org/wiki/Linear_multistep_method#Adams.E2.80.93Bashforth_methods

2
线性同余生成器的随机数质量
我正在针对各种外力对Langevin方程进行一些模拟。有人告诉我C的rand()使用stdlib.h可能会导致我的结果出现偏差,因此我使用的是梅森·扭曲器。 但是,我想确切地知道(并看到)线性同余生成器可以在模拟中引入什么样的误差。这些是我尝试过的事情: 生成随机数的3D元组以尝试查看超平面。我什么也看不到。 对大随机数向量进行FFT。对于Mersenne Twister和,这几乎是相同的rand()。 检查布朗运动中粒子的均分原理。两个积分器同意的预期值具有相同的有效位数。⟨KE⟩=12kBT⟨KE⟩=12kBT\langle \text{KE}\rangle=\frac{1}{2}k_BT 看看他们在不属于幂二的数个箱中的储物效果如何。两者给出相同的定性结果,没有人比这更好。 综观布朗路径看不清楚分歧。再次,没有运气。⟨x⟩=0⟨x⟩=0\langle x\rangle = 0 圆上的点分布。填充,仅在外围。它们之间以及最近的邻居之间(Shor的回答,在评论中下方)。在该要点中可用,安装所需的库后,只需在Julia 0.5.0中运行即可(请参阅要点以获取说明)。 我想强调的是,我正在物理模拟的背景下寻找引入的偏差。例如,我已经看到rand()在不使用Mersenne Twister的情况下,顽固测试失败了,但是对于我来说,这并不意味着太多。 您是否有任何物理,具体的示例来说明不良的随机数发生器如何破坏蒙特卡洛模拟? 注意:我已经看到PRNG的效果如何RANDU。我对一些不明显的示例感兴趣,这些示例看起来很无辜,但最终会产生偏见。

3
引用了软件最佳实践的参考
我目前正在写博士学位论文。我花费了大量的博士学位来清理和扩展现有的科学代码,应用以前未使用的软件工程最佳实践,并希望在论文中对此进行介绍。与其说“我添加了单元测试”,还不如说这样: J. Doe于1975年发明了单元测试[ 23 ]。Bloggs等人[ 24 ]的最新研究表明,单元测试将软件错误的发生率降低了73%... 234个单独的单元测试已添加到代码库中,由Timpkins等人[ 25 ]创建的xUnit框架进行管理。[23][23]^{[23]}[24][24]^{[24]}[25][25]^{[25]} 我正在寻找被广泛接受的软件工程最佳实践的引证学术参考(最好是在同行评审期刊中的文章,我可以获取DOI,BibTeX等),尤其是: 单元测试 版本控制 模块化/关注点分离 基于性能分析信息的性能性能分析/优化 错误/问题跟踪 我正在寻找有关最初发明以及随后的有效性评估的信息。如果有一篇评论文章在一个地方列出所有这些东西,那就更好了。

3
迭代方法的比较:迭代次数与cpu时间
我正在比较两种用于反转随机平方矩阵的迭代方法。由于矩阵是随机的,因此每个测试用例都需要不同数量的迭代和不同的经过时间。我的问题是,在平均CPU时间之上,这两种方法所使用的迭代平均值是有用的信息,可用于比较这些方法。

1
使用Python和双精度现代GPU进行科学计算
这里有没有人通过Python在新一代(例如K20)GPU中使用过双精度科学计算? 我知道这项技术正在迅速发展,但是目前最好的方法是什么?GPU超出了流行的科学Python库numpy和scipy的范围,我曾经想使用theano,但它似乎只对GPU使用float32精度。我知道google可以为python gpu提供搜索结果,但我希望获得比可能会或可能不会会见其制造商的项目列表更多的见识。
14 python  gpu  precision 

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.