东南大学_数值分析_第七章_偏微分方程数值解法
偏微分方程数值解法

偏微分方程数值解法
偏微分方程数值解法是一种利用计算机技术获取偏微分方程数值解的方法,它主要目标是解决微分方程的精确、快速、可靠的数值解。
偏微分方程数值解法交叉应用于分析数学、力学、电磁学等不同领域的各种模型,能够大大提高解决微分方程的效率。
偏微分方程数值解法大致分为两个方面:一是求解偏微分方程的离散数值解法;二是精确解对分解数值解法,如多阶谱方法、牛顿法和共轭梯度法等。
其中,离散数值解法是把偏微分方程抽象成一系列数值求解问题,并进行递推叠加求解,而精确解对分解数值解法则是通过优化问题方式求解微分方程精确解,以达到精确求解的目的。
偏微分方程数值解法的有效解决的方法,给科学与技术研究带来了很大的帮助。
它不但克服了无法精确解决某些复杂偏微分方程的困难,而且有更快的求解效率,也可以很好地满足实际科技应用的需要。
偏微分方程数值解法的应用已经普遍发挥出重要的作用,不仅可以解决物理科学问题,还可以解决经济学、商业投资、财务分析等复杂的数学模型。
因此,偏微分方程数值解法的应用已在各个领域得到了广泛的应用,为科学与技术研究提供了很大的帮助,在微分方程求解方面产生了重要的影响。
偏微分方程组数值解法

