计算科学

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

3
最小二乘近似问题
我正在上一门有关科学计算的课程,而我们仅研究了最小二乘近似。我的问题特别是关于使用多项式近似。我知道,如果您有n + 1个数据点,则可以找到描述所有这些点的唯一的次数为n的多项式。但我也可以看到为什么这并不总是理想的。通过这种方法,您可能会在数据点之间产生大量噪声。我想得到一个低阶多项式可以很好地估计您的数据是很好的。 我的问题是:您如何在实践中决定要使用的多项式阶数?有经验法则还是仅取决于眼前的问题?在决定或多或少的学位之间时,我们是否必须考虑各种折衷?还是我误会了这里的东西? 提前致谢。

2
如何绘制4D图的表面?
我正在尝试在3D框中绘制粒子的波动函数。这需要我绘制4个变量:x,y,z轴和概率密度函数。 概率密度函数为: abs((np.sin((p*np.pi*X)/a))*(np.sin((q*np.pi*Y)/b))*(np.sin((r*np.pi*Z)/c)))**2 我正在使用np.arange()X,Y和Z。 我读过要做到这一点,您需要绘制4D图的表面。 这是应该的样子:

6
在C / C ++中是否有BLAS的参考级实现?
netlib BLAS实施是一个很好的参考,大多数未进行优化且有据可查(例如zgemm)。但是,它在Fortran 77中使用,这使那些接受过更现代编程编程的人无法使用。在C / C ++中是否有BLAS的参考级实现(如netlib)?
11 blas  education 


