Questions tagged «finite-difference»

指导数通过有限差分进行离散化及其在偏微分方程数值解中的应用。

2
在完全封闭的诺伊曼边界条件(边界处的反射)下通过有限差分求解对流方程时的奇异振荡
我正在尝试求解平流方程,但是当波从边界反射时,解决方案中会出现奇怪的振荡。如果有人在看过此文物之前,我很想知道原因以及如何避免它! 这是一个动画gif,在单独的窗口中打开以查看动画(它仅被缓存一次,或仅播放一次!) 请注意,在波开始从第一个边界开始反射之前,传播似乎非常稳定。您认为这里可能会发生什么?我花了几天时间仔细检查我的代码,找不到任何错误。奇怪的是,似乎有两种传播的解决方案:一种是积极的,一种是消极的。从第一个边界反射之后。解决方案似乎沿着相邻的网格点传播。 实现细节如下。 对流方程, ∂ü∂Ť= v ∂ü∂X∂ü∂Ť=v∂ü∂X\frac{\partial u}{\partial t} = \boldsymbol{v}\frac{\partial u}{\partial x} 其中是传播速度。vv\boldsymbol{v} Crank-Nicolson是对流方程的无条件 稳定离散化,条件是在空间中缓慢变化(傅立叶变换时仅包含低频分量)。u (x )ü(X)u(x) 我应用的离散化是 ϕn + 1Ĵ- φñĴΔ Ť= v [ 1 - β2 Δ X(ϕñj + 1- φñj − 1) + β2 Δ X(ϕn + 1j + 1- φn + 1j − 1)]ϕĴñ+1个-ϕĴñΔŤ=v[1个-β2ΔX(ϕĴ+1个ñ-ϕĴ-1个ñ)+β2ΔX(ϕĴ+1个ñ+1个-ϕĴ-1个ñ+1个)] …

5
为什么等距点的表现不好?
实验说明: 在拉格朗日插值中,精确的方程在NNN个点(多项式N−1N−1N - 1)处采样,并在101个点处插值。这里从2变化到64。每个时间,和制备误差图。可以看出,当在等距点对函数进行采样时,误差开始下降(直到小于约15时才会发生),然后误差随着进一步增加而上升。NNNL1L1L_1L2L2L_2L∞L∞L_\inftyNNNNNN 而如果初始采样是在Legendre-Gauss(LG)点(Legendre多项式的根)或Legendre-Gauss-Lobatto(LGL)点(Lobatto多项式的根)进行的,则误差降至机器级别,并且不会当进一步增加时增加。NNN 我的问题是 等距点到底会发生什么? 为什么多项式阶数增加会导致误差在某个点之后上升? 这是否还意味着如果我将等距点用于WENO / ENO重建(使用拉格朗日多项式),那么在平滑区域中,我会得到错误?(嗯,这些只是假设的问题(以我的理解),对于WENO方案,重建15或更高阶数的多项式确实是不合理的) 额外细节: 功能近似: X∈[-1,1]f(x)=cos(π2 x)f(x)=cos⁡(π2 x)f(x) = \cos(\frac{\pi}{2}~x),x∈[−1,1]x∈[−1,1]x \in [-1, 1] ñxxx分为等距点(以后称为LG)点。每次在101点插值该函数。NNN 结果: a)等距点(插值): N=65N=65N = 65 b)等距点(误差图,对数刻度): a)LG点(插值): N=65N=65N = 65 b)LG点(误差图,对数刻度):

