计算科学

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

2
关于量子蒙特卡洛的困惑
我的问题是关于从QMC方法中提取可观察物,如本参考资料中所述。 我了解各种QMC方法(例如路径积分蒙特卡洛)的形式派生。但是,到最后,我仍然对如何有效使用这些技术感到困惑。 量子MC方法推导的基本思想是通过Trotter近似离散化算子,该算子可以是量子系统的密度矩阵或时间演化算子。然后,我们获得了具有附加维度的经典系统,可以使用MC方法对其进行处理。 考虑到我们可以解释在量子算符ë - β ħ既作为逆温度和虚时间,这些算法的目的应该是计算该操作者的近似。确实,如果我们直接从模拟采样的各种配置中测量量,那么在“逆温度”情况下,我们将有一些样本遵循基于β / M的概率密度,其中Mββ\betaË- βH^e−βH^e^{−\beta\hat{H}}β/米β/M\beta/M中号MM是Trotter分解中引入的离散步骤数。取而代之的是,在“虚假时间”情况下,我们将在各个离散的时间步长上获取样本,从而也获得沿时间的平均值。我们也不会获得像数量在给定时间吨,与甲一些可观察到的操作者。⟨ ψŤ| 一个^| ψŤ⟩⟨ψt|A^|ψt⟩\langle\psi_t|\hat{A}|\psi_t\rangleŤtt一个^A^\hat{A} 但是,我认为我们直接从这种模拟中采样了数量(摘自文档的(5.34),第35页): O¯≡⟨O^(X)⟩≡1N!∑P∫O(X)π(X,P)dXO¯≡⟨O^(X)⟩≡1N!∑P∫O(X)π(X,P)dX\bar{O} \equiv \langle \hat{O}(X) \rangle \equiv \frac{1}{N!} \sum_P \int O(X) \pi(X,P) dX 给定额外的维数,它不能是与量子系统有关的量。取而代之的是,可以通过公式(5.35)计算正确的量子量,该公式在每个样本中包含模拟配置的整链:MMM EthN=⟨d2τ−m2(ℏτ)2MN∑j=1M(Rj−Rj+1)2+1MN∑j=1MV(Rj)⟩EthN=⟨d2τ−m2(ℏτ)2MN∑j=1M(Rj−Rj+1)2+1MN∑j=1MV(Rj)⟩\frac{E_{th}}{N}= \left\langle \frac{d}{2 \tau} - \frac{m}{2 (\hbar \tau)^2MN } \sum_{j=1}^{M} (\mathbf{R}_j -\mathbf{R}_{j+1})^2 + \frac{1}{MN} \sum_{j=1}^{M} V(\mathbf{R}_j) \right\rangle 我是否需要一系列QMC模拟来提取有关给定可观测量的有用信息,对吗?

5
例如,当处理大型雅可比矩阵时,如何处理数字代码中的复杂性?
我正在求解一个耦合方程组的非线性系统,并且已经计算出离散系统的雅可比行列式。结果是非常复杂,下面是(仅!)的第一一个的3列3 × 93×93\times 9矩阵, (之所以会出现复杂性,部分原因是数值方案需要指数拟合才能保持稳定性。) 关于使用Jacobian实现数字代码,我有一个普遍的问题。 我可以继续在代码中实现此矩阵。但是我的直觉告诉我,由于纯粹的复杂性和不可避免的引入错误,期望几天(也许几周!)乏味的调试。似乎不可避免地如何应对这样的复杂性?您是否使用从符号包中自动生成代码(然后手动调整代码)? 首先,我计划用有限差分近似调试解析雅可比行列式,我是否应该注意任何陷阱?您如何处理代码中的类似问题? 更新资料 我正在用Python进行编码,并使用sympy生成了Jacobian。也许我可以使用代码生成功能?


1
Parareal,PITA和PFASST有什么区别?
Parareal,PITA和PFASST算法都是跨域技术,用于并行解决时间相关问题的解决方案。 这些方法背后的指导原则是什么? 它们之间的主要区别是什么? 我可以说一个基于另一个吗?怎么样? 那他们的应用呢? 我知道对“哪个更好?”这个问题没有答案,但是对它们的应用领域和验证条件的充分了解对我有帮助。

