计算科学

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

1
有什么方法可以解决可压缩的欧拉方程
我想为可压缩的Euler方程编写自己的求解器,最重要的是,我希望它在所有情况下均能正常运行。我希望它是基于FE的(DG可以)。有哪些可能的方法? 我知道要进行零阶DG(有限体积)处理,并且应该非常可靠。我已经实现了基本的FVM求解器,并且效果很好,但是收敛速度很慢。但是,这绝对是一种选择。 我为线性化的Euler方程实现了FE解算器(适用于任何网格和任何元素的多项式阶数),但是我得到了虚假的振荡(最终爆炸了,因此无法使用它来解决我的问题),我在文献中读到,需要稳定它。如果我实施某种稳定化处理,那么对所有问题(边界条件和几何形状)都可以有效地发挥作用吗?收敛速度是多少? 除此之外,欧拉方程还有其他健壮的方法(即具有一定稳定性的高阶DG)吗? 我知道许多人在研究代码中尝试了许多不同的方法,但是我对一种适用于所有几何形状和边界条件的健壮方法感兴趣(编辑:在2D和3D中)。

2
对于双曲型PDE,应使用哪种时间积分方法?
如果我们采用线法对双曲型PDE进行离散化(时间和空间离散化),则在空间离散化之后,通过我们最喜欢的数值方法(fx。有限体积法)获得的结果在实际中是否重要,我们采用哪种ODE求解器进行时间离散化(TVD / SSP /等)? 添加了一些其他信息:精度问题可能是非平滑问题的问题。众所周知,尽管初始解很平滑,但非线性双曲型PDE仍会在有限的时间内产生冲击,在这种情况下,对于高阶方法,精度可能降为一阶。 通常基于线性化进行ODE稳定性分析,以获得形式为q_t = J q(带有qa扰动向量)的ODE线性半离散系统,其中J的特征值应在选定时间的绝对稳定性范围内进行标度,步进方法。替代策略是使用伪光谱或能量方法进行稳定性分析。 我知道,TVD / SSP方法的动机是避免因时间步长方法引起的假性振荡,否则可能会导致不自然的行为。问题是,经验是否表明这些类型的时间步伐方法比例如经典的工作马(如明确的Runge-Kutta方法)或其他方法更优越。显然,它们对于解决方案可能会显示冲击的问题类别应具有更好的性能。因此,有人可能会争辩说,我们应该只将这些类型的方法用于时间积分。


3
在数学上,为什么质量矩阵/载荷矢量集总起作用?
我知道人们经常用集总的对角矩阵代替一致的质量矩阵。在过去,我还实现了一个代码,其中负载矢量以集总方式而不是FEM一致方式进行组装。但是我从来没有研究过为什么我们首先被允许这样做。 集总背后的直觉是什么,它允许将其应用于质量和载荷矢量?它的数学依据是什么?在什么情况下不允许集总/不是质量和载荷矢量的良好近似?

2
用C ++编写数值软件的设计模式
我正在寻找有关数字软件的设计模式和原理的资源,可能但不一定集中于面向对象的数字代码方法。 我知道《写作科学软件:良好风格指南》一文,但这仍然涉及浮点问题,如何以及何时进行优化等问题。 我正在寻找的信息大局观的设计数字代码,而不是任何与算法等的交易。 我希望有足够的资源来解决这个问题,并且不要让一个库一个库地遍历每个库,特别是因为除了我自己对C ++好的习惯用法和实践的了解之外,没有关于如何正确设计事物的指南。 (这不是特定于语言的,但是如果有任何特定于语言的内容,我希望使用C ++。)

2
用另一种krylov方法预处理krylov方法
在类似gmres或bicgstab的方法中,使用另一种krylov方法作为前置条件可能会很有吸引力。毕竟,它们很容易以无矩阵的方式并在并行环境中实现。例如,一个库尔使用未经预处理的bigcstab的几次迭代(约5次)作为gmres的预处理器,或krylov方法的任何其他组合。在文学界,我没有太多参考这种方法,所以我希望这是因为它不是很有效。我想了解为什么效率不高。在某些情况下,这是一个不错的选择吗? 在我的研究中,我对在并行(MPI)环境中解决3D椭圆问题感兴趣。

3
HDF5文件是否适合git版本控制?
我不熟悉HDF5中使用的文件格式,但是我想知道HDF5文件是否适合git的版本控制(例如Mercurial或Subversion)?我想我的意思是:HDF5文件是否适合基于行的差异处理,或者git是否必须将HDF5视为一个大二进制文件并为每个修订版本存储整个副本?