2
连续性方程的良好有限差分
下面的等式将是一个很好的有限差分离散化: ∂ρ∂t+∇⋅(ρu)=0∂ρ∂t+∇⋅(ρu)=0\frac{\partial \rho}{\partial t} + \nabla \cdot \left(\rho u\right)=0? 我们可以考虑一维情况: ∂ρ∂t+ddx(ρu)=0∂ρ∂t+ddx(ρu)=0\frac{\partial \rho}{\partial t} + \frac{d}{dx}\left(\rho u\right)=0 由于某种原因,我可以找到的所有方案都是针对拉格朗日坐标的。我暂时想出了这个方案(不考虑j索引): ρn+1i,j−ρni,jτ+1hx(ρn+1i+1,j+ρn+1i,j2unxi+1/2,j−ρn+1i,j+ρn+1i−1,j2unxi−1/2)=0ρi,jn+1−ρi,jnτ+1hx(ρi+1,jn+1+ρi,jn+12uxi+1/2,jn−ρi,jn+1+ρi−1,jn+12uxi−1/2n)=0 \frac{\rho^{n+1}_{i,j}-\rho^{n}_{i,j}}{\tau} + \frac{1}{h_x}\left(\frac{\rho^{n+1}_{i+1,j}+\rho^{n+1}_{i,j}}{2}u^{n}_{_xi+1/2,j}- \frac{\rho^{n+1}_{i,j}+\rho^{n+1}_{i-1,j}}{2}u^{n}_{_xi-1/2}\right)=0 但是似乎真的不稳定或有一些可怕的稳定条件。是这样吗? 速度实际上是通过达西定律。另外,我们还有状态方程。整个系统还包括一个能量方程和理想气体的状态方程。速度可能变为负数。u=−kμ∇pu=−kμ∇pu=-\frac{k}{\mu}\nabla p

5
如何在数值上区分不均匀采样的函数?
标准有限差分公式是可用的,以数值计算的期望你有函数值下一个衍生物在均匀间隔的点,让ħ ≡ X ķ + 1 - X ķ是常数。如果我的点间距不均匀怎么办,以使现在从一对相邻的点到另一对相邻的点变化?显然,我仍然可以将一阶导数计算为,但是存在高阶数值微分公式以及可以适应网格大小变化的精度?f(xk)f(xk)f(x_k)h≡xk+1−xkh≡xk+1−xkh \equiv x_{k+1} - x_khhhf′(x)≈1hk[f(xk+1)−f(xk)]f′(x)≈1hk[f(xk+1)−f(xk)]f'(x) \approx \frac{1}{h_k}[f(x_{k+1}) - f(x_k)]

3
科学Python中有限差分法的建议
对于我正在研究的项目(在双曲PDE中),我希望通过查看一些数字来大致了解行为。但是,我不是一个很好的程序员。 您是否可以推荐一些资源来学习如何在Scientific Python中有效地编码有限差分方案(也欢迎其他学习曲线较小的语言)? 为了让您了解此建议的受众群体(我): 我是经过培训的纯数学家,并且对有限差分方案的理论知识有些熟悉 我需要帮助的是如何使计算机计算出我想要的计算量,特别是以一种方式,我不会重复别人已经付出的太多努力(以免在需要时重新发明轮子)包已可用)。(我想避免的另一件事是,在建立了适合该目的的数据结构时,手动编写一些愚蠢的代码。) 我有一些编码经验;但是我没有使用Python的知识(因此我不介意是否有足够的资源来学习其他语言(例如,例如Octave))。 书籍,文档以及示例代码的集合都将是有用的。

4
统一与非统一网格
这可能是一个学生级别的问题,但我无法完全了解自己。为什么在数值方法中使用非均匀网格更准确?我想在一些有限差分法的情况下为形式的PDE üŤ(x ,t )= uX X(x ,t )üŤ(X,Ť)=üXX(X,Ť)u_t(x,t)=u_{xx}(x,t)。并假设我对点的解感兴趣X∗X∗x^{\ast}。因此,我可以看到,如果我近似二阶导数,例如在使用三点近似的均匀网格上,则误差为二阶Ø (^ h2)Ø(H2)O(h^2)。然后,我可以通过映射构造非均匀网格,并找到用于近似导数的三个点的系数。我可以进行泰勒展开,然后再次获得导数的界线,使其成为二阶Ø (^ h2)Ø(H2)O(h^2),其中HHh是在均匀网格上的距离​​,从该距离我可以获取到非均匀网格的映射。这两个估计都包含导数,我不清楚为什么在非均匀网格上求解会更准确,因为它取决于误差估计中相应导数的大小?