2
Fortran中的Octree代码
我是科学计算的新手。我正在寻找Octree的Fortran(最好是f90)实现。 我的问题需要一个Octree来划分我的域,直到在任何框中不超过N个粒子(或我知道密度值的源,可以将其插入积分方程法来求解类似Laplace方程的方程)。 我所能找到的就是这个C ++实现。我想知道是否已经可以使用现有的Fortran库。 此外,将对关于Fortran中Octree实施的好的论文建议可以使用,以便在计算盒上应用快速积分方程方法变得容易,我们将不胜感激!

4
部分奇异值分解(SVD)的内存有效实现
为了简化模型,我想计算与矩阵最大20个奇异值相关的左奇异矢量,其中和。不幸的是,我的矩阵将是稠密的,没有任何结构。 Ñ ≈ 10 6 ķ ≈ 10 3甲A∈RN,kA∈RN,kA \in \mathbb R^{N,k}N≈106N≈106N\approx 10^6k≈103k≈103k\approx 10^3AAA 如果我只是svd从numpy.linalgPython模块中的例程中调用该大小的随机矩阵,则会遇到内存错误。这是由于的分配用于分解。甲= V 小号ùV∈RN,NV∈RN,NV\in \mathbb R^{N,N}A=VSUA=VSüA = VSU 周围有避免这种陷阱的算法吗?例如,通过仅建立与非零奇异值关联的奇异矢量。 我准备在计算时间和准确性上进行交易。

2
间断的Galerkin / Poisson / Fenics
我正在尝试使用Discontinuous Galerkin方法(DG)和以下离散化方法求解二维Poisson方程(抱歉,我有一个png文件,但不允许上传): 方程: ∇⋅(κ∇T)+f=0∇⋅(κ∇T)+f=0\nabla \cdot( \kappa \nabla T) + f = 0 新的方程: q=κ∇T∇⋅q=−fq=κ∇T∇⋅q=−fq = \kappa \nabla T\\\nabla \cdot q = -f 弱形式与数值通量Ť和q:T^T^\hat{T}q^q^\hat{q} ∫q⋅wdV=−∫T∇⋅(κw)dV+∫κT^n⋅wdS∫q⋅∇vdV=∫vfdV+∫q^⋅nvdS∫q⋅wdV=−∫T∇⋅(κw)dV+∫κT^n⋅wdS∫q⋅∇vdV=∫vfdV+∫q^⋅nvdS\int q \cdot w dV = - \int T \nabla \cdot (\kappa w) dV + \int \kappa \hat{T} n \cdot w dS\\ \int q \cdot \nabla v …

1
隐式时间离散化的cuda和数值方法
我希望移植一些通过IMPLICIT形式的有限体积方法(用于时间离散化)解析一组偏微分方程(PDE)的代码。 结果,存在由ADI / TDMA方案处理的x,y,z方向上的三对角方程组。 我似乎找不到关于使用CUDA进行PDE的隐式解决方案的任何信息。 ADI / TDMA方案是否可以在CUDA中实现?某处是否有类似2D热扩散方程的示例? 我所能找到的是一个二维热扩散方程的CUDA示例代码,它具有有限的差异,但形式为EXPLICIT(剑桥大学)。 任何提示/参考将不胜感激。

3
制造的不可压缩的Navier-Stokes解决方案-如何找到无散度的速度场?
在制造解决方案(MMS)的方法中,假设一个精确的解决方案,将其代入方程式并计算相应的源项。然后将该解决方案用于代码验证。 对于不可压缩的Navier-Stokes方程,MMS容易导致连续性方程中的源项(非零)。但是,并非所有代码都允许连续性方程式中使用源项,因此对于这些代码,只有制造的具有无散度速度场的解决方案才可以。我发现该示例适用于域 \ begin {align} u_1&=-\ cos(\ pi x)\ sin(\ pi y)\\ u_2&= \ sin(\ pi x)\ cos(\ pi y)\ end {align} 在一般的3D情况下,如何制造无散度的速度场?Ω=[0,1]2Ω=[0,1]2\Omega=[0,1]^2 u1u2=−cos(πx)sin(πy)=sin(πx)cos(πy)u1=−cos⁡(πx)sin⁡(πy)u2=sin⁡(πx)cos⁡(πy)\begin{align} u_1 &= -\cos(\pi x) \sin(\pi y) \\ u_2 &= \sin(\pi x) \cos(\pi y) \end{align}