1
为什么固定点以删除空空间不好?
具有所有Neumann边界条件的Poisson方程具有单个恒定维的零空间。通过Krylov方法求解时,可以通过在每次迭代中减去解的平均值或固定单个顶点的值来删除零空间。 固定单个顶点具有简化的好处,并且还避免了每个投影的额外全局缩减。但是,由于其对调节的影响,通常将其视为不良。因此,我总是减去均值。 但是,这两种方法之间的差异最多为2级校正,因此根据(1),它们应该以几乎相同的迭代次数收敛(至少在精确的算术中)。这个推理是正确的,还是还有其他原因导致点固定不好(也许算术不精确)? (1):低秩修改如何影响Krylov方法的收敛性?



3
将隐式曲面拟合到定向点集
我有一个关于二次拟合到一组点和相应法线(或等效切线)的问题。二次曲面拟合点数据已得到很好的探索。部分作品如下: 二次曲面的类型约束直接拟合,James Andrews,Carlo H.Sequin 计算机辅助设计与应用,10(a),2013,bbb-ccc 代数拟合二次曲面数据的,一铝Subaihi和GA沃森,邓迪大学 诸如此类的一些作品也涉及到拟合投影轮廓。 从所有这些作品中,我认为Taubin的二次拟合方法非常流行: G. Taubin,“用隐式方程定义的平面曲线,表面和非平面空间曲线的估计,及其在边缘和距离图像分割中的应用 ”,IEEE Trans。PAMI,卷 1991年13月,第1115-15-1页。 让我简要总结一下。可以用代数形式写一个二次: 其中是系数向量,是3D坐标。如果,则任何点位于二次,其中: QQQf(c,x)=Ax2+By2+Cz2+2Dxy+2Exz+2Fyz+2Gx+2Hy+2Iz+Jf(c,x)=Ax2+By2+Cz2+2Dxy+2Exz+2Fyz+2Gx+2Hy+2Iz+J f(\mathbf{c},\mathbf{x}) = A x^2 + By^2 + Cz^2 + 2Dxy + 2Exz + 2Fyz + 2Gx + 2Hy + 2Iz + J cc\mathbf{c}xx\mathbf{x}xx\mathbf{x}QQQxTQx=0xTQx=0\mathbf{x}^TQ\mathbf{x}=0Q=⎡⎣⎢⎢⎢ADEGDBFHEFCIGHIJ⎤⎦⎥⎥⎥Q=[ADEGDBFHEFCIGHIJ] Q = \begin{bmatrix} A & D & E & G \\ …