2
用Neumann边界条件写泊松方程有限差分矩阵
我对使用有限差分法求解泊松方程感兴趣。我想更好地了解如何用Neumann边界条件编写矩阵方程。有人会审查以下内容,对吗? 有限差分矩阵 泊松方程, ∂2u(x)∂x2=d(x)∂2u(x)∂x2=d(x) \frac{\partial^2u(x)}{\partial x^2} = d(x) 可以用有限差分矩阵方程近似 1(Δx)2M∙u^=d^1(Δx)2M∙u^=d^ \frac{1}{(\Delta x)^2} \textbf{M}\bullet \hat u = \hat d 其中是矩阵,和是(列)向量, Ñ × Ñ ù ð 1 × Ñ中号中号\textbf{M}n × nñ×ñn \times nü^ü^\hat ud^d^\hat d1 × n1个×ñ1 \times n 添加Neumann边界条件 诺伊曼边界条件会在边界处强制产生一个已知通量(此处我们将其应用到边界位于的左侧),x = 0X=0x=0 ∂u (x = 0 )∂X= σ∂ü(X=0)∂X=σ \frac{\partial u(x=0)}{\partial x} …

2
对流方程的隐式有限差分格式
有许多FD方案为平流式在web讨论。例如在这里:http: //farside.ph.utexas.edu/teaching/329/lectures/node89.html∂Ť∂Ť+ 你∂Ť∂X= 0∂Ť∂Ť+ü∂Ť∂X=0\frac{\partial T}{\partial t}+u\frac{\partial T}{\partial x}=0 但是我还没有看到有人提出过这样的“隐式”迎风方案: 。Ťn + 1一世- Ťñ一世τ+ ü Ťn + 1一世- Ťn + 1i − 1HX= 0Ť一世ñ+1个-Ť一世ñτ+üŤ一世ñ+1个-Ť一世-1个ñ+1个HX=0\frac{T^{n+1}_i-T^{n}_i}{\tau}+u\frac{T^{n+1}_i-T^{n+1}_{i-1}}{h_x}=0 我所看到的所有逆风方案都是处理空间导数上一个时间步的数据。是什么原因呢?经典的迎风方案与我上面写的相比如何?

4
如何对变量重新排序以产生最小带宽的带状矩阵?
我正在尝试通过有限差分来求解2D泊松方程。在此过程中,我获得了每个方程式中只有变量的稀疏矩阵。例如,如果变量为U,则离散化将产生:555UUU Ui−1,j+Ui+1,j−4Ui,j+Ui,j−1+Ui,j+1=fi,jUi−1,j+Ui+1,j−4Ui,j+Ui,j−1+Ui,j+1=fi,jU_{i-1,j} + U_{i+1,j} -4U_{i,j} + U_{i,j-1} + U_{i,j+1} = f_{i,j} 我知道我可以通过迭代方法求解该系统,但是我想到,如果我对变量进行适当排序,我也许能够获得可以通过直接方法(即高斯消去w)求解的带状矩阵。 / o旋转)。这可能吗?是否有其他策略可用于其他结构较疏的稀疏系统呢?

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)); …

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}

3
使用有限差分法时如何处理弯曲边界条件?
我正在尝试自己学习数字解PDE。 我开始使用有限差分法(FDM)已有一段时间了,因为我听说FDM是PDE众多数值方法的基础。到目前为止,我对FDM有了一些基本的了解,并且能够使用我在图书馆和Internet上找到的资料来为常规区域中的一些简单PDE编写代码,但是奇怪的是,我通常所用的资料很少关于治疗不规则的,弯曲的,奇怪的边界,像这样。 而且,我从未见过处理弯曲边界的简单方法。例如,《偏微分方程的数值解-入门》(Morton K.,Mayers D)一书,其中包含我到目前为止所见的最详细的讨论(主要在p71的3.4和p199的6.4中)。对于我来说,这确实很麻烦且令人沮丧。 因此,正如标题所要求的那样,关于弯曲边界,人们通常在使用FDM时如何处理它?换句话说,最流行的治疗方法是什么?还是取决于PDE的类型? 是否有(至少相对)优雅且高精度的方法来处理弯曲边界?还是只是不可避免的痛苦? 我什至要问,当今人们是否真的将FDM用于弯曲边界?如果没有,通常的方法是什么? 任何帮助,将不胜感激。