1
在科学计算的背景下,C ++ 11 move语义会产生什么影响?
C ++ 11引入了移动语义,例如,在C ++ 03需要执行副本构造或副本分配的情况下,可以提高代码性能。该文章报道说,下面的代码与C + 11编译经历了5倍加速: vector<vector<int> > V; for(int k = 0; k < 100000; ++k) { vector<int> x(1000); V.push_back(x); } 在科学计算的背景下,C ++ 11 move语义会产生什么影响? 我对这个问题很感兴趣,但更具体地说,我对使用Boost库编写的有限元代码的移动语义也很感兴趣。我使用增强版1.47.0(因为增强版发行说明中提到了移动语义是在1.48.0中引入的)和增强版1.53.0 (使用增强版1.47.0)测试了自己的一些C ++ 03代码,但是我没有注意到太多改进。我想任何积蓄从不必为做复制建筑boost::numeric::ublas::vector/ matrix和boost::function不显着的,因为求解系统矩阵构成块体的工作量。 编辑:实际上,似乎只为移动语义实现了boost::function(请参见1.52.0版发行说明)。中没有提到移动语义boost::numeric,我将源代码拼凑起来以确保没有似乎右值引用。


5
不可压缩流的定义
众所周知,不可压缩的流动实际上并不存在,它的引入是为了简化控制方程。我们不能简单地应用这个假设。通常,马赫数(不可压缩流的M <0.3),密度变化(零密度变化)和速度的发散(对于不可压缩流等于零)是将流定义为不可压缩流的通用标准。观察到,在传热问题(例如自然对流)的情况下,密度会发生变化,这违反了最后两个条件。是否可以定义不可压缩的流动假设,其中还包括传热过程(意味着密度变化)?

1
在Matlab中,linsolve和mldivide有什么区别?
在matlab中,在所有确定的,超定的和未定的情况下,linsolve和mldivide都用于求解线性方程组。 阅读他们的文档,我想知道他们之间有什么区别?在这三种情况下,他们是否使用几乎相同的矩阵分解和三角化算法? 如果A具有opts中的属性,则linsolve比mldivide快,因为linsolve不执行任何测试来验证A具有指定的属性 mldivide是否执行相同的测试以验证A是否具有特殊属性?还是mldivide只是将它们视为一般情况而没有特殊属性? 谢谢!

2
用矩阵参数解线性系统
我们都熟悉解决标准线性系统的多种计算方法 Ax=b.Ax=b. Ax=b. 但是,我很好奇是否有任何“标准”计算方法可以解决以下形式的更一般的(有限维)线性系统 A m 1 × n 1 B m 2 × n 2 L m 1 × n 1 m 2 × n 2LA=B,LA=B, LA=B, 其中,是一个矩阵,是一个矩阵,而是将矩阵矩阵的线性算子,这不涉及向量化矩阵,即将所有内容转换为标准形式。 AAAm1×n1m1×n1m_1\times n_1BBBm2×n2m2×n2m_2\times n_2LLLm1×n1m1×n1m_1\times n_1m2×n2m2×n2m_2\times n_2Ax=bAx=bAx=b 我问的原因是我需要为解以下方程式:uuu (R∗R+λI)u=f(R∗R+λI)u=f (R^*R+\lambda I)u=f ,其中是2d Radon变换,其伴随元素,和均为2d数组(图像)。可以对这个方程进行矢量化处理,但这很痛苦,尤其是当我们使用3D时。R * u fRRRR∗R∗R^*uuufff 更一般而言,阵列呢?例如,求解,其中和是3D数组(在某些时候,我也需要使用Radon变换进行此操作)。L A = B A BnDnDnDLA=BLA=BLA=BAAABBB 谢谢,如果您有需要,可以随时将我运送到另一个StackExchange。

2
Crank-Nicolson离散化是否维持了热方程的最大/最小原理?
我正在使用Crank-Nicolson有限差分方案来求解一维热方程。我想知道热方程的最大/最小原理(即最大/最小发生在初始条件还是边界上)是否也适用于离散解。 Crank-Nicolson是一个稳定且收敛的方案,这可能暗示了这一点。但是,您似乎可以使用Crank-Nicolson模具创建的矩阵通过线性代数参数直接证明这一点。 我将不胜感激任何与此有关的文献资料。谢谢。

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.