计算科学

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

2
FeniCS:可视化高阶元素
我才刚刚开始使用FEniCS。我正在用三阶元素求解泊松,并想将结果可视化。但是,当我使用plot(u)时,可视化只是结果的线性插值。当输出到VTK时,我会得到相同的结果。在我正在使用的另一个代码中,我编写了一个VTK输出器,该输出器将对高阶元素进行升采样,以使它们实际上在Paraview中看起来较高阶。FEniCS中是否有类似(或更好)的东西?

4
固定数量的RHS评估的最佳ODE方法
在实践中,数值求解运行时IVP X (吨0)= X 0 通常通过评估右手侧(RHS)的持续时间支配 ˚F。因此,让我们假设所有其他操作都是即时的(即没有计算成本)。如果用于解决IVP整体运行时受到限制,那么这是相当于限制性的评估的数目 ˚F一些 Ñ ∈ Ñ。x˙(t)=f(t,x(t)) for t∈[t0,t1]x˙(t)=f(t,x(t)) for t∈[t0,t1] \dot{x}(t) = f(t, x(t)) \quad \text{ for } t \in [t_0, t_1] x(t0)=x0x(t0)=x0 x(t_0) = x_0 ffffffN∈NN∈NN \in \mathbb{N} 我们只对最终值感兴趣。x(t1)x(t1)x(t_1) 我正在寻找理论和实践结果,以帮助我在这种情况下选择最佳的ODE方法。 例如,如果那么我们可以使用两个显式欧拉步长(t 1 - t 0)/ 2或一个宽度t 1 - t 0步长的中点方法求解IVP 。我现在还不清楚哪一个更可取。对于更大的N,当然也可以考虑多步方法,迭代的Runge-Kutta方案等。N=2N=2N = 2(t1−t0)/2(t1−t0)/2(t_1 - …

5
对数百万个数据点重复最近的邻居计算太慢
我有一个数据集,可以在3D模式下运行数百万个数据点。对于我正在进行的计算,我需要计算半径中每个数据点的邻居(范围搜索),尝试拟合函数,计算拟合误差,对下一个数据点重复此操作,依此类推。我的代码可以正常工作,但是运行时间很长,每个数据点大约需要1秒!可能是因为每个点都必须在整个数据集中进行搜索。有没有一种方法可以使该过程更快。我有一个想法,如果我能以某种方式在第一个邻居之间建立某种邻接关系,那么这可能会比较慢。如果有帮助,我试图在3D中找到最佳的Parzen窗口宽度。

3
使用直接方法时出现不适的症状是什么?
假设我们有一个线性系统,并且对它的条件一无所知,也没有关于解的初步信息。我们盲目地应用高斯消去法并得到一些解xxx。如果不对矩阵进行全面的初步分析,是否可以确定该解决方案是否值得信赖(即系统状况良好)?枢纽的数量是否能提供可靠的信息? 通常,“动态”检测疾病的主要准则是什么?

3
如何使用numpy slices表达这种复杂的表达式
我希望在Python中实现以下表达式: 其中和是大小为 numpy数组,是一个大小为的numpy数组。大小可能最大约为10000,并且该函数是内部循环的一部分,该循环将被多次评估,因此速度非常重要。X一世= ∑j = 1i − 1ķ我- Ĵ ,Ĵ一种一世 − j一种Ĵ,X一世=∑Ĵ=1个一世-1个ķ一世-Ĵ,Ĵ一种一世-Ĵ一种Ĵ, x_i = \sum_{j=1}^{i-1}k_{i-j,j}a_{i-j}a_j, XXxÿÿyññnķķkn × nñ×ñn\times nññn 理想情况下,我希望完全避免for循环,尽管我想如果有一个循环就不是世界末日了。问题是我很难在没有几个嵌套循环的情况下查看如何做到这一点,这可能会使它变得很慢。 有人可以看到如何使用numpy高效且容易理解的方式表达上述方程吗?更一般而言,解决此类问题的最佳方法是什么?
14 python  numpy 

1
低秩修改如何影响Krylov方法的收敛性?
假设我有一个线性系统,对于所有使用合适的Krylov方法(例如CG或GMRES)可以快速收敛。如果是具有低秩的矩阵,系统上的相同Krylov方法也会快速收敛吗?(理想情况下,迭代的额外数目大约仅取决于)?Ax=bAx=bA x = bbbbBBBrrr(A+B)x=b(A+B)x=b(A + B) x = brrr 这样的系统的一个例子是良好的预调节膜弹性和弯曲度加上未预调节的具有密集外部产品结构的气压项。 注意,问题是有或没有预处理的相同,由于是秩的修改。P(A+B)Q=PAQ+PBQP(A+B)Q=PAQ+PBQP(A + B)Q = PAQ + PBQrrrPAQPAQPAQ

5
使用时空并行的PDE计算示例
在初始边界值PDEs的数值解中,在空间中采用并行性是很常见的。在时间离散化中采用某种形式的并行性的情况要少得多,并且并行性通常受到更大的限制。我知道越来越多的代码和已发表的作品展示了时间并行性,但是它们都不包含空间并行性。 是否有在空间和时间上都包含并行性的实现示例?我对出版物和可用代码都感兴趣。

4
为了使读者可以清楚地将结果与生成结果的代码相匹配,最有用的方法是为论文编写代码?
我正在写一篇可复制的论文,该论文具有由Python脚本生成的计算结果(类似的MATLAB脚本生成几乎相同的结果)。我认为,如果读者可以将论文中的计算结果与代码中的计算结果相匹配,则读者会更容易理解本文。该工作提出了一种抽象的形式主义,并且本文中的示例应使这种形式主义对读者(其中很多是工程师)更加具体。该代码可能是有关如何执行计算的最详细记录,并且将其弄清楚可以在审核过程中为我们提供帮助。 是否有人对如何使代码与计算结果(数字,方程式)之间的对应关系更清晰有任何建议? 例如,我当时在想实现本文中各个步骤的代码行,我可以引用方程式编号(如果我可以在代码和LaTeX之间进行交叉引用,那真是太神奇了,但是手动标记它们就可以了) ,我可以编写与各种示例和图相对应的函数,例如 def example_1(): # Insert code corresponding to first example pass def figure_1(): # Insert code that generates Figure 1 pass 如果代码很大,而我并不想解释工程中使用的一堆不同的数学方法实际上是如何相同的,那么我可能不会很费心地使代码清晰明了,但是鉴于代码的抽象性质本文和少量的代码基础,似乎在此练习中可能有价值。

6
是否存在将现代Fortran与OOP结合使用的开源科学图书馆?
在过去的几个月中,我花了时间编写用于解决特定PDE系统(描述流体流动/燃烧)的Fortran程序。我尝试使用最新标准的Fortran和现代Fortran具有的新OOP功能。我自己工作,没有Fortran专家在旁边问问题,因此对我来说,学习的一种有益方式是查看使用现代Fortran的其他库/求解器。 不幸的是,所有的Fortran库似乎都是用相当古老的Fortran,Fortran90顶部编写的。因此,我必须自己仔细考虑课堂设计和互动。而且我完全不是我做得对的人,特别是如果从绩效角度看。但是,也许我错过了一些东西,如果有Fortran并使用OOP,有现代科学软件包编写吗? 有很多不错的C ++库可供学习(OpenFOAM,deal.II等)以及Python库。这些语言在一般情况下也有更大的社区。如果我想通过示例学习,最好放弃Fortran并切换语言吗?
14 fortran 

6
大矩阵的近似光谱
我想计算一个大型稀疏矩阵(数十万行)的频谱(所有特征值)。这很难。 我愿意定约。有近似方法可以做到这一点吗? 虽然我希望对此问题有一个一般性的答案,但在以下特定情况下,我也会感到满意。我的矩阵是大图的规范化拉普拉斯算子。特征值将在0到2之间,其中许多聚集在1周围。

4
模拟有限差分法的说明性示例
尽管我试图在互联网上找到一个简洁的解释,但我似乎无法掌握模拟有限差分的概念,甚至无法理解它与标准有限差分的关系。看看一些简单的示例,了解如何对经典线性PDE(双曲线,椭圆形和抛物线形)实现它们。

4
用有限差分法离散对流方程的边界条件
我试图找到一些资源来帮助解释在使用有限差分法求解PDE时如何选择边界条件。 我目前可以使用的所有书籍和笔记都说类似的话: 对于介绍性文本而言,在存在边界的情况下管理稳定性的一般规则过于复杂。他们需要复杂的数学机制 (A. Iserles微分方程数值分析的第一门课程) 例如,当尝试为平流方程实施两步越级方法时: un+1i=un−1i+μ(uni+1−uni−1)uin+1=uin−1+μ(ui+1n−ui−1n)u_i^{n+1} = u_i^{n-1} + \mu (u_{i+1}^n - u_{i-1}^n) 使用MATLAB M = 100; N = 100; mu = 0.5; c = [mu 0 -mu]; f = @(x)(exp(-100*(x-0.5).^2)); u = zeros (M, N); x = 1/(M+1) * (1:M); u(:,1) = f(x); u(:,2) = f(x + mu/(M+1)); …

1
Remez算法
Remez算法是众所周知的迭代例程,可以通过极小极大范数中的多项式近似函数。但是,正如Nick Trefethen [1]所说: 这些[实现]中的大多数都可以追溯到很多年前,实际上,它们中的大多数并不能解决上面提出的一般最佳逼近问题,而是可以解决涉及离散变量或数字滤波的变体。可以找到其他一些流通的计算机程序,但是总的来说,目前似乎没有广泛使用的程序可以计算最佳近似值。 也可以通过应用最小二乘或凸优化来计算minimax解,例如,使用Matlab和应用于[-1,1]的Runge函数的免费CVX工具箱: m = 101; n = 11; % 101 points, polynomial of degree 10 xi = linspace(-1, 1, m); % equidistant points in [-1, 1] ri = 1 ./ (1+(5*xi).^2); % Runge function tic % p is the polynomial of degree (n-1) cvx_begin % minimize the …

2
PETSc对稠密矩阵有多有用?
无论我在哪里看到,PETSc教程/文档等都说它对线性代数很有用,并且通常指定稀疏系统将受益。那密矩阵呢?我关注解决稠密。Ax=bAx=bAx=bAAA 我已经在Fortran中编写了自己的CG和QMR代码。基本构造是撕裂伪代码,并在可能的情况下(和)添加BLAS例程ddot,dnrm并dgemv进行一些自我调整。与PETSc相比如何? 我知道最好的答案是我自己尝试一下,但是由于时间和其他原因,这是不可能的。 任何帮助深表感谢。

3
如何在有限差分法中施加边界条件
我想使用高阶中心差近似值时遇到问题: (−ui+2,j+16ui+1,j−30ui,j+16ui−1,j−ui−2,j12)(−ui+2,j+16ui+1,j−30ui,j+16ui−1,j−ui−2,j12)\left(\frac{-u_{i+2,j}+16u_{i+1,j}-30u_{i,j}+16u_{i-1,j}-u_{i-2,j}}{12}\right) 泊松方程 (uxx+uyy=0)(uxx+uyy=0)(u_{xx}+u_{yy}=0)在边界条件为的平方域中: Δ X = Δ ÿ = 0.1u(0,y)=u(x,0)=u(x,1)=0,u(1,y)=sinπyu(0,y)=u(x,0)=u(x,1)=0,u(1,y)=sin⁡πyu(0,y)=u(x,0)=u(x,1)=0,u(1,y)=\sin \pi y Δx=Δy=0.1Δx=Δy=0.1\Delta{x}=\Delta{y}=0.1 当我想获取域内部点的值时,考虑此近似值,某些点取决于边界的外部点。例如,需要具有的值ü 我- 2 ,Ĵ = Ü - 1 ,0点是的边界之外。在这种情况下,有人可以帮我吗? u1,1u1,1u_{1,1}ui−2,j=u−1,0ui−2,j=u−1,0u_{i-2,j}=u_{-1,0}

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.