偏微分方程组数值解法
偏微分方程组是描述自然、科学和工程问题的重要数学工具。
由于解析解通常难以获得,因此需要使用数值方法来解决这些方程组。
本文将介绍偏微分方程组的一些数值解法,包括有限差分法、有限元法、谱方法和边界元法等。
有限差分法是一种基本的数值方法,将偏微分方程转化为差分方程,然后使用迭代算法求解。
该方法易于理解和实现,但对网格的选择和精度的控制要求较高。
有限元法是目前广泛使用的数值方法之一,它将偏微分方程转化为变分问题,并通过对函数空间的逼近来求解。
该方法对复杂几何形状和非线性问题有很好的适应性,但需要对网格进行精细的划分,计算量较大。
谱方法是一种高精度的数值方法,它将偏微分方程转化为特征值问题,并使用级数逼近来求解。
该方法在高精度求解、解析性质研究和数值计算效率方面具有优势,但需要对函数的光滑性和周期性有较高的要求。
边界元法是一种基于边界积分方程的数值方法,它将偏微分方程转化为边界积分方程,并使用离散化方法求解。
该方法适用于求解边界问题和无穷域问题,但对边界的光滑性和边界积分算子的性质有较高的要求。
总之,在实际问题中选择合适的数值方法需要综合考虑问题的性质、计算资源、精度要求等因素。
偏微分方程数值解法

}
}
void boundnote(int bd[],struct xy b[])//找出边界点
{
int i,j=1;
for(i=1;i<NG+1;i++)
{
if(b[i].x==0||b[i].x==1.0||b[i].y==0||b[i].y==1.0)
#define TSTP 0.01 //时间步长
#define TN 100 //时间迭代步数
#define J 1.0/(N*N) //雅可比行列式的绝对值
double u0(double x,double y) //初值函数u0
{
double z;
z=100*x*y*(x-1)*(y-1);
return z;
}
}
void AIJ(double **aij,double aryk[],int **a) //计算单元刚度矩阵
{
int i;
for(i=1;i<LEE+1;i++)
{
aij[i][1]=1.0/(12*N*N)+TSTP+2*TSTP*1.0/(54*N*N)*(aryk[a[i][1]]+aryk[a[i][2]]+aryk[a[i][3]]);// 1 1
//主元太小
}
//交换第ik行和第k行的元素
if(ik!=k)
{
double t;
for(i=k;i<NG+1;i++)
{
t=E[ik][i];
E[ik][i]=E[k][i];
偏微分方程的数值解(差分法)

局地直 角坐标系 中的大气 运动基本 方程组
1 p du dt a cos fv 1 p dv fu dt a 1 p dw dt z g d u v w 0 x y z dt p RT c dT RT dp Q p dt p dt dq S dt
2 y (y ) [ f ( x x) f ( x)] f ( x x) f ( x) [ f ( x 2x) f ( x x)] [ f ( x x) f ( x)] f ( x 2x) 2 f ( x x) f ( x)
在某些情况下也可取向前或向后的二阶差商。
三.逼近误差
1.定义:差商与导数之间的误差表明差商逼 近导数的程度,称为逼近误差。 2.差商精度:由函数的Taylor展开,可以得到 逼近误差相对于自变量差分(增量)的量级, 称为用差商代替导数的精度。
f ( x x ) ( x ) 2 ( x ) 3 ( x )4 IV f ( x ) x f ( x ) f ( x ) f ( x ) f ( x ) O(( x )5 ) 2! 3! 4! f ( x x ) f ( x ) x IV f ( x ) f ( x ) f ( x) 2 f ( x) x ( x ) ( x )3 O(( x )4 ) 2! 3! 4! f ( x ) O( x )
涡度方程:
i
j
k
V x y z u v w w u u w v u i j k z x x x y z
东南大学_数值分析_第七章_偏微分方程数值解法

第七章 偏微分方程数值解法——Crank-Nicolson 格式****(学号) *****(姓名)上机题目要求见教材P346,10题。
一、算法原理本文研究下列定解问题(抛物型方程)22(,) (0,0)(,0)() (0)(0,)(), (1,)() (0)u ua f x t x l t T t x u x x x l u t t u t t t T ϕαβ⎧∂∂-=<<≤≤⎪∂∂⎪=≤≤⎨⎪==<≤⎪⎩(1)的有限差分法,其中a 为正常数,,,,f ϕαβ为已知函数,且满足边界条件和初始条件。
关于式(1)的求解,采用离散化方法,剖分网格,构造差分格式。
其中,网格剖分是将区域{}0,0D x l t T =≤≤≤≤用两簇平行直线(0)(0)i k x x ih i M t t k k N τ==≤≤⎧⎨==≤≤⎩ 分割成矩形网格,其中,l Th M Nτ==分别为空间步长和时间步长。
将式(1)中的偏导数使用不同的差商代替,将得到不同的差分格式,如古典显格式、古典隐格式、Crank-Nicolson 格式等。
其中,Crank-Nicolson 格式具有更高的收敛阶数,应用更广泛,故本文采用Crank-Nicolson 格式求解抛物型方程。
Crank-Nicolson 格式推导:在节点(,)2i k x t τ+处考虑式(1),有22(,)(,)(,)222i k i k i k u u x t a x t f x t t x τττ∂∂+-+=+∂∂ (2)对偏导数(,)2i k u x t t τ∂+∂用中心差分展开 []2311+131(,)(,)(,)(,) ()224k k i k i k i k i i k i k u ux t u x t u x t x t t t t ττηητ++∂∂+=--<<∂∂ (3) 将22(,)2i k u x t x τ∂+∂在节点(,)i k x t 和1(,)i k x t +表示为222+122224+1221(,)=(,)+(,)22 (,) ()8i k i k i k k k i i k i k u u ux t x t x t x x x ux t t x tττηη⎡⎤∂∂∂+⎢⎥∂∂∂⎣⎦∂-<<∂∂ (4)对以上两个偏导数用二阶差分展开[]2112224i+141(,)(,)2(,)(,) (,) ()12i k i k i k i k kk i k i i u x t u x t u x t u x t x hh u t x x x ξξ+-∂=-+∂∂-<<∂ (5)[]211111122241i+141(,)(,)2(,)(,) (,) ()12i k i k i k i k k ki k i i u x t u x t u x t u x t x hh u t x x xξξ++++-++∂=-+∂∂-<<∂ (6)将式(4)(5)(6)分别代入式(3),略去高阶小量,用k i u 代替(,)i k u x t 并化简得()()()2111111112122,22k k k k k k k k i i i i i i i i i k a u u u u u u u u f x t h ττ+++++-+-⎛⎫⎡⎤---++-+=+ ⎪⎣⎦⎝⎭ (7) 令2/r a h τ=,将式(7)联合式(1)初始条件和边界条件,用矩阵的形式表示为:11112212211111221122221122221122 k k k k k kM M k k M M r r r r u u r r r r r ru u r r r r u u r r u u r r r r +++--+--⎡⎤⎡⎤+---⎢⎥⎢⎥⎢⎥⎢⎥⎡⎤⎡⎤⎢⎥⎢⎥-+--⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥-+--⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎢⎥⎢⎥⎢⎥⎢⎥-+-⎢⎥⎢⎥⎣⎦⎣⎦()()()()()()112211,22,2 ,2,22k k k k M k M k k k r f x t t t f x t f x t r f x t t t ττααττττττββ+--+⎡⎤⎛⎫+++ ⎪⎢⎥⎝⎭⎢⎥⎢⎥⎛⎫+ ⎪⎢⎥⎝⎭⎢⎥+⎢⎥⎢⎥⎛⎫⎢⎥+ ⎪⎢⎥⎝⎭⎢⎥⎛⎫⎢⎥+++ ⎪⎢⎥⎝⎭⎣⎦(8) Crank-Nicolson 格式的截断误差为22()R O h τ=+,具有较高的精度。
计算方法5_偏微分方程数值解法

菱形格式
uk , j +1 = uk , j −1 + 2 bs( uk+1, j − uk , j +1 − uk , j −1 + uk −1, j ) k = 1,2 , ⋯ , N − 1, j = 0 ,1,2 , ⋯ k = 1,2 , ⋯ , N − 1 uk ,0 = ϕ ( kh) u0 , j = g1 ( jτ ), uN , j = g2 ( jτ ), j = 0 ,1,2 , ⋯
uk , j+1 − uk , j uk+1, j − uk , j +a =0 τ h
(5.2)
加上初始条件, 加上初始条件,构成差分格式
uk , j+1 = uk , j − ar(uk+1, j − uk , j ) uk ,0 = ϕk
差分格式的收敛性和稳定性
差分格式的依赖区域 库朗条件: 库朗条件:差分格式收敛的必要条件是差分格式的依 赖区域应包含微分方程的依赖区域 稳定性
(x, y) ∈ Ω (x, y) ∈ Γ
建立差分格式
将xy平面分割成矩形网格 平面分割成矩形网格
x = x k = kh, k = 0,±1,±2, ⋯ y = y j = jτ, j = 0,±1,±2, ⋯
表示网格节点(x 用(k,j)表示网格节点 k,yj),网格节点上的函数 表示网格节点 , 值为u(k,j) 值为
~ u(k , j + 1) − u(k , j − 1) τ2 ∂u = − u′′′ (k , t ) t 2τ 6 ∂t k , j u(k + 1, j) − u(k − 1, j) h2 ∂u ′ x = − u′x′ (~, j) 2h 6 ∂x k , j
偏微分方程数值解法

偏微分方程数值解法偏微分方程(Partial Differential Equations,简称PDE)是数学中重要的研究对象,其在物理学、工程学、经济学等领域有广泛的应用。
然而,对于大多数偏微分方程而言,很难通过解析方法得到精确解,因此需要借助数值解法来求解。
本文将介绍几种常见的偏微分方程数值解法。
一、有限差分法(Finite Difference Method)有限差分法是一种常见且直观的偏微分方程数值解法。
其基本思想是将偏微分方程中的导数通过差分近似来表示,然后通过离散化的方式转化为代数方程组进行求解。
对于一维偏微分方程,可以通过将空间坐标离散化成一系列有限的格点,并使用中心差分格式来近似原方程中的导数项。
然后,将时间坐标离散化,利用差分格式逐步计算每个时间步的解。
最后,通过迭代计算所有时间步,可以得到整个时间域上的解。
对于二维或高维的偏微分方程,可以将空间坐标进行多重离散化,利用多维的中心差分格式进行近似,然后通过迭代计算得到整个空间域上的解。
二、有限元法(Finite Element Method)有限元法是另一种重要的偏微分方程数值解法。
其基本思想是将求解区域分割成有限数量的子区域(单元),然后通过求解子区域上的局部问题来逼近整个求解区域上的解。
在有限元法中,首先选择适当的形状函数,在每个单元上构建近似函数空间。
然后,通过构建变分问题,将原偏微分方程转化为一系列代数方程。
最后,通过求解这些代数方程,可以得到整个求解区域上的解。
有限元法适用于各种复杂的边界条件和几何构型,因此在实际工程问题中被广泛应用。
三、谱方法(Spectral Methods)谱方法是一种基于特定基函数(如切比雪夫多项式、勒让德多项式等)展开解的偏微分方程数值解法。
与有限差分法和有限元法不同,谱方法在整个求解区域上都具有高精度和快速收敛的特性。
在谱方法中,通过选择适当的基函数,并利用其正交性质,可以将解在整个求解区域上展开为基函数系数的线性组合。
偏微分方程的数值解法

偏微分方程的数值解法偏微分方程(Partial Differential Equation,PDE)是描述物理、化学、工程学等许多科学领域中变化的方程。
由于PDE的求解通常是困难的,因此需要使用数值方法。
本文将介绍偏微分方程的数值解法。
一般来说,求解PDE需要求得其解析解。
然而,对于复杂的PDE,往往不存在解析解,因此需要使用数值解法求解。
数值解法可以分为两类:有限差分法和有限元法。
有限差分法是将计算区域分成网格,利用差分公式将PDE转化为离散方程组,然后使用解线性方程组的方法求解。
有限元法则是将计算区域分成有限数量的单元,每个单元内使用多项式函数逼近PDE的解,在单元之间匹配边界条件,得到整个区域上的逼近解。
首先讨论有限差分法。
常见的差分公式包括前向差分、后向差分、中心差分等。
以一维热传导方程为例,其偏微分方程形式为:$$ \frac{\partial u}{\partial t}=\frac{\partial^2 u}{\partial x^2} $$其中,$u(x,t)$表示物理量在时刻$t$和位置$x$处的值。
将其离散化,可得到:$$ \frac{u(x_i,t_{j+1})-u(x_i,t_j)}{\Delta t}=\frac{u(x_{i+1},t_j)-2u(x_i,t_j)+u(x_{i-1},t_j)}{\Delta x^2} $$其中,$x_i=i\Delta x$,$t_j=j\Delta t$,$\Delta x$和$\Delta t$分别表示$x$和$t$上的网格大小。
该差分方程可以通过简单的代数操作化为:$$ u_{i,j+1}=u_{i,j}+\frac{\Delta t}{\Delta x^2}(u_{i+1,j}-2u_{i,j}+u_{i-1,j}) $$其中,$u_{i,j}$表示在网格点$(x_i,t_j)$处的数值解。
由于差分方程中一阶导数的差分公式只具有一阶精度,因此需要使用两个网格点来逼近一阶导数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第七章 偏微分方程数值解法——Crank-Nicolson 格式****(学号) *****(姓名)上机题目要求见教材P346,10题。
一、算法原理本文研究下列定解问题(抛物型方程)22(,) (0,0)(,0)() (0)(0,)(), (1,)() (0)u ua f x t x l t T t x u x x x l u t t u t t t T ϕαβ⎧∂∂-=<<≤≤⎪∂∂⎪=≤≤⎨⎪==<≤⎪⎩(1)的有限差分法,其中a 为正常数,,,,f ϕαβ为已知函数,且满足边界条件和初始条件。
关于式(1)的求解,采用离散化方法,剖分网格,构造差分格式。
其中,网格剖分是将区域{}0,0D x l t T =≤≤≤≤用两簇平行直线(0)(0)i k x x ih i M t t k k N τ==≤≤⎧⎨==≤≤⎩ 分割成矩形网格,其中,l Th M Nτ==分别为空间步长和时间步长。
将式(1)中的偏导数使用不同的差商代替,将得到不同的差分格式,如古典显格式、古典隐格式、Crank-Nicolson 格式等。
其中,Crank-Nicolson 格式具有更高的收敛阶数,应用更广泛,故本文采用Crank-Nicolson 格式求解抛物型方程。
Crank-Nicolson 格式推导:在节点(,)2i k x t τ+处考虑式(1),有22(,)(,)(,)222i k i k i k u u x t a x t f x t t x τττ∂∂+-+=+∂∂ (2)对偏导数(,)2i k u x t t τ∂+∂用中心差分展开 []2311+131(,)(,)(,)(,) ()224k k i k i k i k i i k i k u ux t u x t u x t x t t t t ττηητ++∂∂+=--<<∂∂ (3) 将22(,)2i k u x t x τ∂+∂在节点(,)i k x t 和1(,)i k x t +表示为222+122224+1221(,)=(,)+(,)22 (,) ()8i k i k i k k k i i k i k u u ux t x t x t x x x ux t t x tττηη⎡⎤∂∂∂+⎢⎥∂∂∂⎣⎦∂-<<∂∂ (4)对以上两个偏导数用二阶差分展开[]2112224i+141(,)(,)2(,)(,) (,) ()12i k i k i k i k kk i k i i u x t u x t u x t u x t x hh u t x x x ξξ+-∂=-+∂∂-<<∂ (5)[]211111122241i+141(,)(,)2(,)(,) (,) ()12i k i k i k i k k ki k i i u x t u x t u x t u x t x hh u t x x xξξ++++-++∂=-+∂∂-<<∂ (6)将式(4)(5)(6)分别代入式(3),略去高阶小量,用k i u 代替(,)i k u x t 并化简得()()()2111111112122,22k k k k k k k k i i i i i i i i i k a u u u u u u u u f x t h ττ+++++-+-⎛⎫⎡⎤---++-+=+ ⎪⎣⎦⎝⎭ (7) 令2/r a h τ=,将式(7)联合式(1)初始条件和边界条件,用矩阵的形式表示为:11112212211111221122221122221122 k k k k k kM M k k M M r r r r u u r r r r r ru u r r r r u u r r u u r r r r +++--+--⎡⎤⎡⎤+---⎢⎥⎢⎥⎢⎥⎢⎥⎡⎤⎡⎤⎢⎥⎢⎥-+--⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥-+--⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎢⎥⎢⎥⎢⎥⎢⎥-+-⎢⎥⎢⎥⎣⎦⎣⎦()()()()()()112211,22,2 ,2,22k k k k M k M k k k r f x t t t f x t f x t r f x t t t ττααττττττββ+--+⎡⎤⎛⎫+++ ⎪⎢⎥⎝⎭⎢⎥⎢⎥⎛⎫+ ⎪⎢⎥⎝⎭⎢⎥+⎢⎥⎢⎥⎛⎫⎢⎥+ ⎪⎢⎥⎝⎭⎢⎥⎛⎫⎢⎥+++ ⎪⎢⎥⎝⎭⎣⎦(8) Crank-Nicolson 格式的截断误差为22()R O h τ=+,具有较高的精度。
二、计算代码Crank_Nicolson 格式完整代码function U=Crank_Nicolson(f,a,x0,xn,dx,t0,tm,dt,g,s0,sn) %采用Crank_Nicolson 格式求解抛物线型偏微分方程 % du/dt-a*d2u/dx2=f(x,t) %Input - f 抛物方程右端函数 % - a 为二阶导系数 % - x0 and xn 空间域端点 % - t0 and tm 时间域端点 % - dx 为空间步长,dt 为时间步长 % - g 为初始条件函数 % - s0,sn 为边界条件函数%Output - U 输出,横坐标为空间,纵坐标为时间 M=(tm-t0)/dt;N=(xn-x0)/dx;%网格数 x=x0+dx:dx:xn-dx; t=t0:dt:tm; u=feval(g,x);u=u'; r=a*dt/dx/dx;%步长比%Crank-Nicolson 格式:A*u_(k+1)=B*u_k+CA=-r/2*[zeros(1,N-1);eye(N-2,N-2),zeros(N-2,1)]-r/2* ...[zeros(N-2,1),eye(N-2,N-2);zeros(1,N-1)]+(1+r)*eye(N-1,N-1); A=inv(A);B=r/2*[zeros(1,N-1);eye(N-2,N-2),zeros(N-2,1)]+r/2* ...[zeros(N-2,1),eye(N-2,N-2);zeros(1,N-1)]+(1-r)*eye(N-1,N-1); U=[]; for k=1:MC=dt*feval(f,x,t(k)+0.5*dt); C=C';C(1)=C(1)+r/2*(feval(s0,t(k))+feval(s0,t(k+1))); C(N-1)=C(N-1)+r/2*(feval(sn,t(k))+feval(sn,t(k+1))); u=A*(B*u+C); U=[U;u']; end三、计算结果及分析对于定解问题2210 (01,01)(,0) (01)(0,), (1,) (01)x t t u ux t t x u x e x u t e u t e t +⎧∂∂-=<<≤≤⎪∂∂⎪=≤≤⎨⎪==<≤⎪⎩(9)取空间步长1/x M ∆=,时间步长1/t N ∆=,采用Crank_Nicolson 格式计算,并将计算结果与精确值()x t y x e +=作比较,计算调用程序Crank_Nicolson.m ,如下clcformat longf=inline('0*x+0*t');%抛物方程右端函数 g=inline('exp(x)');%初始条件函数s0=inline('exp(t)');sn=inline('exp(t+1)');%边界条件函数 a=1;x0=0;xn=1;t0=0;tm=1; M=40;N=40; err=[]; kk=4; for ii=1:kkdx=1/N;dt=(tm-t0)/M;%空间步长,时间步长U=Crank_Nicolson(f,a,x0,xn,dx,t0,tm,dt,g,s0,sn);%调用Crank_Nicolson 函数 U_CN=U(length(U),N/5:N/5:4*N/5); %在四个目标点处的数值解 fu=inline('exp(x+t)'); %精确方程 xx=0.2:0.2:0.8;tt=1.0;U_real=feval(fu,xx,tt); %在四个目标点处的精确解 %abs(U_CN-U_real)err=[err,sqrt((U_CN-U_real)*(U_CN-U_real)')]; %平方误差和开方 M=M*2;N=N*2;%步长反复二分 end for ii=2:kkerr(ii)/err(ii-1)%误差观察 endfprintf('%16.15f ', err)在MATLAB 中运行以上程序,计算结果如表1所示表1 Crank_Nicolson 格式计算结果及其误差(40M N ==)从表1可以看出,在空间步长和时间步长均为0.25时,采用Crank_Nicolson 格式计算抛物线方程(5)的数值解与精确解之间的误差达到了410-,故很好的实现偏微分方程的数值解法,且具有较高的精度和较低的运算复杂度。
同时,为了比较不同的步长所带来的计算精度,本文通过将步长反复二分,观察四个输出点的误差均方和减小的规律,如表2所示。
表2 不同步长下的误差及其规律从表2可以看出,随着空间步长和时间步长的减小,数值计算的误差呈下降趋势,说明,随着时间步长和空间步长的减小,计算结果可以收敛到精确解。
同时,通过观察表2最后一列,可见,时间步长和空间步长同时减半,计算误差降低为原来的四分之一,这与Crank_Nicolson 格式的截断误差22()R O h τ=+(其中为τ时间步长,h 为空间步长)是符合一致的。
四、结论本文介绍了偏微分方程求解的Crank_Nicolson 方法,其主要思想是用离散的、只含有限个未知数的差分方程去近似代替连续变量的微分方程和边界条件,并将相应的差分方程的解作为原问题的近似解。
Crank_Nicolson 格式是一种隐格式,是绝对稳定的。
同时,本文考察了其收敛性,实验证明,Crank_Nicolson 格式是收敛的,且具有二阶收敛性。