1
变速对流方程可以保守吗?
我试图更好地理解具有可变速度系数的平流方程。我尤其不明白该方程式如何保守。 在平流式, ∂ü∂Ť+ ∂∂X(v u )= 0∂u∂t+∂∂x(vu)=0 \frac{\partial u}{\partial t} + \frac{\partial}{\partial x}(\boldsymbol{v}u) = 0 让我们将u(x,t)解释u (x ,t )u(x,t)u(x,t)为某些无法创建或破坏的物理物种(ç 米− 3cm−3cm^{-3})或某些其他物理量的浓度。如果我们在我们的域上积分u (x ,t )u(x,t)u(x,t),那么我们应该得到常数, ∫X最大值X分u (x ,t )dx = 常数∫xminxmaxu(x,t)dx=constant \int_{x_{\text{min}}}^{x_{\text{max}}} u(x,t) dx = \text{constant} (这就是我保守的意思。) 如果现在让速度为空间(和时间)的函数v (x ,t )v(x,t)\boldsymbol{v}(x,t),则必须应用链式规则来给出, ∂ü∂Ť+ v ∂ü∂X+ 你∂v∂X?= 0∂u∂t+v∂u∂x+u∂v∂x⏟?=0 \frac{\partial u}{\partial t} + \boldsymbol{v}\frac{\partial …

2
在Matlab中编写“ for”循环的最有效方法是什么?
我已经读过,例如,如果我有一个for在矩阵索引上运行的双循环,那么将列运行索引放在外部循环中会更有效。例如: a=zeros(1000); for j=1:1000 for i=1:1000 a(i,j)=1; end end 如果我有三个或更多for循环,最有效的编码方式是什么? 例如: a=zeros(100,100,100); for j=1:100 for i=1:100 for k=1:100 a(i,j,k)=1; end end end

2
对于嘈杂或结构精细的数据,有没有比中点法则更好的正交?
这个长问题的仅前两个部分是必不可少的。其他仅用于说明。 背景 较高阶的正交函数,例如更高阶的牛顿-科茨复合材料,高斯-莱根特雷和罗姆贝格复合材料,似乎主要用于那些可以对函数进行精细采样而不能进行分析集成的情况。但是,对于具有比采样间隔(例如,请参阅附录A)或测量噪声更精细的结构的函数,它们无法与简单的方法(例如中点或梯形规则)(请参见附录B进行演示)竞争。 这有点直观,例如,复合Simpson规则通过分配较低的权重实质上“丢弃”了四分之一的信息。这样的正交对于足够无聊的功能更好的唯一原因是,正确处理边界效应要大于丢弃信息的效应。从另一角度看,从我的直觉上很清楚,对于具有精细结构或噪声的函数,远离积分域边界的样本必须几乎等距且权重几乎相同(对于大量样本而言) )。另一方面,更好地处理边界效果(与中点方法相比)可能会受益于此类函数的正交。 题 假设我希望在数值上整合嘈杂或精细结构的一维数据。 采样点的数量是固定的(由于功能评估成本很高),但是我可以自由放置它们。但是,我(或方法)不能交互地放置采样点,即基于其他采样点的结果。我也不事先知道潜在的问题区域。因此,像Gauß–Legendre(非等距采样点)之类的东西就可以了。自适应正交不是必需的,因为它需要交互式放置采样点。 在这种情况下,是否建议使用任何超出中点方法的方法? 或者:是否有任何证据证明在这种情况下中点方法是最好的? 更笼统地说:关于此问题是否已有任何工作? 附录A:精细结构函数的特定示例 我想为估算: 其中和。一个典型的函数如下所示:∫10f(t)dt∫01f(t)dt\int_0^1f(t)\, \mathrm{d}tf(t)=∑i=1ksin(ωit−φi)ωi,f(t)=∑i=1ksin⁡(ωit−φi)ωi, f(t) = \sum_{i=1}^{k} \frac{\sin(ω_i t-φ_i)}{ω_i},φi∈[0,2π]φi∈[0,2π]φ_i∈ [0,2π]logωi∈[1,1000]log⁡ωi∈[1,1000]\log{ω_i} ∈ [1,1000] 我为以下属性选择了此功能: 可以对控制结果进行分析集成。 它在某种程度上具有良好的结构,使得无法使用我正在使用的样本数量()捕获全部。&lt;102&lt;102<10^2 它并不以其精细的结构为主导。 附录B:基准 为了完整起见,这是Python中的基准测试: import numpy as np from numpy.random import uniform from scipy.integrate import simps, trapz, romb, fixed_quad begin = 0 end = 1 …

2
PDE反问题中的逐点观察与连续观察
我的博士生正面临一个反问题。研究,为简单起见,我们会说是确定在ββ\beta L(β)u≡−∇⋅(k0eβ∇u)=fL(β)u≡−∇⋅(k0eβ∇u)=fL(\beta)u \equiv -\nabla\cdot(k_0e^\beta\nabla u) = f 从一些意见 ; k 0是一个常数,并且f是已知的。通常将此公式化为用于优化的优化问题uouou^ok0k0k_0fff J[u,λ;β]=12∫Ω(u(x)−uo(x))2dx+∫Ωλ(L(β)u−f)dxJ[u,λ;β]=12∫Ω(u(x)−uo(x))2dx+∫Ωλ(L(β)u−f)dxJ[u, \lambda; \beta] = \frac{1}{2}\int_\Omega(u(x) - u^o(x))^2dx + \int_\Omega\lambda(L(\beta)u - f)dx 其中是拉格朗日乘数。可以通过求解伴随方程来计算J相对于β的泛函λλ\lambdaJJJββ\beta L(β)λ=u−uo.L(β)λ=u−uo.L(\beta)\lambda = u - u^o. 由于通常的原因,一些正则化函数被添加到问题中。R[β]R[β]R[\beta] 这里不言而喻的假设是,在整个域Ω中连续定义了观测数据。我认为改用我的问题可能更合适uouou^oΩΩ\Omega J[u,λ;β]=∑Nn=1(u(xn)−uo(xn))22σ2n+∫Ωλ(L(β)u−f)dxJ[u,λ;β]=∑n=1N(u(xn)−uo(xn))22σn2+∫Ωλ(L(β)u−f)dxJ[u, \lambda; \beta] = \sum_{n = 1}^N\frac{(u(x_n) - u^o(x_n))^2}{2\sigma_n^2} + \int_\Omega\lambda(L(\beta)u - f)dx xnxnx_nσnσn\sigma_nnnn 这使我停顿一下,因为伴随方程变为 L(β)λ=∑Nn=1u(xn)−uo(xn)σ2nδ(x−xn)L(β)λ=∑n=1Nu(xn)−uo(xn)σn2δ(x−xn)L(\beta)\lambda = \sum_{n = 1}^N\frac{u(x_n) …

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.