3
生成运动网格的基本原理是什么?
我对实现对流扩散问题的移动网格感兴趣。自适应运动网格方法提供了一个很好的示例,说明如何使用有限差分对一维Burger方程进行此操作。有人能够提供一个使用移动网格的有限差分法求解一维对流扩散方程的实例吗? 例如,以保守的形式,等式为 üŤ= (a (x )u + düX)Xut=(a(x)u+dux)x u_t = (a(x)u + du_x)_x 其中是速度(空间的函数)。初始条件u (0 ,x )可以指定(例如)从左向右(例如,沿着管道)流动的流动物种,其中初始条件具有急剧的梯度。一个(x )a(x)a(x)u (0 ,x )u(0,x)u(0,x) 如何解决运动网格的均分布问题(可能使用De Boor算法或其他方法)?我希望自己在Python中实现此功能,以便您的答案可以更好地转换为代码! 悬赏之前的旧问题 根据系统属性生成自适应网格的基本方法是什么?我应该使用通量来衡量梯度较大的地方吗? 因为我寻求一种迭代(时间扫描)解决方案。我想从旧网格插值到新网格很重要,通常的方法是什么? 我真的很想看到一个解决简单问题(例如对流方程)的实例。 有关该问题的细节的一些背景知识。我正在模拟一维耦合方程组, ∂ü∂Ť= 一个ü∂2ü∂X2+ bü∂ü∂X+ fü(x ,u ,v ,w )∂v∂Ť= 一个v∂2v∂X2+ bv∂v∂X+ fv(x ,u ,v ,w )∂w∂Ť= 一个ü∂ü∂X+ 一个v∂v∂X+ fw(x ,u ,v ,w )∂u∂t=au∂2u∂x2+bu∂u∂x+fu(x,u,v,w)∂v∂t=av∂2v∂x2+bv∂v∂x+fv(x,u,v,w)∂w∂t=au∂u∂x+av∂v∂x+fw(x,u,v,w) …

2
冯·诺伊曼稳定性分析的有限差分方法的替代方法
我正在研究耦合的一维多孔弹性方程(比奥模型),给出为: −(λ+2μ)∂2u∂x2+∂p∂x=0−(λ+2μ)∂2u∂x2+∂p∂x=0-(\lambda+ 2\mu) \frac{\partial^2 u}{\partial x^2} + \frac{\partial p}{\partial x} = 0 ∂∂t[γp+∂u∂x]−κη[∂2p∂x2]=q(x,t)∂∂t[γp+∂u∂x]−κη[∂2p∂x2]=q(x,t)\frac{\partial}{\partial t} \left[ \gamma p + \frac{\partial u}{\partial x}\right] -\frac{\kappa}{\eta}\left[\frac{\partial^2 p}{\partial x^2}\right] =q(x,t) 在域并具有边界条件: Ω=(0,1)Ω=(0,1)\Omega=(0,1) p=0,(λ+2μ)∂u∂x=−u0p=0,(λ+2μ)∂u∂x=−u0p=0, (\lambda + 2\mu)\frac{\partial u}{\partial x}=-u_0 at and在。ü = 0 ,∂ px=0x=0x=0X=1u=0,∂p∂x=0u=0,∂p∂x=0u=0, \frac{\partial p}{\partial x} = 0x=1x=1x=1 我使用中心有限差分方案离散了这些方程式: γp吨+ 1我 -p吨我(λ + 2 …

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.