2
了解pde约束优化的伴随方法的成本
我正在尝试了解基于伴随的优化方法如何用于PDE约束优化。特别是,我试图理解为什么伴随方法对于设计变量数量大而“方程式数量小”的问题更有效。 我的理解: 请考虑以下PDE约束优化问题: minβ I(β,u(β))s.t.R(u(β))=0minβ I(β,u(β))s.t.R(u(β))=0\min_\beta \text{ } I(\beta,u(\beta))\\ s.t. R(u(\beta))=0 其中是向量设计变量β和取决于设计变量的场变量未知数u (β )的向量的(足够连续的)目标函数,而R (u )是PDE的残差形式。IIIββ\betau(β)u(β)u(\beta)R(u)R(u)R(u) 显然,我们可以将I和R的第一个变体设为 δ一世= ∂一世∂βδβ+ ∂一世∂üδüδ一世=∂一世∂βδβ+∂一世∂üδü\delta I = \frac{\partial I}{\partial \beta}\delta\beta + \frac{\partial I}{\partial u}\delta u δR = ∂[R∂βδβ+ ∂[R∂üδu = 0δ[R=∂[R∂βδβ+∂[R∂üδü=0\delta R = \frac{\partial R}{\partial \beta}\delta\beta + \frac{\partial R}{\partial u}\delta u = 0 引入拉格朗日乘数的向量,目标函数的变化可以写成λλ\lambda δ一世= …
11 optimization  pde 

1
积分变换求逆的数值方法?
我正在尝试将以下整数转换数字化: F(y)=∫∞0yexp[−12(y2+x2)]I0(xy)f(x)dxF(y)=∫0∞yexp⁡[−12(y2+x2)]I0(xy)f(x)dxF(y) = \int_{0}^{\infty} y\exp{\left[-\frac{1}{2}(y^2 + x^2)\right]} I_0\left(xy\right)f(x)\;\mathrm{d}x 因此,对于给定的F(y)F(y)F(y)我需要近似f(x)f(x)f(x) ,其中: f(x)f(x)f(x)和F(y)F(y)F(y)是实数和正数(它们是连续的概率分布) x,yx,yx,y是实数和正数(它们是大小) 我现在有一个非常凌乱而蛮力的方法: 我定义f(x)f(x)f(x)和样条曲线在一系列点上,通过随机采样“猜测”样条曲线点的值,从而得出预测的F(y)F(y)F(y)。我写的基本遗传算法使预测的和测量的F(y)F(y)F(y)数组之间的差异最小。然后,我将算法收敛到的f(x)f(x)f(x)作为反演的答案。 这种方法在某些简单的情况下效果很好,但对我来说却很杂乱,而且不够健壮。 谁能为我提供解决此问题的更好方法的指导? 感谢您的时间和帮助! [x张贴于计算机科学]

2
差异有限的实体力学:如何处理“角节点”?
我有一个关于编码固体力学边界条件(线性弹性)的问题。在特殊情况下,我必须使用有限差分(3D)。我对这个话题非常陌生,因此以下一些问题可能非常基础。 为了导致我的特定问题,首先,我想展示一下我已经实现的内容(为清楚起见,我将仅使用2D)。 1.)我有下列离散div(σ)=0div(σ)=0div(\sigma) = 0,表示发散的第一组分∂σxx∂x+∂σxy∂y=0∂σxx∂x+∂σxy∂y=0\frac{\partial\sigma_{xx}}{\partial x} + \frac{\partial\sigma_{xy}}{\partial y} = 0: 我使用非交错网格,因此Ux和Uy定义在同一位置。 2.)下一步是处理边界,在这里我使用“鬼节点”。根据σ∙n=t∗σ∙n=t∗\sigma \bullet n = t^*,其中t∗t∗t^*是边界上的应力。 (λ+2μ)∂Ux∂x+λ∂Uy∂y=σ∗xx(λ+2μ)∂Ux∂x+λ∂Uy∂y=σxx∗(\lambda + 2\mu)\frac{\partial U_x}{\partial x} + \lambda \frac{\partial U_y}{\partial y} = \sigma_{xx}^*σ∗xxσxx∗\sigma_{xx}^* μ∂Ux∂y+μ∂Uy∂x=σ∗xyμ∂Ux∂y+μ∂Uy∂x=σxy∗\mu\frac{\partial U_x}{\partial y} + \mu \frac{\partial U_y}{\partial x} = \sigma_{xy}^*σ∗xyσxy∗\sigma_{xy}^* 3.)我认为到目前为止,我的所有步骤似乎都是合乎逻辑的,如果没有,请纠正我。但是现在还有“角节点”,我不知道如何处理它们。 div(σ)=0div(σ)=0div(\sigma) = 0 所以我的问题是处理这些“角节点”的正确方法是什么?我为每个想法感到高兴。

2
科学代码性能的基本结构是什么?
考虑两台具有不同硬件和软件配置的计算机。在每个平台上运行完全相同的序列Navier-Stokes代码时,分别需要花费x和y的时间分别为计算机1和2执行一次迭代。在这种情况下,是计算机1和计算机2之间的迭代时间差。Δ = x - yΔ=X-ÿ\Delta = x-y 可能会影响的大小?一个明显的候选者是CPU,我的主要问题是,是否还有其他因素可能会影响与CPU之间的硬件差异相同?ΔΔΔ\DeltaΔΔ\Delta

3
给定一个SPD三对角线性系统,我们是否可以预先计算,以便可以在O(1)时间内链接任何三个索引?
考虑一个对称正定三对角线线性系统 ,其中甲∈ [R Ñ × Ñ和b ∈ [R Ñ。给出三个指数0 ≤ 我&lt; Ĵ &lt; ķ &lt; Ñ,如果我们严格假设之间仅方程行我和ķ保持,我们可以消除中间变量获取形式的公式 ü X 我 + v X Ĵ + 瓦特X ķ = C甲X = bAx=bA x = bA∈Rn×nA∈Rn×nA \in \mathbb{R}^{n \times n}b∈Rnb∈Rnb \in \mathbb{R}^n0≤i&lt;j&lt;k&lt;n0≤i&lt;j&lt;k&lt;n0 \le i < j < k < niiikkkuxi+vxj+wxk=cuxi+vxj+wxk=cu x_i + v …

2
有限体积代码的数据结构:数组与类
我必须为磁流体动力学(MHD)编写一个有限的体积代码。我以前写过数字代码,但没有达到这个规模。我只是想问一问,使用具有类的数据结构(面向对象的方法),或者只是针对速度,可伸缩性等对多个属性使用多个数组,这将是一个不错的选择。我打算用python编写代码,并且将fortran用于数字密集型部分。 python中的类的示例是 class Cell: def __init__(self, x, y, z, U): 数组可以简单地定义为 x[nx][ny][nz] y[nx][ny][nz] z[nx][ny][nz] U[nx][ny][nz] 等等

3
在python中网格化3D表面数据
我有一个3维点的数据集,我想使用python构建一个网格。我见过的所有软件都要求您提供优势。python中是否有一个程序将3D点作为输入并输出网格?如果可能的话,我希望网格划分是统一的。

3
在并行有限元计算中管理网格的最佳方法?
我目前正在开发一种域分解方法来解决散射问题。基本上,我正在迭代地解决Helmholtz BVP系统。我在三角形或四面体网格上使用有限元方法离散化方程。我正在为我的博士学位论文开发代码。我知道一些现有的有限元库,例如Deal.ii或DUNE,尽管我认为它们很棒,具有鼓舞人心的设计和API,但出于学习目的,我想从头开始开发自己的小应用程序。 我现在正在运行我的串行版本,现在我想对其进行并行化。毕竟,至少在原则上,制定易于并行化的算法是领域分解框架的优势之一。但是实际上,有许多细节必须考虑。网格管理就是其中之一。如果应用程序在达到高分辨率的同时可以很好地扩展到许多CPU,则在每个CPU上复制整个网格的效率很低。 我想问那些在高性能计算环境中从事类似应用程序工作的开发人员如何处理此问题。 有用于分布式网格管理的p4est库。我不需要AMR,所以这可能是一个过大的选择,因为我只对使用统一网格感兴趣,并且不确定是否可以优化三角形网格。我也可以简单地创建一个统一的网格,然后将其输入到网格划分器之一中,并对输出进行一些后期处理。 最简单的方法似乎是为每个分区创建一个单独的文件,其中包含仅与该特定分区相关的网格信息。该文件将由单个CPU读取,该CPU负责在网格的该部分上组装离散系统。当然,某些全局分区连接性/邻居信息也需要存储在所有CPU读取的文件中以进行进程间通信。 还有哪些其他方法?如果你们中的一些人可以分享,那么与该问题相关的行业或政府研究机构中最常用的方法有哪些?对于编程并行有限元求解器,我是一个新手,我想了解一下我是否在正确地考虑这个问题以及其他人如何解决这个问题。任何有关相关研究文章的建议或指针将不胜感激! 提前致谢!

3
测试两个12x12矩阵是否具有相同的行列式
给我一个对称的,可逆的,正定的和密集的12×1212×1212 \times 12矩阵QQQ我需要测试其中,J是全1矩阵。det(Q)=det(12I−Q−J)(1)det(Q)=det(12I−Q−J)(1)\det(Q) = \det(12I-Q-J) \; \; (1)JJJ 我目前正在使用armadillo库执行此操作,但事实证明它太慢了。问题是我需要对一万亿个矩阵执行此操作,事实证明,计算这两个行列式是我程序的瓶颈。因此,我有两个问题 给定我的大小,是否可以使用任何技巧更快地计算行列式?在这种情况下,是否可以对12×1212×1212 \times12矩阵进行混乱的扩展? 还有其他有效的方法来检验是否相等(1)(1)(1) 编辑。回答评论。我需要计算所有连接的13阶非自补图GGG,以使G和\ overline {G}具有相同数量的生成树。动机可以在此mathoverflow帖子中找到。对于机器,我正在8核3.4GHh机器上并行运行它。131313GGGG¯¯¯¯G¯\overline{G} 编辑。通过制作一个专门用于计算12×1212×1212 \times 12 × 12矩阵行列式的C程序,我能够将预期运行时间减少50%。仍然欢迎提出建议。

1
有人在计算科学研究中使用软件估算方法吗?
在工作中,我基本上是一名独立顾问。对于管理人员和客户,我需要估计开发软件所需的时间,这是我的计算科学研究的一部分。但是,我的时间估计通常不正确。我知道有一些方法可以估算开发软件所需的时间。这些方法会为我提供有关研究任务的准确估计吗?它们甚至在研究环境中有用吗?如果不是,是否有比“保留记录并相应地修改估算值”更好的方法?
11 software 

3
如何使用有限体积一阶迎风方案处理非恒定系数?
从守恒形式的平流方程开始。 üŤ= (a (x )u )Xut=(a(x)u)x u_t = (a(x)u)_x 其中是取决于空间的速度,而是守恒物种的浓度。u一个(x )a(x)a(x)üuu 离散通量(在网格点之间的像元边缘上定义通量)给出 u t = 1F= 一个(x )uf=a(x)uf=a(x)uüŤ= 1H(fj − 12- ˚Fj + 12)ut=1h(fj−12−fj+12) u_t = \frac{1}{h}\left( f_{j-{\frac{1}{2}}} - f_{j+{\frac{1}{2}}} \right) 使用一阶迎风,我们将通量近似为 Fj − 12= a (xj − 12)你j − 1Fj + 12= a (xj + 12)你Ĵfj−12=a(xj−12)uj−1fj+12=a(xj+12)uj f_{j-{\frac{1}{2}}} = a(x_{j-\frac{1}{2}})u_{j-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.