偏微分方程数值解法

合集下载

第十章 偏微分方程数值解法

第十章 偏微分方程数值解法

第十章 偏微分方程数值解法偏微分方程问题,其求解十分困难。

除少数特殊情况外,绝大多数情况均难以求出精确解。

因此,近似解法就显得更为重要。

本章仅介绍求解各类典型偏微分方程定解问题的差分方法。

§1 差分方法的基本概念1.1 几类偏微分方程的定解问题椭圆型方程:其最典型、最简单的形式是泊松(Poisson )方程),(2222y x f yu x u u =∂∂+∂∂=∆ 特别地,当0),(≡y x f 时,即为拉普拉斯(Laplace )方程,又称为调和方程2222=∂∂+∂∂=∆yux u u Poisson 方程的第一边值问题为⎪⎩⎪⎨⎧Ω∂=Γ=Ω∈=∂∂+∂∂Γ∈),(),(),(),(),(2222y x y x u y x y x f y ux u y x ϕ 其中Ω为以Γ为边界的有界区域,Γ为分段光滑曲线,ΓΩ称为定解区域,),(y x f ,),(y x ϕ分别为Ω,Γ上的已知连续函数。

第二类和第三类边界条件可统一表示为),(),(y x u u y x ϕα=⎪⎪⎭⎫ ⎝⎛+∂∂Γ∈n 其中n 为边界Γ的外法线方向。

当0=α时为第二类边界条件, 0≠α时为第三类边界条件。

抛物型方程:其最简单的形式为一维热传导方程220(0)u ua a t x∂∂-=>∂∂ 方程可以有两种不同类型的定解问题:初值问题⎪⎩⎪⎨⎧+∞<<∞-=+∞<<-∞>=∂∂-∂∂x x x u x t x u a tu )()0,(,0022ϕ初边值问题221200,0(,0)()0(0,)(),(,)()0u ua t T x l t x u x x x lu t g t u l t g t t Tϕ⎧∂∂-=<<<<⎪∂∂⎪⎪=≤≤⎨⎪==≤≤⎪⎪⎩其中)(x ϕ,)(1t g ,)(2t g 为已知函数,且满足连接条件)0()(),0()0(21g l g ==ϕϕ边界条件)(),(),(),0(21t g t l u t g t u ==称为第一类边界条件。

偏微分方程的数值方法

偏微分方程的数值方法

偏微分方程的数值方法偏微分方程(Partial Differential Equations,简称PDEs)是数学中研究的重要分支,广泛应用于物理学、工程学等领域中。

由于一些复杂的PDEs难以找到解析解,因此需要借助数值方法进行求解。

本文将介绍偏微分方程的数值解法,包括有限差分法、有限元法和谱方法等。

一、有限差分法(Finite Difference Method)有限差分法是解偏微分方程最常用的数值方法之一。

它将偏微分方程中的导数用差商来近似,将空间离散成若干个小区间和时间离散成若干个小时间步长。

通过求解离散化后的代数方程,可以得到原偏微分方程的数值解。

以二维的泊松方程为例,偏微分方程可以表示为:∂²u/∂x² + ∂²u/∂y² = f(x, y)其中,u(x, y)为未知函数,f(x, y)为已知函数。

我们可以将空间离散成Nx × Ny个小区间,时间离散成Nt个小时间步长。

利用中心差分法可以近似表示导数,我们可以得到离散化的代数方程组。

二、有限元法(Finite Element Method)有限元法是一种重要的数值解PDEs的方法。

它将求解区域离散化成一系列的单元,再通过插值函数将每个单元上的未知函数近似表达。

然后,利用加权残差方法,将PDEs转化成代数方程组。

在有限元法中,采用形函数来近似未知函数。

将偏微分方程转化为弱形式,通过选取适当的形函数和权函数,可以得到离散化后的代数方程组。

有限元法适用于求解各种各样的偏微分方程,包括静态和动态、线性和非线性、自由边界和固定边界等问题。

三、谱方法(Spectral Method)谱方法是一种基于特殊函数(如正交多项式)的数值方法,用于解PDEs。

谱方法在求解偏微分方程时,利用高阶连续函数拟合初始条件和边界条件,通过调整特殊函数的系数来近似求解解析解。

谱方法具有高精度和快速收敛的特点,适用于各种偏微分方程求解。

偏微分方程数值解法

偏微分方程数值解法

偏微分方程数值解法
偏微分方程数值解法是一种利用计算机技术获取偏微分方程数值解的方法,它主要目标是解决微分方程的精确、快速、可靠的数值解。

偏微分方程数值解法交叉应用于分析数学、力学、电磁学等不同领域的各种模型,能够大大提高解决微分方程的效率。

偏微分方程数值解法大致分为两个方面:一是求解偏微分方程的离散数值解法;二是精确解对分解数值解法,如多阶谱方法、牛顿法和共轭梯度法等。

其中,离散数值解法是把偏微分方程抽象成一系列数值求解问题,并进行递推叠加求解,而精确解对分解数值解法则是通过优化问题方式求解微分方程精确解,以达到精确求解的目的。

偏微分方程数值解法的有效解决的方法,给科学与技术研究带来了很大的帮助。

它不但克服了无法精确解决某些复杂偏微分方程的困难,而且有更快的求解效率,也可以很好地满足实际科技应用的需要。

偏微分方程数值解法的应用已经普遍发挥出重要的作用,不仅可以解决物理科学问题,还可以解决经济学、商业投资、财务分析等复杂的数学模型。

因此,偏微分方程数值解法的应用已在各个领域得到了广泛的应用,为科学与技术研究提供了很大的帮助,在微分方程求解方面产生了重要的影响。

偏微分方程数值解法

偏微分方程数值解法

偏微分方程数值解法偏微分方程(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)$处的数值解。

由于差分方程中一阶导数的差分公式只具有一阶精度,因此需要使用两个网格点来逼近一阶导数。

第十四章SECTION4偏微分方程的数值解法

第十四章SECTION4偏微分方程的数值解法

§4 偏微分方程的数值解法一、 差分法差分法是常用的一种数值解法.它是在微分方程中用差商代替偏导数,得到相应的差分方程,通过解差分方程得到微分方程解的近似值. 1. 网格与差商在平面 (x ,y )上的一以S 为边界的有界区域D 上考虑定解问题.为了用差分法求解,分别作平行于x 轴和y 轴的直线族.⎩⎨⎧====jhy y ihx x i i (i ,j =0,±1,±2,…,±n ) 作成一个正方形网格,这里h 为事先指定的正数,称为步长;网格的交点称为节点,简记为(i ,j ).取一些与边界S 接近的网格节点,用它们连成折线S h ,S h 所围成的区域记作D h .称D h 内的节点为内节点,位于S h 上的节点称为边界节点(图14.7).下面都在网格D h + S h 上考虑问题:寻求各个节点上解的近似值.在边界节点上取与它最接近的边界点上的边值作为解的近似值,而在内节点上,用以下的差商代替偏导数:()()[]()()[]()()()[]()()()[]()()()[]y x u h y x u y h x u h y x u hy x u h y x u y x u h y x u hy u y h x u y x u y h x u h x u y x u h y x u hyu y x u y h x u h x u ,),(,,1,,2,1,,2,1,,1,,122222222++-+-+≈∂∂∂-+-+≈∂∂-+-+≈∂∂-+≈∂∂-+≈∂∂注意, 1︒ 式中的差商()()[]y x u y h x u h ,,1-+称为向后差商,而()()[]y h x u y x u h,,1--称为向前差商,()()[]y h x u y h x u h,,21--+称为中心差商.也可用向前差商或中心差商代替一阶偏导数.2︒ x 轴与y 轴也可分别采用不同的步长h ,l ,即用直线族⎩⎨⎧====jhy y ihx x j i (i,j =0, ±1, ±2 , ) 作一个矩形网格.图14.72. 椭圆型方程的差分方法[五点格式] 考虑拉普拉斯方程的第一边值问题()()⎪⎪⎩⎪⎪⎨⎧=∈=∂∂+∂∂y x u D y x y ux u S ,,02222μ式中μ(x ,y )为定义在D 的边界S 上的已知函数.采用正方形网格,记u (x i ,y j )=u ij ,在节点(i ,j )上分别用差商 u u u h u u u h i j ij i j i j ij i j -+-+-+-+11211222,,,,,代替2222,yux u ∂∂∂∂,对应的差分方程为u u u h u u u hi j ij i j i j ij i j -+-+-++-+=112112220,,,, (1) 或u u u u u ij i j i j i j i j =+++-+-+141111,,,,即任一节点(i ,j )上u ij 的值等于周围相邻节点上解的值的算术平均,这种形式的差分方程称为五点格式,在边界节点上取()()()h j i ij S j i y x u ∈=,,**μ(2) 式中(x i *,y j *)是与节点(i ,j )最接近的S 上的点.于是得到了以所有内节点上的u ij 值为未知量的若干个线性代数方程,由于每一个节点都可列出一个方程,所以未知量的个数与方程的个数都等于节点的总数,于是,可用通常的方法(如高斯消去法)解此线性代数方程组,但当步长不很大时,用高斯消去法将会遇到很大困难,可用下面介绍的其他方法求解. 若h →0时,差分方程的解收敛于微分方程的解,则称差分方程为收敛的.在计算过程中,由于进行四则运算引起舍入误差,每一步计算的舍入误差都会影响以后的计算结果,如果这种影响所产生的计算偏差可以控制,而不至于随着计算次数的增加而无限增大,则称差分方程是稳定的.[迭代法解差分方程] 在五点格式的差分方程中,任意取一组初值{u ij },只要求它们在边界节点(i ,j )上取以已知值μ(x i *,y j *),然后用逐次逼近法(也称迭代法)解五点格式:()()()()()[]() ,2,1,0411,1,,1,11=+++=+-+-+n u u u u u n j i n j i n j i n j i n ij 逐次求出{u ij (n )}.当(i+1,j ),(i -1,j ),(i ,j -1),(i ,j+1)中有一点是边界节点时,每次迭代时,都要在这一点上取最接近的边界点的值.当n →∞时,u ij (n )收敛于差分方程的解,因此n 充分大时,{u ij (n )}可作差分方程的近似解,迭代次数越多,近似解越接近差分方程的解.[用调节余数法求节点上解的近似值] 以差商代替Δu 时,用节点(i+1,j ),(i -1,j ),(i ,j+1),(i ,j -1)上u 的近似值来表示u 在节点(i ,j )的值将产生的误差,称此误差为余数R ij ,即()()()()()ij j i j i j i j i j i R y x u h y x u h y x u y h x u y h x u =--+++-++,4,,,,设在(i ,j )上给u ij 以改变量δu ij ,从上式可见R ij 将减少4δu ij ,而其余含有u (x i ,y j )的差分方程中的余数将增加δu ij ,多次调整δu ij 的值就可将余数调整到许可的有效数字的范围内,这样可获得各节点上u (x ,y )的近似值.这种方法比较简单,特别在对称区域中计算更简捷.例 求Δu =0在内节点A ,B ,C ,D 上解的近似值.设在边界节点1,2,3,4上分别取值为1,2,3,4(图14.8) 解 记u (A )=u A ,点A ,B ,C ,D 的余数分别为-4u A + u B + u c +5=R A u A -4 u B + u D +7=R Bu A-4 u c + u D +3=R Cu B + u c -4u D +5=R D以边界节点的边值的算术平均值作为初次近似值,即u A (0)=u B (0)=u C (0)=u D (0)=2.5则相应的余数为:R A =0, R B =2, R C = -2, R D =0最大余数为±2.先用δu C =-0.5把R C 缩减为零,u C 相应地变为2,这时R A , R D 也同时缩减(-0.5),新余数是R A =-0.5,R B =2,0=C R , R D =-0.5.类似地再变更δu B =0.5,从而 u B 变为3,则得新余数为0====D C B A R R R R .这样便可消去各节点的余数,于是u 在各节点的近似值为:u A =2.5, u B =3, u C =2, u D =2.5现将各次近似值及余数列表如下:次数调 整 值第n 次近似值及余数u A R A u B R B u C R C u D R D 0 1 2δu C = -0.5 δu B = 0.5 2.5 2.5 2.5 0 -0.5 0 2.5 2.5 3 2 2 0 2.5 2 2 -2 0 0 2.5 2.5 2.5 0 -0.5 0 结果近似值2.5322.5[解重调和方程的差分方法] 在矩形D (x 0≤x ≤x 0+a ,y 0≤y ≤y 0+a )中考虑重调和方程024*******=∂∂+∂∂∂+∂∂=yuy x u x u u ∆取步长h an=,引直线族图14.8⎩⎨⎧+=+=jh y y ihx x 00 (i , j = 0, 1, 2,, n ) 作成一个正方形网格.用差商代替偏导数()()()()()[]{()()()()[]()()()()[]}h y x u h y x u y h x u y h x u h y h x u h y h x u h y h x u h y h x u h y x u h y x u y h x u y h x u y x u 2,2,,2,2,,,,2,,,,8201,-+++-++---++-+-++++--+++-++=上式表明了以(x ,y )为中心时,u (x ,y )的函数值与周围各点函数值的关系,但对于邻近边界节点的点(x ,y ),如图14.9中的A ,就不能直接使用上式,此时将划分网格的直线族延伸,在延伸线上定出与边界距离为h 的点,称这些点为外邻边界节点,如图14.9以A 为中心时,点E ,C 为边界节点,点J ,K 为E ,C 的外邻边界节点,用下法补充定义外邻边界节点J 处函数的近似值u J ,便可应用上面的公式.1︒ 边界条件为()()()S P P x uP u SS ∈==21,μ∂∂μ 时,定义u J =u A -2μ2(E )h .2︒ 边界条件为()()()S P P xuP u SS ∈=∂∂=2221,μμ时,定义u J =2μ1(E )-u A -h 2μ2(E ). [其他与Δu 有关的网格] 1︒ 三角网格(图14.10(a ))取P 0(x ,y )为中心,它的周围6个邻近节点分别为:()()⎪⎪⎭⎫⎝⎛-+⎪⎪⎭⎫ ⎝⎛---⎪⎪⎭⎫⎝⎛+-⎪⎪⎭⎫⎝⎛+++h y h x P h y h x P y h x P h y h x P h y h x P y h x P 23,2,23,2,,23,223,2,,654321则 R u h u u u h i i +∆+∆=⎪⎭⎫⎝⎛-∑=226102161632式中u i =u (P i ), u 0=u (P 0),R 表示余项. 2︒ 六角网格(图14.10(b ))取P 0(x ,y )为中心,它的三个邻近节点分别为图14.9()⎪⎪⎭⎫ ⎝⎛-+-⎪⎪⎭⎫ ⎝⎛++h y h x P y h x P h y h x P 23,2,,23,2321则 R u u u h i i +∆=⎪⎭⎫⎝⎛-∑=0312334.图14.103︒ 极坐标系中的网格(图14.10(c ))取P 0(r ,θ)为中心,它的四个邻近节点分别为()()()()l r P h r P l r P h r P ++--θθθθ,,,,,,4321而拉普拉斯方程01122222=∂∂+∂∂+∂∂=θ∆u r r u r ru u的相应的差分方程为()()()011221110222134222312=⎪⎭⎫ ⎝⎛+--++++u l r h u u rh u u l r u u h 3. 抛物型方程的差分方法 考虑热传导方程的边值问题()()()()()()⎪⎪⎪⎩⎪⎪⎪⎨⎧≥==<<=><<=∂∂-∂∂0,,,,00,0,0,0,021222t t t b u t t u bx x x u t b x x u a t u μμϕ 将[0,b ]分为n 等份,每段长为∆x bn=.引两族平行线(图14.11)图14.11x =x i =i ∆x (i =0,1,2,, n )y =y j =j ∆t (j =0,1,2,, ∆t 取值见后)作成一个长方形的网格,记u (x i ,t j )为u ij ,节点(x i ,t j )为(i ,j ),在节点(i ,j )上分别用(),2,1,1,,2,1Δ2,Δ2,1,11,=-=+---++j n i x u u u t u u ji ij j i ij j i 代替22,xut u ∂∂∂∂,于是边值问题化为差分方程()()()()⎪⎪⎪⎩⎪⎪⎪⎨⎧===-===-==+----++ ,2,1,0,Δ,Δ1,,2,1,Δ,2,1,0,1,,2,10Δ2Δ21002,1,121,j t j u t j u n i x i u j n i x u u u a tu u nj j i j i ij j i ijj i μμϕ 记()22x ta ∆∆=λ,差分方程可写成 () ,2,1,1,,2,121,1,11,=-=+-+=-++j n i u u u u ji ij j i j i λλλ (1)由此可按t 增加的方向逐排求解.在第0排上u i 0的值由初值ϕ(i ∆x )确定,j +1排u i ,j +1的值可由第j 排的三点(i +1,j ),(i ,j ),(i -1,j )上的值u i +1,j , u ij ,u i -1,j 确定,而u 0,j +1,u n ,j +1已由边界条件μ1((j +1)∆t )及μ2((j +1)∆t )给定,于是可逐排计算一切节点上的u ij 值.当ϕ(x ), μ1(x )和μ2(x )充分光滑,且λ≤12时,差分方程收敛而且稳定.所以利用差分方程(1)计算时,必须使λ≤12,即()22Δ21Δx at ≤.热传导方程还可用差分方程()0Δ2Δ21,11,1,121,=+---+-++++x u u u a t u u j i j i j i ij j i 代替,此时如已知前j 排u ij 的值,为求第j +1排的u i ,j +1 必须解包含n -1个未知量u u j n j 1111,,,,+-+ 的线性代数方程组,这种差分方程称为隐式格式的差分方程,前面所提的差分方程称为显式格式差分方程.隐式格式差分方程对任意的λ都是稳定的.4. 双曲型方程的差分方法 考虑弦振动方程的第一边值问题()()()()()()⎪⎪⎪⎩⎪⎪⎪⎨⎧≥==<<=∂∂=><<=∂∂-∂∂0,,,,00),()0,(,0,0,0,02122222t t t b u t t u b x x t x u x x u t b x x u a tu μμψϕ 用矩形网格,列出对应的差分方程:()()()()⎪⎪⎪⎩⎪⎪⎪⎨⎧===-=∆=∆-==-==+--+--+-+ ,2,1,0,Δ,Δ1,,2,1),(,Δ,2,1,1,,2,1,0Δ2)(Δ22100102,1,1221,1,j t j u t j u n i x i t u u x i u j n i x u u u a t u u u nj j i i i j i ij j i j i ij j i μμψϕ 记ω=a tx∆∆与上段一样,利用u u n 022,和在第0排及第1排的已知数值(初始条件)u i 0 , u i 1可计算u i 2,然后用已知的u i 1 , u i 2及u u n 033,可计算u i 3,类似地可确定一切节点上的u ij 值.当ϕ(x ),ψ(x ),μ1(x )和μ2(x )充分光滑,且ω≤1时,差分方程收敛且稳定,所以要取∆∆t ax ≤1.二、 变分方法1. 自共轭边值问题将§3定义的共轭微分算子的概念推广到一般方程.设D 是n E 中的有界区域,S 为其边界,在D 上考虑2k 阶线性微分方程()x f x x uaLu km mi i i ni m m i i n n n=∂∂≡∑∑==++201111 ∂ 的齐次边值问题()r j u l Sj ,,2,10==式中f (x )是D 内的已知函数,l j u 是线性微分算子. 将 ⎰DvLud Ω分部积分k 次得()⎰∑⎰⎪⎪⎭⎫ ⎝⎛+=Ω=S j j j D S v R u R v u vLu d ~,Λd k 1 式中Λ(u ,v )是一个D 上的积分,其被积函数包含u ,v 的k 阶导数;R j 和 R j 是定义在边界S 上的两个线性微分算子.再将Λ(u ,v )分部积分k 次得()()⎰∑⎰⎪⎪⎭⎫⎝⎛-Ω=Λ=S k j j j D S u R v R v uL v u d ~d ,1***式中L*是一个2k 阶的微分算子,称为L 的共轭微分算子.若L=L*,则称L 为自共轭微分算子.从上面可推出格林公式()()⎰∑⎰=-=Ω-Skj jjjjDS u R v R v R u R v uL vLu 1***d ~~d 如从l j u |S =l j v |S =0可推出在边界S 上()∑==-kj jjjju R v R v R u R 1**0~~ 则称l j u |S =0为自共轭边界条件.如果微分算子及边界条件都是自共轭的,则称相应的边值问题为自共轭边值问题,此时有()0d ][=Ω-⎰DuLv vLu每个边值问题对应于某希尔伯特空间H (例如L 2(D ),见第九章§7)中的一个算子A ,其定义域M A 是H 中一线性稠密集合,它由足够次连续可微且满足边界条件的函数组成,在M A 上,Au 的数值与Lu 的数值相同,从而求解边值问题化为解算子方程Au f = 的问题.设A 为定义在实的希尔伯特空间H 中的某线性稠密集合M A 上的线性算子.若对于M A 的任意非零元素,,v u 成立(Au ,v )=(u ,Av )则称A 为对称算子.若对任意非零元素u 成立()0,>u Au 则称A 为正算子.如成立更强的不等式(Au ,u )≥r ||u ||2 (r>0)则称A 为正定算子.此处(u ,v )表示希尔伯特空间的内积,||u ||2=(u ,u ). 2. 变分原理与广义解定理 设A 是正定算子,u 是方程Au =f 在M A 上的解的充分必要条件是: u 使泛函F (u )=(Au ,u )-2(f ,u )取极小值.上述将边值问题化为等价的求泛函极值问题的方法称为能量法.在算子的定义域不够大时,泛函F (u )的极值问题可能无解.不过对于正定算子,可以开拓集合M A ,使在开拓了的集合上,泛函的极值问题有解.为开拓M A ,在M A 上引进新的内积[u ,v ]=(Au ,v ),定义模||u ||2=[u ,u ]=(Au ,u ),在模||u ||的意义下,补充极限元素,得到一个新的完备希尔伯特空间H 0,在H 0上,泛函F (u )仍然有意义,而泛函的极值问题有解.但必须注意,此时使泛函F (u )取极小的元素u 0不一定属于M A ,因此它不一定在原来的意义下满足方程Au=f 及边界条件.称u 0为广义解. 3. 极小化序列与里兹方法在处理变分问题中,极小化序列起着重要的作用.考虑泛函F (u )=(Au ,u )-2(f ,u )以d 表示泛函的极小值.设在希尔伯特空间中存在一列元素{u n } (n =1,2 ,),使()d u F n n =∞→lim则称{u n }为极小化序列.定理 若算子A 是正定的,则F (u )的每一个极小化序列既按H 空间的模也按H 0的模收敛于使泛函F (u )取极小的元素.这个定理不但指出利用极小化序列可求问题的解,而且提供一种近似解的求法,即把极小化序列中的每一个元素当作问题的近似解.设算子A 是正定的,构造极小化序列的里兹方法的主要步骤是:(1) 在线性集合M A 中选取H 0中完备的元素序列{ϕi } , (i =1,2 ,) 并要求对任意的n ,ϕ1,ϕ2,…,ϕn 线性无关.称这样的元素为坐标元素.(2) 令u a n k k k n==∑ϕ1 ,其中a k 为待定系数.代入泛函F (u ),得自变量a 1,a 2,…,a n 的函数()()()∑∑==-=nj jjn k j kjkj n f a A a a u F 11,,2,ϕϕϕ(3) 为使函数F (u n )取极小,必须()()n j a u F jn ,,2,10 ==∂∂,从而求出a k (k =1,2,…,n ).序列{u n }即为极小化序列,u n 可作为问题的近似解. 4. 里兹方法在特征值问题上的应用 算子方程Au -λu =0的非零解λ称为算子A 的特征值,对应的非零解u 称为λ所对应的特征函数. 对线性算子A ,若存在常数K ,使对任何M A 的元素ϕ成立(A ϕ,ϕ)≥K ||ϕ||2则称A 为下有界算子,正定算子是下有界的(此时K =0).记(A ϕ,ϕ)/||ϕ||2的下确界为d . 定理1 设A 为下有界对称算子,若存在不为零的元素ϕ0∈M A ,使()d A =200,ϕϕϕ则d 就是A 的最小特征值,ϕ0为对应的特征函数.于是求下有界对称算子的最小特征值问题化为变分问题,即在希尔伯特空间中求使泛函(A ϕ,ϕ)/||ϕ||2取极小的元素,或在||ϕ||=1的条件下求使泛函(A ϕ,ϕ)取极小的元素.定理2 设A 是下有界对称算子,λ1≤λ2≤…≤λn 是它的前n 个特征值,ϕ1,ϕ2,…,ϕn 是对应的标准正交特征函数,如果存在不为零的元素1+n ϕ,在附加条件(ϕ,ϕ)=1, (ϕ,ϕ1)=0, (ϕ,ϕ2)=0, …, (ϕ,ϕn )=0下使泛函(A ϕ,ϕ)取极小,则ϕn +1是算子A 的特征函数,对应的特征值()11,++=n n A ϕϕλ就是除λ1 ,,λn 外的最小的一个特征值.于是求第n +1个特征值就化为变分问题,即在附加条件(ϕ,ϕ)=1, (ϕ,ϕ1)=0, (ϕ,ϕ2)=0 ,, (ϕ,ϕn )=0 下求使泛函(A ϕ,ϕ)取极小的元素.为了利用里兹方法求特征值,在M A 中选取一列在H 0中完备的坐标元素序列{ϕi },(i =1,2 ,), 令u a n k k k n==∑ϕ1,确定a k ,使在条件 (u n ,u n )=1下,(Au n ,u n )取极小,这个问题化为求n个变元a 1,a 2,…,a n 的函数()()∑==nm k m k k m n n a a A u Au 1,,,ϕϕ在条件()()∑===nm k m k m k n n a a u u 1,1,,ϕϕ下的极值问题,一般可用拉格朗日乘数法解(见第九章§3,t ),此时()()()()()()()()()()()()0,,,,,,,,,,,,11222121111111=------n n n n n n n n n n A A A A A A ϕϕλϕϕϕϕλϕϕϕϕλϕϕϕϕλϕϕϕϕλϕϕϕϕλϕϕ的最小的根即为特征值的近似值,如果将上式的根按大小排列,就依次得后面的特征值的近似值,但精确度较差. 对一般算子方程Au -λBu=0如果A 为下有界对称算子,B 为正定算子,则()()()()()()()()()()()()0,,,,,,,,,,,,11222121111111=------n n n n n n n n n n B A B A B A B A B A B A ϕϕλϕϕϕϕλϕϕϕϕλϕϕϕϕλϕϕϕϕλϕϕϕϕλϕϕ的根就是特征值的近似值. 5. 迦辽金方法用里兹方法解数学物理问题有很多限制,最主要的限制是要求算子正定,但很多问题不一定满足这个条件,迦辽金方法弥补了这个缺陷. 迦辽金方法的主要步骤是:(1) 在M A 中选取在空间H 中完备的元素序列{ϕi } (i =1,2 ,),其中任意n 个元素线性无关,称{ϕi } (i =1,2,…)为坐标元素序列. (2) 把方程的近似解表示为u a n k k k n==∑ϕ1式中a k 是待定常数,把u n 代入方程Au=f 中的u ,两端与ϕj (j =1,2,…,n )求内积,得 a k 的n 个代数方程()()()n j f A a j n k j k k,,2,1,,1 ==∑=ϕϕϕ(3) 求出a k ,代回u n 的表达式,便得方程的近似解u n .在自共轭边值问题中,当算子是正定时,由迦辽金方法和里兹方法得到的关于a k 的代数方程组是相同的.。

偏微分方程数值解法初步分析

偏微分方程数值解法初步分析

偏微分方程数值解法初步分析偏微分方程(Partial Differential Equation, PDE)是数学中的一类重要方程,广泛应用于物理学、工程学、经济学等众多领域。

然而,由于其复杂性,解析解往往难以求得,因此需要借助数值方法进行求解。

本文将初步分析偏微分方程的数值解法。

一、有限差分法有限差分法(Finite Difference Method, FDM)是一种常用的数值解法,通过将偏微分方程中的导数用差商代替,将偏微分方程转化为代数方程组进行求解。

这种方法的基本思想是将求解区域进行网格化,将偏微分方程中的导数用网格点上的函数值表示,然后利用差商逼近导数,将偏微分方程离散为代数方程组。

二、有限元法有限元法(Finite Element Method, FEM)是一种广泛应用的数值解法,尤其适用于复杂几何形状的求解。

该方法将求解区域划分为有限个小区域,称为单元,然后在每个单元上建立近似函数,通过将偏微分方程转化为变分问题,并将变分问题进行离散化处理,得到一个代数方程组进行求解。

三、特征线方法特征线方法(Method of Characteristics)是一种适用于一阶偏微分方程的数值解法。

该方法通过求解偏微分方程的特征线方程,将偏微分方程转化为常微分方程,在每条特征线上求解,然后将各个特征线上的解进行拼接得到整个解。

四、谱方法谱方法(Spectral Method)是一种数值解法,它利用特定的基函数,如傅里叶级数、切比雪夫级数等,对偏微分方程进行展开,通过系数的求解来得到数值解。

谱方法具有高精度和高收敛速度的优点,尤其适用于解析解存在的情况。

五、数值实验与误差分析在选择适用于某个具体偏微分方程的数值解法时,通常需要进行数值实验和误差分析。

数值实验是指通过计算机模拟的方式,求解偏微分方程并验证数值解的准确性;误差分析是指对数值解与解析解的差异进行分析,从而评估数值解的精度和收敛性。

总结:本文初步分析了偏微分方程数值解法的几种常见方法,包括有限差分法、有限元法、特征线方法和谱方法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
b[i].y=(i/(N+1))*(1.0/N);
}
}
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];
E[k][i]=t;
}
t=RHS[ik];
RHS[ik]=RHS[k];
RHS[k]=t;
}
//消元
for(i=k+1;i<NG+1;i++)
{if(i%2==1)
{
a[i][1]=(i+1)/2+i/(2*N);
a[i][2]=a[i][1]+1;
a[i][3]=a[i][1]+N+1;
}
if(i%2==0)
{
a[i][3]=i/2+1+(i-1)/(2*N);
a[i][1]=a[i][3]+N+1;
a[i][2]=a[i][3]+N;
}
void UFE(double ufe[],double **fe,int **a)//合成总列阵
{
int i;
for(i=1;Biblioteka <LEE+1;i++)
{
ufe[a[i][1]]+=fe[i][1];
ufe[a[i][2]]+=fe[i][1];
ufe[a[i][3]]+=fe[i][1];
}
}
void NEWTONITERATIVE(double aryn1[],double aryn[],int n,int **a,struct xy b[],int bd[])//牛顿迭代
其中用 作为牛顿迭代的初值.
三、计算流程
取 作为方程的准确解,算得初值函数:
右端函数:
+
.
取 .
1对 作三角剖分:分别沿x , y方向对[0,1]区间作N等分并将每个小正方形沿对角线分为两个三角形.
2对节点进行总体编码(这里按先沿x方向再沿y方向进行顺序编码),并建立局部编码和总体编码之间的对应关系.
L2误差 的阶数为 其中 为时间步长, 为空间步长
这里取N=25,则元素总数LEE = 2*N*N =1250,节点总数NG = (N+1)(N+1) = 676,
取时间步长TSTP = 0.01,时间步数TN = 100,即在t=1时,算得结果为:
即当 = 0.01, =0.04时,
L2误差为0.052853阶数为
for(i=1;i<LEE+1;i++)
{
uk[a[i][1]][a[i][1]]+=aij[i][1];
uk[a[i][2]][a[i][2]]+=aij[i][2];
uk[a[i][3]][a[i][3]]+=aij[i][3];
uk[a[i][1]][a[i][2]]+=aij[i][4];
uk[a[i][2]][a[i][1]]+=aij[i][4];
{
bd[j]=i;
j++;
}
}
}
void dealwithbd(double **uk,int bd[]) //近似处理本质边界条件
{
int i;
for(i=bd[1];bd[i]!=0;i++)
uk[bd[i]][bd[i]]=uk[bd[i]][bd[i]]*10e20;
}
void GAUSSELIMINATE(double **E,double RHS[NG+1])//利用高斯消元法解线性方程组
return z;
}
double u(double x,double y,double t)//方程的准确解
{
double z;
z=100*(t+1)*x*y*(x-1)*(y-1);
return z;
}
void II(int **a) //节点的局部编码与总体编码
{
int i;
for(i=1;i<LEE+1;i++)
{
int i;
for(i=1;i<LEE+1;i++)
fe[i][1]=1.0/(18*N*N)*(aryn[a[i][1]]+aryn[a[i][2]]+aryn[a[i][3]])+TSTP*1.0/(54*N*N)*(aryk[a[i][1]]+aryk[a[i][2]]+aryk[a[i][3]])*(aryk[a[i][1]]+aryk[a[i][2]]+aryk[a[i][3]])+TSTP*1.0/(6*N*N)*f((b[a[i][1]].x+b[a[i][2]].x+b[a[i][3]].x)/3.0,(b[a[i][1]].y+b[a[i][2]].y+b[a[i][3]].y)/3.0,(n+1)*TSTP);
{
int i;
int k;
for(k=1;k<NG;k++)
{
//选主元
double bmax=0.0;
int ik;
for(i=k;i<NG+1;i++)
{
if(bmax<fabs(E[i][k]))
{
bmax=fabs(E[i][k]);
ik=i;
}
}
if(bmax<1.0e-10)
{
printf("主元太小");
{
int i;
double *aryk;
aryk=(double *)calloc(NG+1,sizeof(double));
for(i=1;i<NG+1;i++)
aryk[i]=aryn[i];
double boot;
double **uk;
double *ufe;
double **aij;
double **fe;
}
}
}
struct xy {double x;double y;};
void XY(struct xy b[]) //节点实际坐标
{
int i;
for(i=1;i<NG+1;i++)
if(i%(N+1)==0)
{
b[i].x=1;
b[i].y=(i/(N+1)-1)*(1.0/N);
}
else
{
b[i].x=(i%(N+1)-1)*(1.0/N);
if(aij==NULL)
{
printf("aij fail\n");
aij[i][2]=1.0/(12*N*N)+0.5*TSTP+2*TSTP*1.0/(54*N*N)*(aryk[a[i][1]]+aryk[a[i][2]]+aryk[a[i][3]]);// 2 2
aij[i][3]=1.0/(12*N*N)+0.5*TSTP+2*TSTP*1.0/(54*N*N)*(aryk[a[i][1]]+aryk[a[i][2]]+aryk[a[i][3]]);// 3 3
if(uk[i]==NULL)
{
printf("uki fail\n");
exit(1);
}
}
ufe=(double *)calloc(NG+1,sizeof(double));
if(ufe==NULL)
{
printf("ufe fail\n");
exit(1);
}
aij=(double **)calloc(LEE+1,sizeof(double *));
}
double f(double x,double y,double t)//右端函数f
{
double z;
相关文档
最新文档