计算科学

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

2
哈密​​顿矩阵的矩阵指数
令为实,平方,密矩阵。G和Q是对称的。让A ,G ,QA,G,QA, G, QGGG问QQ H= [ A- Q− G− AŤ]H=[A−G−Q−AT]H = \begin{bmatrix} A & -G \\ -Q &-A^T \end{bmatrix} 是哈密顿矩阵 我想计算的矩阵指数。我需要完整的矩阵指数e t H,而不仅是矩阵向量积。是否有专门的算法或库可用来计算哈密顿矩阵的指数?HHHËŤ ^ hetHe^{tH}

1
DG局部方程,如何解释均值检验函数
在论文http://www.sciencedirect.com/science/article/pii/S0045782509003521中,第584页方程(4)中描述了HDG元素局部方程,其中一个方程采用以下形式 − (uH,∇ q)ķ= - ⟨ ü^H⋅ ñ ,q− q¯⟩∂ķ−(uh,∇q)K=−⟨u^h⋅n,q−q¯⟩∂K-(u_h,\nabla q)_K = -\left\langle\hat{u}_h \cdot n, q - \bar{q}\right\rangle_{\partial K} 这是变分近似到连续方程,具有标量值测试功能q在有意义的空间。▿ ·&Ù = 0∇⋅u=0\nabla \cdot u = 0qqq 本文定义。q¯= 1| ∂ķ|∫∂ķqq¯=1|∂K|∫∂Kq\bar{q} = \frac{1}{|\partial K|} \int_{\partial K} q 从有限元素的角度来看,这是如何解释的?根据我的理解,我们将双方乘以一个测试函数,然后尝试找到满足q的所有可能选择的方程的解。如何以这种方式修改测试空间?qqqqqq 该文件还指出,这是必要的强制执行身份 我同意这种说法,但怎么可能测试功能q - ˉ q可以在代码中实现?在组装单元局部线性系统时,是否应该在单元上采用基函数并减去其均值?⟨u^h⋅n,q−q¯⟩∂K=0⟨u^h⋅n,q−q¯⟩∂K=0\left\langle\hat{u}_h\cdot n, q - \bar{q}\right\rangle_{\partial K} = 0q−q¯q−q¯q - …

