计算科学

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

2
代数多重网格:为什么插值和约束的乘积不会导致范数为1?
我目前正在使用Briggs等人的“ A Multigrid Tutorial”(第8章)。 插值运算符的构造为: 然后给出了约束算子和精细网格算子的构造: 假设我们有三个网格点x0,x1,x2,中间的一个x1很好,而其他的则很粗糙。中间插有x1 = x0*w0 + x2*w2。因此,插值运算符为(在Matlab中): I = [1, 0, 0; w0, 0, w2; 0, 0, 1] I = [ 1, 0, 0] [ w0, 0, w2] [ 0, 0, 1] 然后,限制运算符为: transpose(I) ans = [ 1, w0, 0] [ 0, 0, 0] [ 0, …

1
直接求解器是否受矩阵的条件数影响?
如果我要解决一个相对较小的问题,即可以通过直接方法(如LU)处理的问题,那么线性算子的条件数会影响解决方案的准确性吗? 我正在研究的问题之一集中在优化技术上,以解决线性方程组,而我遇到的“问题”是矩阵的条件数可能很高。 如果要使用迭代方法和预处理器,这将是要考虑的重要因素,但是现在我正在解决小的问题(自由度小于1M),因此直接求解器现在很适合。

3
在Multigrid中通常不进行收敛检查吗?
我刚刚阅读了Briggs / Henson / McCormick的“ A Multigrid教程”中的第3章, 链接。 文本是关于Multigrid循环的,例如V循环,mu循环,FMG。引起我注意的是:在大多数迭代过程中,需要检查是否已收敛到所需的公差/精度,如果是,则过程停止。但是Briggs / Henson / McCormick在提出的方案中不使用任何收敛性检查。迭代和递归的数量只是硬编码的,因此必须相信该方案会收敛。 那么通常如何在Multigrid中完成此操作?通常迭代次数/递归次数只是硬编码的吗?我真的担心我会因为过于精确而浪费大量计算时间,或者另一方面,当我选择较少数量的迭代/递归时,准确性在很多情况下会很差。
12 multigrid 

3
Comsol多物理场的替代方案
这可能是一个更适合SE的软件建议方面的问题,但是我确实相信,经常使用SE的这一部分的人更有可能回答这个问题。 我正在寻找Comsol Multiphysics的免费(不仅在自由方面)替代方案。这是一个棘手的问题:我不仅在寻找包含负载的建模和仿真程序包,还在寻找一种免费的解决方案,该解决方案应具有与Comsol尽可能相似的语法。也许有些程序包可以与Octave一起运行?如果是这样,我还没有找到。任何帮助将不胜感激! 谢谢! [编辑]我需要用于数值建模和仿真的软件。各种容器之间的流体流动,热传导等。简而言之,模拟各种PDE的解决方案。我正在寻找要模仿的其他软件的主要功能是Comsols Model Wizard。

3
正确统计以报告加速结果
假设我有一些代码的慢速版本和快速版本,并想报告比较两者的加速值。我运行慢速版本次,快速版本m次,产生时间(s 1,… ,s n)和(f 1,… ,f m)。产生加速的最简单方法是平均的手段: ˉ 小号ñnn米mm(s1个,… ,sñ)(s1,…,sn)(s_1, \ldots, s_n)(f1个,… ,f米)(f1,…,fm)(f_1, \ldots, f_m) 然而,这并未考虑离群值。s¯F¯= m ∑我&lt; ns一世n ∑Ĵ &lt; 米FĴs¯f¯=m∑i&lt;nsin∑j&lt;mfj\frac{\bar{s}}{\bar{f}} = \frac{m \sum_{i<n} s_i}{n \sum_{j<m} f_j} 问题:报告加速数字时使用的最佳统计数据是什么?

2
许多变量的数值积分
让和是函数在这些变量中。X⃗ = (x1个,X2,… ,xñ)∈ [ 0 ,1 ]ñx→=(x1,x2,…,xn)∈[0,1]n\vec{x} = (x_1, x_2, \dots, x_n) \in [0,1]^nf(x⃗ ):[0,1]n→Cf(x→):[0,1]n→Cf(\vec{x}): [0,1]^n \to \mathbb{C} 此迭代积分是否有递归方案? ∫[0,1]n∏dxif(x⃗ )∫[0,1]n∏dxif(x→)\int_{[0,1]^n} \prod dx_i \;f(\vec{x}) 如果且我将分成100个段,则我们要加点。必须有一个更聪明的方法。[ 0 ,1 ] 10 20n=10n=10n = 10[0,1][0,1][0,1]1020102010^{20} 实际上,我要集成的功能是单一组的Haar度量。 ∫U(n)f(A) dA=1n!∫[0,2π]n∏j&lt;k∣∣eiθj−eiθk∣∣2⋅f(θ1,…,θn) dθ12π ⋯ dθn2π∫U(n)f(A) dA=1n!∫[0,2π]n∏j&lt;k|eiθj−eiθk|2⋅f(θ1,…,θn) dθ12π ⋯ dθn2π\int_{U(n)} f(A) \ dA = \frac{1}{n!} \int_{[0,2\pi]^n} \prod_{j<k} …

2
关于自动区分,源代码转换(STC)是否比运算符重载(OO)更有效?
我们正在研究一个时空过程的贝叶斯模型,并且正在使用一个No-U-Turn采样器(NUTS),该采样器需要一个对数概率模型以及相对于模型参数的梯度。更简洁地说,我们有相当复杂的对数概率函数,涉及统计分布,克罗内克乘积,指数,比率,if-else语句等,需要提供它以及它对NUTS的梯度。几个软件包(Stan和 Julia的MCMC)使用运算符重载(据我所知)自动获取渐变。f:Rn→Rf:Rn→Rf : \mathbb{R}^n \rightarrow \mathbb{R} 如果我们能够使用源代码转换自动差异工具来创建自己的梯度函数,那么我们是否会获得更好的性能,或者OO一样好还是更好?

1
压力作为拉格朗日乘数
在不可压缩的Navier-Stokes方程中, 压力项通常被称为拉格朗日乘数,用于强制不可压缩条件。ρ(ut+(u⋅∇)u)∇⋅u=−∇p+μΔu+f=0ρ(ut+(u⋅∇)u)=−∇p+μΔu+f∇⋅u=0\begin{align*} \rho\left(\mathbf{u}_t + (\mathbf{u} \cdot \nabla)\mathbf{u}\right) &= - \nabla p + \mu\Delta\mathbf{u} + \mathbf{f}\\ \nabla\cdot\mathbf{u} &= 0 \end{align*} 从什么意义上说这是真的?是否存在不可压缩的Navier-Stokes方程式,作为受不可压缩性约束的优化问题?如果是这样,是否存在一个数值模拟,其中在优化框架内求解了不可压缩流体的方程?

2
在python中计算非常大且稀疏的邻接矩阵的所有特征值的最快方法是什么?
我试图找出一种比使用scipy.sparse.linalg.eigsh更快的方法来计算非常大且稀疏的邻接矩阵的所有特征值和特征向量,据我所知,此方法仅使用稀疏性和矩阵的对称属性。邻接矩阵也是二进制的,这使我认为有一种更快的方法可以实现。 我创建了一个随机的1000x1000稀疏邻接矩阵,并在x230 ubuntu 13.04笔记本电脑上比较了几种方法: scipy.sparse.linalg.eigs:0.65秒 scipy.sparse.linalg.eigsh:0.44秒 scipy.linalg.eig:6.09秒 scipy.linalg.eigh:1.60秒 对于稀疏的eigs和eigsh,我将所需特征值和特征向量的数量k设置为矩阵的秩。 问题始于更大的矩阵-在9000x9000矩阵上,scipy.sparse.linalg.eigsh花了45分钟!

3
在Matlab中使用ODE选择步长
嘿,谢谢您抽出宝贵时间看我的问题。这是我先前在physics.stackexchange.com中发布的问题的更新版本 我目前正在研究2D激子旋量玻色-爱因斯坦凝聚物,并对这个系统的基态感到好奇。达到基态的数学方法称为虚时法。 其中在量子力学时间由假想一个替换方法是非常简单的 这种取代导致在我的系统的高能量粒子衰减比低能量更快。在计算的每个步骤中重新归一化粒子数,我们最终得到了一个最低能量的粒子系统。基态。t=−iτt=−iτ t = -i \tau 所讨论的方程是非线性的,称为非线性薛定ding方程,有时也称为Gross-Pitaevskii方程。为了解决该问题,我使用了Matlabs ode45,它可以使系统及时向前发展,并最终达到基态。 注意!非线性薛定ding方程包含拉普拉斯方程和空间中的其他一些微分项。这些都是使用快速傅立叶变换解决的。最后,我们只有一个时间ODE。* 我的问题和疑问:计算从到t f。ode45置于for循环中,因此它不会同时计算巨型向量[ t 0,… ,t f ]。第一轮将以ode45(odefun,[ t 0,t 0 + Δ / 2 ,t 0 + Δ ] ,y ,…)开始,然后从t 0 + Δ开始进行t0t0t_0tftft_f[t0,…,tf][t0,…,tf][t_0,\dots,t_f][t0,t0+Δ/2,t0+Δ],y,…[t0,t0+Δ/2,t0+Δ],y,…[t_0, t_0+\Delta/2, t_0 + \Delta],y,\dotst0+Δt0+Δt_0 + \Delta。在这里,时间步长是我的问题。时间步长的不同选择为我提供了不同的基态解决方案,并且我不知道如何确定哪个时间步长为我提供了“最”正确的基态!ΔΔ\Delta 我的尝试:我意识到在此方案中,较大的时间步长将导致大量粒子在重新归一化为原始数量的粒子之前衰减,而较小的时间步长将导致更少量的粒子在重新归一化之前衰减。我最初的想法是,较小的时间步长应该提供更准确的解决方案,但这似乎是相反的。 我不是数值专家,因此ode45的选择完全是任意的。ode113给了我同样的事情。:( 有没有人对此事有任何想法。让我知道是否需要其他详细信息。 谢谢。 更新1: 我一直在研究假想时间方法和ODE。看来,如果时间步长不够小,整个事情就会变得不稳定。这使我想知道我的非线性方程是否僵硬,这使我理解的事情变得更加困难。我会及时通知你的。 更新2: 修复:问题的确是在ODE之外进行了标准化。如果规范化保持在odefun内,则ODE将为“外部”时间步长的不同选择返回相同的结果。我的同事给我看了旧的代码,我只是在我的odefun中添加了一行。 function …

2
对于不确定的对称系统,我应该使用PETSc中的哪些预处理器(和求解器)?
我的系统是带有拉格朗日乘子的对称有限元问题(例如不可压缩的斯托克斯流): (ABBTC)(ABTBC)\begin{pmatrix}A & B^T \\ B & C\end{pmatrix} 其中是典型情况(我什至已确保方程式已编号,以便拉格朗日乘数出现在最后)。该系统非常大(+ 100k行)。C=0C=0C = 0 阅读了这个问题的答案后,给我的印象是,有合适的预处理器可用于混合有限元问题。 -ksp_type minres -pc_type none -mat_type sbaij尽管精度不高(使用线性问题会导致多次牛顿迭代),但我使用PETSc设法用MINRES()解决了系统。预调节器和ksp-solver的其他组合似乎没有用。 是否有PETSc标志的组合可以比仅使用MINRES更快地解决此系统?

2
有限元奇摄动反应扩散问题的振动性
当FEM-离散和解决的反应-扩散问题,例如, 与 0 &lt; ε « 1(奇异扰动),离散问题的解决方案将典型地显示出振荡层与边界邻近的。与 Ω = (0 ,1 ), ε = 10 - 5和线性有限元素,将溶液 û ħ模样- ε Δ Ü + Ü = 1 上 Ωu = 0 在 ∂Ω−εΔu+u=1 on Ωu=0 on ∂Ω - \varepsilon \Delta u + u = 1 \text{ on } \Omega\\ u = …

1
使用定点迭代解耦PDE系统
假设我有一个边值问题: d2udx2+dvdx=f in Ωd2udx2+dvdx=f in Ω\frac{d^2u}{dx^2} + \frac{dv}{dx}=f \text{ in } \Omega dudx+d2vdx2=g in Ωdudx+d2vdx2=g in Ω\frac{du}{dx} +\frac{d^2v}{dx^2} =g \text{ in } \Omega u=h in ∂Ωu=h in ∂Ωu=h \text{ in } \partial\Omega 我的目标是将这个耦合问题的解决方案分解为一系列非耦合PDE。为了使系统解耦,我对一系列近似值应用定点迭代,(uk,vk)(uk,vk)(u^k,v^k)以便 d2ukdx2+dvk−1dx=fd2ukdx2+dvk−1dx=f\frac{d^2u^k}{dx^2} + \frac{dv^{k-1}}{dx}=f duk−1dx+d2vkdx2=gduk−1dx+d2vkdx2=g\frac{du^{k-1}}{dx} +\frac{d^2v^k}{dx^2} =g 从理论上讲,这将使我能够将两个方程作为纯椭圆PDE求解。但是,我从未见过以这种方式将定点迭代应用于PDE。我已经看到定点迭代应用于数字离散方程(有限差分法,有限元方法等),但从未直接应用于连续方程。 我这样做违反了任何公然的数学原理吗?这在数学上有效吗?我可以通过使用应用于连续变量问题而不是离散变量问题的定点迭代来将耦合PDE求解为非耦合PDE的序列吗? 在这一点上,我并不真正在乎使用这种方法是否可行,而是在理论上是否可行。任何反馈将不胜感激!

1
数值正交的方法选择
存在用于数字正交的几种方法。如果我有一类特定的被积物,如何选择理想的方法? 关于被积物(例如,是否光滑?是否具有奇点?)和计算问题(例如,容错性,计算预算),有什么相关的问题要问? 这些问题的答案如何排除或推广各种方法?为简单起见,我们只考虑一维或低维积分。 例如,有关QUADPACK的Wikipedia文章指出,相当通用的QAGS例程“ 在每个子间隔内使用基于21点高斯-克朗德正交的全局自适应正交,并通过Peter Wynn的epsilon算法进行加速 ” 这个决定是如何做出的?当人们知道更多时,如何做出类似的决定?
12 quadrature 

1
Dirichlet-Neumann边界条件解变得不稳定-压力校正方法
我正在模拟雷诺数为500的气瓶上不可压缩的流动。我正在使用压力校正方法求解更大型的斯托克斯方程。我的解决方案在一定时间(约5秒)后变得不稳定。 我尝试细化我的网格,步长(0.05)(确保我的CFL &lt;1,即使我使用的是隐式方法) 我的边界条件,网格和不稳定结果显示在附图中。该畴大约是圆柱直径的25倍。 我试图模拟这个问题O网格(几乎立即变得不稳定)。 以下链接包含边界条件和结果的图片。 如果有人可以分享自己对这个问题的想法/经验,我将不胜感激。非常感谢。 编辑: 抱歉键入错误: 我正在使用以下边界条件:诺伊曼边界 ∂u⃗ ∂n−n⃗ p=0;∂u→∂n−n→p=0;\frac{\partial \vec{u}} {\partial n} - \vec{n} p = 0; 在Dirichlet边界上 u⃗ =ux=1u→=ux=1 \vec{u} = u_x = 1 编辑: 我在狄利克雷边界附近的节点上应用了速度边界条件。同样,右上角和右下角节点是速度为1的狄利克雷边界。 之后,我对模拟结果进行了更深入的研究,发现在流入/流出交界处,不稳定开始逐渐蔓延。

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.