2
通过蒙特卡洛采样估计信息熵
我正在寻找一种方法,当从该分布进行采样的唯一实际方法是蒙特卡洛方法时,该方法可以估计该分布的信息熵。 我的问题与标准的Ising模型没有什么不同,该模型通常用作Metropolis-Hastings采样的入门示例。我有超过一组的概率分布,即我有p (一)对于每个一∈ 甲。元素一∈ 一个是组合性质的,伊辛状态,并且有一个非常高的数字他们的。这意味着在实践中,从计算机上的此分布进行采样时,我永远不会两次获得相同的采样。p (a )不能直接计算(由于不知道归一化因子),但是比率p (a一个AAp (a )p(a)p(a)一∈ 一a∈Aa \in A一∈ 一a∈Aa \in Ap (a )p(a)p(a)很容易计算。p (一1个)/ p (a2)p(a1)/p(a2)p(a_1)/p(a_2) 我想估计这种分布的信息熵 S=−∑a∈Ap(a)lnp(a).S=−∑a∈Ap(a)ln⁡p(a). S = -\sum_{a \in A} p(a) \ln p(a). 或者,我想估计此分布与通过将分布限制为的子集(当然还有重新归一化)而获得的熵差。a∈A1⊂Aa∈A1⊂Aa\in A_1 \subset A

2
小范数调整的特征向量
我有一个变化缓慢的数据集,我需要跟踪其协方差矩阵的特征向量/特征值。 我一直在使用scipy.linalg.eigh,但是它太贵了,并且它没有使用我已经进行了分解的事实,该分解只是稍微不正确。 谁能建议一种更好的方法来解决此问题?

1
用数字解决难题方程组
我有一个要求解的个非线性方程组:ñnn f = (f 1,… ,f n)F(x)= af(x)=a\mathbf{f}(\mathbf{x})=\mathbf{a} F= (f1个,… ,fñ)x =( x1个,… ,xñ)f=(f1,…,fn)x=(x1,…,xn)\mathbf{f}=(f_1,\dots,f_n)\quad\mathbf{x}=(x_1,\dots,x_n) 该系统具有许多特性,使其特别难以操作。我正在寻找有关如何更有效地处理系统的想法。 为什么系统很难? 功能类似于此功能(但当然是多维的): 它们具有平坦的高原,由平坦的变化区域隔开。在2D中,您可以想象一个像这样:F一世fif_i 通常,每个具有两个平稳段,这些平稳段通过围绕维超平面的平滑变化而分开。 Ñ - 1F一世fif_in − 1n−1n-1 像牛顿那样的方法很难处理这样的函数,因为导数在高原上实际上为零。在多个维度上,我无法轻易找到都没有稳定的F一世fif_i区域,如果可以的话,就可以解决问题。二等分方法在效果很好,但是不能很好地推广到多个维度。n = 1n=1n=1 这些函数的计算速度非常慢。我正在寻找一种方法,它可以在尽可能少的迭代中获得根的合理近似值。 这些函数是使用蒙特卡洛方法计算的。这意味着每次计算它们时,我都会得到略有不同的随机值。导数很难估计​​。一旦我们距离根足够近,噪声将开始占主导地位,因此有必要使用平均来提高精度。理想情况下,应该有可能将方法推广到等效的随机近似版本(例如,Newton→Robbins-Monro)。 该系统是高维的。可以大到10-20。当,一种有效的方法可能是以下方法:尝试遵循和定义的轮廓并查看它们相交的位置。尚不清楚如何将其推广到高尺寸。n = 2 f 1(x 1,x 2)= 0 f 2(x 1,x 2)= 0ñnnn=2n=2n=2f1(x1,x2)=0f1(x1,x2)=0f_1(x_1,x_2) = 0f2(x1,x2)=0f2(x1,x2)=0f_2(x_1,x_2)=0 我对系统还有什么了解? 正是有一个根源(根据理论结果)。 我知道高原上的的值(假设任何为0和1 )。我fifif_iiii x i …

3
可以使用可压缩流量求解器解决不可压缩流量吗?
我知道不可压缩和可压缩流动求解器是专门为解决具有不同流体特性/流动条件的不同类型问题而设计的。显然,使用不可压缩的流量求解器对不可压缩的流体进行建模的优点之一是可以忽略能量方程,从而减少了需要求解的变量和方程的数量。 但是,我很想知道可压缩流量求解器的极限精度,因为流体特性和流动条件趋于不可压缩。随着被建模的流体/流动变得越来越不可压缩,可压缩流动求解器是否会趋于失败?还是可压缩的流量求解器是否表现出与流体/流量的可压缩性无关的相同性能? 我意识到这个问题有点宽泛,可能完全取决于所建模问题的特征。如果是这种情况,请帮助我了解在确定使用可压缩流量求解器的适用性时需要牢记的因素,否则使用不可压缩的流量求解器就足够了。

1
四叉树和八叉树网格的可视化
对于需要自适应网格细化的应用,所谓的四叉树和八叉树网格非常有吸引力。例如,它们在Gerris和Paramesh中使用。有谁知道这种网格的良好文件格式并支持可视化软件?另请参阅Gerris常见问题解答中的此答案。我目前知道的唯一潜在候选人是VTK HyperOctree类,但是似乎几乎没有文档。 作为网格的特定示例,考虑一个稀疏的八叉树网格,该网格由框组成,每个框包含元。我目前在Visit / Paraview中的策略是:10410410^48 × 8 × 8 = 5128×8×8=5128 \times 8 \times 8=512 将网格写入为非结构化的VTK文件。对于较大的数据集,这是昂贵的,并且不会利用四叉树/八叉树的“结构化”。 将树中的相邻“框”收集到更大的块中,并编写一个块结构的网格。这涉及很多额外的代码,并且丢失了嵌入在四叉树/八叉树中的连接信息。 更新如果当前没有可行的格式可以直接编写和可视化octree网格,我将为可用于将octree编写为块结构网格的文件格式提出建议。理想情况下,此格式: 具有相对简单的定义/实现,理想情况下是开源的,并具有C / Fortran兼容性。 可以有效地处理大量的网格块(例如1000个或更多)。 允许轻松指定网格块的连通性,尤其是在细化边界处。 我目前正在为此目的使用Silo,但我正在寻找在上述三个方面得分更高的东西(更小,更快,更简单)。

3
Gröbner基和多项式系统解决方案的基准
在最近的具有7个非线性代数方程式的问题求解系统中,布莱恩·鲍彻斯(Brian Borchers)实验性地证明,枫树可以求解Matlab / Mupad无法处理的多项式系统。过去,我从该领域的工作人员那里听说,枫树具有Gröbner基和相关算法的高质量实现(我认为这里正在使用)。 因此,我很想建议“ Matlab在此类问题上进展缓慢,请切换到Maple”,但我希望有数据来支持该声明。 是否存在一组基准测试结果,用于比较不同计算机代数系统中Gröbner基实现和多项式系统解决方案的速度和有效性?(Maple,Mathematica,Matlab的符号工具箱等)。

4
确定性模型的运行会产生小的,不可预测的结果
我有一个用C编写的相当大的模型(约5000行)。它是一个串行程序,在任何地方都没有随机数的产生。它将FFTW库用于使用FFT的函数-我不知道FFTW实现的详细信息,但是我假设其中的函数也是确定性的(如果我出错,请更正我)。 我无法理解的问题是,在同一台计算机(相同的编译器,相同的库)上运行相同的结果在结果上存在很小的差异。 我使用双精度变量,并将结果输出到变量中value,例如,我发出: fprintf(outFID, "%.15e\n", value);或 fwrite(&value, 1, sizeof(double), outFID); 而且我会不断得到诸如以下的差异: 2.07843469652206 4 e-16与2.07843469652206 3 e-16 我花了很多时间试图找出原因。最初我以为我的一个存储芯片已经坏了,所以我下令更换了它们,无济于事。随后,我还尝试在同事的Linux机器上运行我的代码,并且得到了相同性质的差异。 是什么原因造成的?现在这是一个小问题,但我想知道这是否是“冰山一角”(一个严重的问题)。 我以为我会在这里发布而不是StackOverflow,以防有人使用数值模型。如果有人可以阐明这一点,我将非常有义务。 评论后续: Christian Clason和Vikram:首先,感谢您对我的问题的关注。您链接的文章建议:1.舍入错误限制了准确性,并且2.不同的代码(例如引入看似无害的打印语句)可能会影响机器的结果。我要澄清的是,我没有比较效果fwrite和fprintf功能。我正在使用一个或另一个。特别是,两次运行都使用相同的可执行文件。我只是在说明是否使用fprintfOR 发生问题fwrite。 因此,代码路径(和可执行文件)相同,硬件也相同。在所有这些外部因素保持不变的情况下,随机性从何而来呢?我怀疑由于错误的内存无法正确保留位而发生了位翻转,这就是为什么我更换了内存芯片的原因,但是我证实这并不是这里的问题,我证实并指出。我的程序在一次运行中输出了数千个这种双精度数字,并且总是有随机的少数具有随机的位翻转。 跟帖基督教克拉森的第一个评论:为什么是机器精度内一样的0?双精度数的最小正数是2.22e-308,那不等于0吗?我的程序输出10 ^ -16范围(从1e-15到8e-17)的数千个值,并且我们一直在研究项目中看到有意义的变化,所以我希望我们不要一直在研究荒谬的东西。数字。2 ⋅ 10− 162⋅10-162\cdot 10^{-16} 后续活动2: 这是模型输出的时间序列的图,有助于注释中的分支讨论。

4
如何在非常小的域的生物学精确模型中制作出良好的网格
我一直在尝试制作组织层的生物学上精确的2D空间模型,其中会发生不同的生理过程。这主要包括化学反应,扩散和边界上的通量。 我正在COMSOL Multiphysics中建立此模型,COMSOL Multiphysics是一个有限元软件包,可以解决诸如反应扩散系统之类的不同物理问题,尽管对我来说,这可能并不重要。 在我的几何图形中,组织层的细胞之间确实有很小的区域。这些区域用作开口,在这些开口中,单元(接合点)之间会发生扩散。这里的网格质量不是很好,如果我想提高质量(主要是通过引入更多元素等),我的仿真时间会大大增加。质量较低的网格也将导致收敛花费更长的时间。我添加了几何图形以给出想法。我尝试了不同的网格,所有网格的元素质量不同,元素数量从16000到50000。 我在FEM中的背景确实很有限,我想知道我是否可以通过以下方式解决此问题: 不会对生物学产生负面影响(保持组织域大小/问题等在生物学上尽可能准确), 不会大幅增加仿真时间, 提供更好的网格质量。所以我真的很想知道最好的方法是什么,因为我已经想到了一些事情。 因此,我可以使用质量较低的网格物体(这不是很差,但也不是很好),这样我就可以保留较小的区域以获得最佳的生物学准确性,并且计算时间相对较短(希望我不会遇到收敛误差)。但是,例如,也许有一些我可能错过的可能性:是否有可能使小区域变大,然后在扩散率中添加某种因素。换句话说,如果我想将域设为两倍大,我是否会将扩散速率乘以一半?这在化学/物理定律上是否准确: 希望我将问题弄清楚了,并在此先感谢您的帮助。 干杯,

5
用于数值积分的C ++库(正交)
我有自己的数值积分(正交)子例程,它是Bulirsch&Stoer于1967年出版的ALGOL程序的C ++改编(Numerische Mathematik,9,271-278)。 我想升级到更现代的(自适应)算法,并想知道是否有(免费)C ++库提供了这种算法。我看起来像GSL(它是C),但是它带有一个可怕的API(尽管数字可能不错)。还有别的事吗? 一个有用的API如下所示: double quadrature(double lower_integration_limit, double upper_integration_limit, std::function<double(double)> const&func, double desired_error_bound_relative=1.e-12, double desired_error_bound_absolute=0, double*error_estimate=nullptr);
10 c++  quadrature 

2
有限元
w ^1 ,∞w ^1个,∞W^{1,\infty}∥ ü′H- 你′∥∞‖üH′-ü′‖∞\|u'_h - u'\|_\infty (来自MathOverflow的交叉发布,在这里几乎没有兴趣,但是也许在这里我可以找到更多具有FEM背景的人员。)

1
参考广场上的Raviart-Thomas元素
我想学习Raviart-Thomas(RT)元素的工作原理。为此,我想分析地描述基函数在参考正方形上的外观。这里的目标不是自己实现,而只是为了对该元素有一个直观的了解。 我主要是立足这项工作过讨论的三角形元素在这里,也许它延伸到四边形,本身就是一个错误。 也就是说,我可以为第一个RK元素RK0定义基本函数: i=1,...,4。ϕi(x)=a+bx=(a1+b1xa2+b2y)ϕi(x)=a+bx=(a1+b1xa2+b2y)\mathbf{\phi}_i(\mathbf{x}) = \mathbf{a} + \mathbf{b}\mathbf{x} = \begin{pmatrix} a_1 + b_1 x\\a_2 + b_2 y\end{pmatrix} fori=1,…,4.i=1,…,4.i = 1,\dots,4. 在条件是:ϕiϕi\mathbf{\phi}_i ϕi(xj)⋅nj=δijϕi(xj)⋅nj=δij\mathbf{\phi}_i(\mathbf{x}_j)\cdot\mathbf{n}_j = \delta_{ij} 其中是如下所示的单位法线,是其坐标。X Ĵnjnj\mathbf{n}_jxjxj\mathbf{x}_j 这是参考平方,因此这导致每个基函数的方程组。对于这是:φ 1[−1,1]×[1,1][−1,1]×[1,1][-1,1]\times[1,1]ϕ1ϕ1\mathbf{\phi}_1 ⎛⎝⎜⎜⎜10−100−10110100101⎞⎠⎟⎟⎟⎛⎝⎜⎜⎜a1a2b1b3⎞⎠⎟⎟⎟=⎛⎝⎜⎜⎜1000⎞⎠⎟⎟⎟(10100−101−10100101)(a1a2b1b3)=(1000)\begin{pmatrix} 1 & 0 & 1 & 0\\ 0 & -1 & 0 & 1\\ -1 & 0 & 1 & 0\\ …

2
关于log(x)的更快近似
不久前,我编写了一个代码,试图在不使用库函数的情况下计算。昨天,我正在查看旧代码,并尝试使其尽快(正确)。到目前为止,这是我的尝试:升Ò 克(x )log(x)log(x) const double ee = exp(1); double series_ln_taylor(double n){ /* n = e^a * b, where a is an non-negative integer */ double lgVal = 0, term, now; int i, flag = 1; if ( n <= 0 ) return 1e-300; if ( n * ee < 1 …

3
他们在行业中使用半定编程吗?
我在工作清单中看不到任何提及。我看过提到整数编程,MIP,混合整数非线性编程,LP,动态编程等,但是没有SDP。学院里比工业界更流行吗? 从我对电力系统的学者和行业参与者的有限接触中,我认为独立系统运营商很有可能将SDP应用到最佳功率流问题中,但是这取决于蛋头可扩展的程度处理大问题实例的最新方法。

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.