有限元解二维变系数抛物方程

合集下载

抛物型方程的galerkin有限元方法

抛物型方程的galerkin有限元方法

抛物型方程的Galerkin有限元方法一、引言抛物型方程是一类常见的偏微分方程,具有广泛的应用。

在数值解中,Galerkin有限元方法是一种常用且有效的方法。

本文将介绍抛物型方程的基本概念,并详细讲解Galerkin有限元方法在求解抛物型方程中的应用。

二、抛物型方程的基本概念抛物型方程是指具有二阶时间导数和二阶空间导数的偏微分方程。

一般形式为:∂u−Δu=f∂t其中,u为未知函数,t为时间变量,Δ为Laplace算子,f为给定的函数。

抛物型方程的一个重要特点是初始条件和边界条件对解的影响非常大。

合适的初始条件和边界条件能够唯一确定方程的解。

三、Galerkin有限元方法Galerkin有限元方法是一种利用函数空间进行近似的数值计算方法。

它基于以下思想:将问题的解表示为函数空间中的一个函数,通过求解一组代数方程组来近似求解原始方程。

1. 函数空间的选择在应用Galerkin有限元方法求解抛物型方程时,需要选择合适的函数空间。

常用的函数空间有有限维函数空间和无限维函数空间。

具体的选择需要根据问题的特点和计算的要求来确定。

2. 弱形式的推导对于抛物型方程,我们可以将其转化为弱形式。

弱形式是通过将方程两边乘以一个测试函数,并进行积分得到的。

这样可以减小对解的要求,并使得问题更容易求解。

3. 数值离散和代数方程的建立接下来,需要对时间和空间进行离散。

通常使用网格来进行离散,将时间和空间分割为有限个小区域。

然后,通过选择适当的基函数,在每个小区域上近似原方程的解。

最终得到一组代数方程组。

求解代数方程组是Galerkin有限元方法的最后一步。

可以使用常用的数值方法,如迭代法、直接法等,来求解代数方程组。

根据计算要求和问题特点,选择合适的求解方法。

四、应用案例以一维热传导方程为例,展示Galerkin有限元方法在求解抛物型方程中的应用。

热传导方程是一个典型的抛物型方程,描述了物体内部的温度分布随时间变化的规律。

《2024年两类方程的时空混合有限元格式》范文

《2024年两类方程的时空混合有限元格式》范文

《两类方程的时空混合有限元格式》篇一一、引言在数值分析和计算物理领域,有限元方法是一种重要的数值技术,广泛应用于解决各类复杂的偏微分方程问题。

近年来,随着对时空混合问题研究的深入,混合有限元格式成为了一种具有广泛应用前景的数值求解方法。

本文将介绍两种不同类型的方程,即抛物型方程和双曲型方程的时空混合有限元格式,并探讨其在实际问题中的应用。

二、抛物型方程的时空混合有限元格式抛物型方程是描述物质在时间上的扩散、热传导等过程的数学模型。

对于这类问题,我们采用时空混合有限元方法进行求解。

首先,我们将时间域和空间域进行离散化处理,然后通过构建适当的基函数,将原问题转化为一个线性系统。

接着,利用高斯消元法或迭代法求解该线性系统,得到问题的解。

在抛物型方程的时空混合有限元格式中,我们采用了等参元和线性插值技术,使得求解过程更加稳定和高效。

此外,我们还采用了自适应网格技术,根据问题的特点自动调整网格的疏密程度,进一步提高求解精度。

三、双曲型方程的时空混合有限元格式双曲型方程是描述物质在时间和空间上传播、振动等过程的数学模型。

与抛物型方程类似,我们同样采用时空混合有限元方法进行求解。

然而,由于双曲型方程具有更复杂的动力学特性,我们需要采用更加精细的离散化方法和基函数来描述问题的解。

在双曲型方程的时空混合有限元格式中,我们采用了高阶基函数和精细的网格划分来提高求解精度。

同时,我们还采用了稳定化技术来处理数值计算中的不稳定性问题。

此外,我们还探讨了多尺度问题的处理方法,通过引入多尺度基函数来提高求解效率。

四、实际应用我们通过两个实际问题的求解过程来展示两类方程的时空混合有限元格式的应用。

首先是一个二维的热传导问题,我们利用抛物型方程的时空混合有限元格式求解了该问题,得到了良好的数值结果。

其次是一个弹丸在空气中传播的问题,我们利用双曲型方程的时空混合有限元格式进行了模拟和分析,得到了弹丸传播过程中的速度、压力等物理量的变化情况。

课件:有限元离散方法(二维问题)

课件:有限元离散方法(二维问题)

vh Nven
(Bv ) Bu dxdy en T en
en
fvhdxdy
en
gv ds u h
Bu en
uhvh
h
( Nven )T Nuen
en
v Bv h
en
en
en en
( Nven )T Nuen ds
en en
uh • vh
en
( Nven )T fdxdy
定义空间:Vh vh C() : vh ei ax by c
a,b,c ?
找一个函数u∈V, 满足
D(u, v) F (v) v V
找一个函数 uh Vh 满足
D(uh , vh ) F(vh ), vh Vh
有限元离散
定义空间:Vh vh C() : vh ei ax by c
k
en ii
l 0
1
t l
2
dt ,
其中
k
en ij
k en ji
l
0
1
t l
t l
dt ,
k
en jj
l 0
t l
2
dt
,
k
en mi
k en mj
k en mm
k en jm
k en im
0.
面元荷载的计算
F
en i
F en
NT
fdxdy
F
en j
,
其中F
Nuen
)ds
vT
CT en
K
en
Cen
u
0 0 0 0
k en ii
k en ij
0

有限元法求解二维Poisson方程的MATLAB实现

有限元法求解二维Poisson方程的MATLAB实现

(x,y) e 9 0 ,
其中
— ax ay
e i 2(/3), 为 i?2 中的
有界凸区域,区 域 / 3 = { ( * ,;K) U2 + y2 < l }.
1 二 维 P oisson方程的有限元法
l .i 有限元方法的基本原理和步骤 有限元法是基于变分原理和剖分技术的一种数
值计算方法,把微分方法的定解问题转化为求解一
摘 要 :文 章 讨 论 了 圆 形 区 域 上 的 三 角 形 单 元 剖 分 、有 限 元 空 间 ,通 过 变 分 形 式 离 散 得 到 有 限 元 方 程 .用 M A T L A B 编程求得数值解,并进行了误差分析. 关 键 词 :Poisson方 程 ;有限元方法;M A T L A B 编 程 ;三角形单元剖分
U e l f +2( n , R m).
定理[7]1 (有 限 元 近 似 解 的 炉 模 估 计 )假设 满足引理的条件,则 对 V f/ E 妒+1(/3,i T ) ,存在与 A 无 关 的常数C , 使得
W u - u . w, ^ chk \ u \ M
定理[7]2 (有 限 元 近 似 解 的 i 2 模 估 计 )假设
1
0
0
0
2
3
0
0
細 !1[8]:
4
560ຫໍສະໝຸດ 中 图 分 类 号 :0241.8
文 献 标 识 码 :A
文章编号:1009 - 4 9 7 0 ( 2 0 1 8 ) 0 5 - 0015 - 04
0 引言
热 学 、流 体 力 学 、电 磁 学 、声 学 等 学 科 中 的 相
关 过 程 ,都 可 以 用 椭 圆 型 方 程 来 描 述 .最 为 典 型 的

抛物型方程的计算方法

抛物型方程的计算方法

分类号:O241.82本科生毕业论文(设计)题目:一类抛物型方程的计算方法作者单位数学与信息科学学院作者姓名专业班级2011级数学与应用数学创新2班指导教师论文完成时间二〇一五年四月一类抛物型方程的数值计算方法(数学与信息科学学院数学与应用数学专业2011级创新2班)指导教师摘要: 抛物型方程数值求解常用方法有差分方法、有限元方法等。

差分方法是一种对方程直接进行离散化后得到的差分计算格式,有限元方法是基于抛物型方程的变分形式给出的数值计算格式。

本文首先给出抛物型方程的差分计算方法,并分析了相应差分格式的收敛性、稳定性等基本理论问题.然后,给出抛物型方程的有限元计算方法及理论分析。

关键词:差分方法,有限元方法,收敛性,稳定性Numerical computation methods for a parabolic equationYan qian(Class 2, Grade 2011,College of Mathematics and Information Science)Advisor: Nie huaAbstract:The common methods to solve parabolic equations include differential method,finite element method etc。

The main idea of differential method is to construct differential schemes by discretizing differential equations directly. Finite element scheme is based on the variational method of parabolic equations。

In this article, we give some differential schemes for a parabolic equation and analyze their convergence and stability. Moreover,the finite element method and the corresponding theoretical analysis for parabolic equation are established.Key words:differential method,finite element method, convergence,stability1 绪 论1。

二维抛物线方程数值解法(ADI隐式交替法)方法

二维抛物线方程数值解法(ADI隐式交替法)方法

ADI隐式交替法三种解法及误差分析(一般的教材上只说第一种)理论部分参看孙志忠:偏微分方程数值解法注意:1.最好不要直接看程序,中间很多公式很烦人的(一定要小心),我写了两天,终于写对了。

2.中间:例如r*(u(i-1,m1,k)+u(i+1,m1,k))形式写成分形式:r*u(i-1,m1,k)+r*u(i+1,m1,k)后面会出错,我也不是很清楚为什么,可能由于舍入误差,或者大数吃掉小数的影响。

3.下面有三个程序4.具体理论看书,先仔细看书(孙志忠:偏微分方程数值解法)或者网上搜一些理论。

Matlab程序:1.function [u u0 p e x y t]=ADI1(h1,h2,m1,m2,n)%ADI解二维抛物线型偏微分方程(P-R交替隐式,截断)%此程序用的是追赶法解线性方程组%h1为空间步长,h2为时间步长%m1,m2分别为x方向,y方向网格数,n为时间网格数%p为精确解,u为数值解,e为误差%定义u0(i,j,k)=u(i,j,k+1/2),因为矩阵中,i,j,k必须全为整数x=(0:m1)*h1+0;%定义x0,y0,t0是为了f(x,t)~=0的情况%y=(0:m2)*h1+0;t=(0:n)*h2+0; t0=(0:n)*h2+1/2*h2;for k=1:n+1for i=1:m2+1for j=1:m1+1f(i,j,k)=-1.5*exp(0.5*(x(j)+y(i))-t0(k));endendendfor i=1:m2+1for j=1:m1+1u(i,j,1)=exp(0.5*(x(j)+y(i)));endendfor k=1:n+1for i=1:m2+1u(i,[1 m1+1],k)=[exp(0.5*y(i)-t(k)) exp(0.5*(1+y(i))-t(k))]; u0(i,[1 m1+1],k)=[exp(0.5*y(i)-t0(k)) exp(0.5*(1+y(i))-t0(k))] ;endendfor k=1:n+1for j=1:m1+1u([1 m2+1],j,k)=[exp(0.5*x(j)-t(k)) exp(0.5*(1+x(j))-t(k))]; u0([1 m2+1],j,k)=[exp(0.5*x(j)-t0(k)) exp(0.5*(1+x(j))-t0(k))];endendr=h2/(h1*h1);r1=2*(1-r);r2=2*(1+r);for k=1:n %外循环,先固定每一时间层,每一时间层上解一线性方程组% for i=2:m2a=-r*ones(1,m1-1);c=a;a(1)=0;c(m1-1)=0;b=r2*ones(1,m1-1);d(1)=r*u0(i,1,k)+r*(u(i-1,2,k)+u(i+1,2,k))+r1*u(i,2,k)+...h2*f(i,2,k);for l=2:m1-2d(l)=r*(u(i-1,l+1,k)+u(i+1,l+1,k))+r1*u(i,l+1,k)+...h2*f(i,l+1,k);%输入部分系数矩阵,为0的矩阵元素不输入%一定要注意输入元素的正确性endd(m1-1)=r*u0(i,m1+1,k)+r*(u(i-1,m1,k)+u(i+1,m1,k))...+r1*u(i,m1,k)+h2*f(i,m1,k);for l=1:m1-2 %开始解线性方程组消元过程a(l+1)=-a(l+1)/b(l);b(l+1)=b(l+1)+a(l+1)*c(l);d(l+1)=d(l+1)+a(l+1)*d(l);endu0(i,m1,k)=d(m1-1)/b(m1-1); %回代过程%for l=m1-2:-1:1u0(i,l+1,k)=(d(l)-c(l)*u0(i,l+2,k))/b(l);endendfor j=2:m1a=-r*ones(1,m2-1);c=a;a(1)=0;c(m2-1)=0;b=r2*ones(1,m2-1);d(1)=r*u(1,j,k+1)+r*(u0(2,j-1,k)+u0(2,j+1,k))+r1*u0(2,j,k)+...h2*f(2,j,k);for l=2:m2-2d(l)=r*(u0(l+1,j-1,k)+u0(l+1,j+1,k))+r1*u0(l+1,j,k)+... h2*f(l+1,j,k);%输入部分系数矩阵,为0的矩阵元素不输入%一定要注意输入元素的正确性endd(m2-1)=r*u(m2+1,j,k+1)+r*(u0(m2,j-1,k)+u0(m2,j+1,k))...+r1*u0(m2,j,k)+h2*f(m2,j,k);for l=1:m2-2 %开始解线性方程组消元过程a(l+1)=-a(l+1)/b(l);b(l+1)=b(l+1)+a(l+1)*c(l);d(l+1)=d(l+1)+a(l+1)*d(l);endu(m2,j,k+1)=d(m2-1)/b(m2-1); %回代过程%for l=m2-2:-1:1u(l+1,j,k+1)=(d(l)-c(l)*u(l+2,j,k+1))/b(l);endendendfor k=1:n+1for i=1:m2+1for j=1:m1+1p(i,j,k)=exp(0.5*(x(j)+y(i))-t(k)); %p为精确解e(i,j,k)=abs(u(i,j,k)-p(i,j,k)); %e为误差endendend2.function [u p e x y t]=ADI2(h1,h2,m1,m2,n)%ADI解二维抛物线型偏微分方程(D'Yakonov交替方向隐格式)%此程序用的是追赶法解线性方程组%h1为空间步长,h2为时间步长%m1,m2分别为x方向,y方向网格数,n为时间网格数%p为精确解,u为数值解,e为误差%定义u0(i,j,k)=u'(i,j,k)(引入的过渡层),因为矩阵中,i,j,k必须全为整数x=(0:m1)*h1+0;y=(0:m2)*h1+0;t=(0:n)*h2+0;t0=(0:n)*h2+1/2*h2;%定义t0是为了f(x,y,t)~=0的情况% for k=1:n+1for i=1:m2+1for j=1:m1+1f(i,j,k)=-1.5*exp(0.5*(x(j)+y(i))-t0(k));%编程时-t0(k)写成了+t0(k),导致错误;endendend%初始条件for i=1:m2+1for j=1:m1+1u(i,j,1)=exp(0.5*(x(j)+y(i)));endend%边界条件for k=1:n+1for i=1:m2+1u(i,[1 m1+1],k)=[exp(0.5*y(i)-t(k)) exp(0.5*(1+y(i))-t(k))];endendr=h2/(h1*h1);r4=1+r;r5=r/2;for k=1:nfor i=2:m2u0(i,[1 m1+1],k)=r4*u(i,[1 m1+1],k+1)-r5*(u(i-1,[1 m1+1],... k+1)+u(i+1,[1 m1+1],k+1));endendfor k=1:n+1for j=1:m1+1u([1 m2+1],j,k)=[exp(0.5*x(j)-t(k)) exp(0.5*(1+x(j))-t(k))];endendr1=r-r*r;r2=2*(r-1)*(r-1);r3=r*r/2;for k=1:n %外循环,先固定每一时间层,每一时间层上解一线性方程组% for i=2:m2a=-r*ones(1,m1-1);c=a;a(1)=0;c(m1-1)=0;b=2*r4*ones(1,m1-1);d(1)=r*u0(i,1,k)+r1*(u(i-1,2,k)+u(i,1,k)+u(i+1,2,k)+...u(i,3,k))+r2*u(i,2,k)+r3*(u(i-1,1,k)+...u(i+1,1,k)+u(i-1,3,k)+u(i+1,3,k))+2*h2*f(i,2,k);for l=2:m1-2d(l)=r1*(u(i-1,l+1,k)+u(i,l,k)+u(i+1,l+1,k)+...u(i,l+2,k))+r2*u(i,l+1,k)+r3*(u(i-1,l,k)+...u(i+1,l,k)+u(i-1,l+2,k)+u(i+1,l+2,k))+2*h2*f(i,l+1,k);%输入部分系数矩阵,为0的矩阵元素不输入%一定要注意输入元素的正确性endd(m1-1)=r*u0(i,m1+1,k)+r1*(u(i-1,m1,k)+u(i,m1-1,k)+...u(i+1,m1,k)+u(i,m1+1,k))+r2*u(i,m1,k)+...r3*(u(i-1,m1-1,k)+...u(i+1,m1-1,k)+u(i-1,m1+1,k)+u(i+1,m1+1,k))+2*h2*f(i,m1,k);for l=1:m1-2 %开始解线性方程组消元过程a(l+1)=-a(l+1)/b(l);b(l+1)=b(l+1)+a(l+1)*c(l);d(l+1)=d(l+1)+a(l+1)*d(l);end%回代过程%u0(i,m1,k)=d(m1-1)/b(m1-1);for l=m1-2:-1:1u0(i,l+1,k)=(d(l)-c(l)*u0(i,l+2,k))/b(l);endendfor j=2:m1a=-r*ones(1,m2-1);c=a;a(1)=0;c(m2-1)=0;b=2*r4*ones(1,m2-1);d(1)=r*u(1,j,k+1)+2*u0(2,j,k);for l=2:m2-2d(l)=2*u0(l+1,j,k);%输入部分系数矩阵,为0的矩阵元素不输入%一定要注意输入元素的正确性endd(m2-1)=2*u0(m2,j,k)+r*u(m2+1,j,k+1);for l=1:m2-2 %开始解线性方程组消元过程a(l+1)=-a(l+1)/b(l);b(l+1)=b(l+1)+a(l+1)*c(l);d(l+1)=d(l+1)+a(l+1)*d(l);endu(m2,j,k+1)=d(m2-1)/b(m2-1); %回代过程%for l=m2-2:-1:1u(l+1,j,k+1)=(d(l)-c(l)*u(l+2,j,k+1))/b(l);endendendfor k=1:n+1for i=1:m2+1for j=1:m1+1p(i,j,k)=exp(0.5*(x(j)+y(i))-t(k)); %p为精确解e(i,j,k)=abs(u(i,j,k)-p(i,j,k)); %e为误差endendend3.function [u u0 p e x y t]=ADI5(h1,h2,m1,m2,n)%ADI解二维抛物线型偏微分方程(P-R交替隐式,未截断)%此程序用的是追赶法解线性方程组%h1为空间步长,h2为时间步长%m1,m2分别为x方向,y方向网格数,n为时间网格数%p为精确解,u为数值解,e为误差%定义u0(i,j,k)=u(i,j,k+1/2),因为矩阵中,i,j,k必须全为整数x=(0:m1)*h1+0;%定义x0,y0,t0是为了f(x,t)~=0的情况%y=(0:m2)*h1+0;t=(0:n)*h2+0; t0=(0:n)*h2+1/2*h2;for k=1:n+1for i=1:m2+1for j=1:m1+1f(i,j,k)=-1.5*exp(0.5*(x(j)+y(i))-t0(k));endendendfor i=1:m2+1for j=1:m1+1u(i,j,1)=exp(0.5*(x(j)+y(i)));endendfor k=1:n+1for i=1:m2+1u(i,[1 m1+1],k)=[exp(0.5*y(i)-t(k)) exp(0.5*(1+y(i))-t(k))]; u1(i,[1 m1+1],k)=[exp(0.5*y(i)-t0(k)) exp(0.5*(1+y(i))-t0(k))] ;endendr=h2/(h1*h1);r1=2*(1-r);r2=r/4;r3=2*(1+r);for k=1:nfor i=2:m2u0(i,[1 m1+1],k)=u1(i,[1 m1+1],k)-r2*(u(i-1,[1 m1+1],k+1)-...2*u(i,[1 m1+1],k+1)+u(i+1,[1 m1+1],k+1)-u(i-1,[1 m1+1],k)+...2*u(i,[1 m1+1],k)-u(i+1,[1 m1+1],k));endendfor k=1:n+1for j=1:m1+1u([1 m2+1],j,k)=[exp(0.5*x(j)-t(k)) exp(0.5*(1+x(j))-t(k))];endendfor k=1:n %外循环,先固定每一时间层,每一时间层上解一线性方程组%for i=2:m2a=-r*ones(1,m1-1);c=a;a(1)=0;c(m1-1)=0;b=r3*ones(1,m1-1);d(1)=r*u0(i,1,k)+r*(u(i-1,2,k)+u(i+1,2,k))+r1*u(i,2,k)+... h2*f(i,2,k);for l=2:m1-2d(l)=r*(u(i-1,l+1,k)+u(i+1,l+1,k))+r1*u(i,l+1,k)+...h2*f(i,l+1,k);%输入部分系数矩阵,为0的矩阵元素不输入%一定要注意输入元素的正确性endd(m1-1)=r*u0(i,m1+1,k)+r*(u(i-1,m1,k)+u(i+1,m1,k))...+r1*u(i,m1,k)+h2*f(i,m1,k);for l=1:m1-2 %开始解线性方程组消元过程a(l+1)=-a(l+1)/b(l);b(l+1)=b(l+1)+a(l+1)*c(l);d(l+1)=d(l+1)+a(l+1)*d(l);endu0(i,m1,k)=d(m1-1)/b(m1-1); %回代过程%for l=m1-2:-1:1u0(i,l+1,k)=(d(l)-c(l)*u0(i,l+2,k))/b(l);endendfor j=2:m1a=-r*ones(1,m2-1);c=a;a(1)=0;c(m2-1)=0;b=r3*ones(1,m2-1);d(1)=r*u(1,j,k+1)+r*(u0(2,j-1,k)+u0(2,j+1,k))+r1*u0(2,j,k)+...h2*f(2,j,k);for l=2:m2-2d(l)=r*(u0(l+1,j-1,k)+u0(l+1,j+1,k))+r1*u0(l+1,j,k)+... h2*f(l+1,j,k);%输入部分系数矩阵,为0的矩阵元素不输入%一定要注意输入元素的正确性endd(m2-1)=r*u(m2+1,j,k+1)+r*(u0(m2,j-1,k)+u0(m2,j+1,k))...+r1*u0(m2,j,k)+h2*f(m2,j,k);for l=1:m2-2 %开始解线性方程组消元过程a(l+1)=-a(l+1)/b(l);b(l+1)=b(l+1)+a(l+1)*c(l);d(l+1)=d(l+1)+a(l+1)*d(l);endu(m2,j,k+1)=d(m2-1)/b(m2-1); %回代过程%for l=m2-2:-1:1u(l+1,j,k+1)=(d(l)-c(l)*u(l+2,j,k+1))/b(l);endendendfor k=1:n+1for i=1:m2+1for j=1:m1+1p(i,j,k)=exp(0.5*(x(j)+y(i))-t(k)); %p为精确解 e(i,j,k)=abs(u(i,j,k)-p(i,j,k)); %e为误差endendend[up e x y t]=ADI2(0.01,0.001,100,100,1000);surf(x,y,e(:,:,1001)) t=1的误差曲面下面是三种方法的误差比较:1.[u u0 p e x y t]=ADI1(0.1,0.1,10,10,10)((P-R交替隐式,截断)截断中间过渡层用u(i,j,k+1/2)代替)(t=1时的误差)2.[u u0 p e x y t]=ADI5(0.1,0.1,10,10,10)(P-R交替隐式,未截断)(未截断过渡层u(i,j,)’=u(i,j,k+1/2)-h2^2/4*dy^2dtu(i,j,k+1/2);)3.[u p e x y t]=ADI2(0.1,0.1,10,10,10)(D'Yakonov交替方向隐格式) surf(x,y,e(:,:,11))(表示t=1时的误差)下面是相关数据:1: [u u0 p e x y t]=ADI1(0.1,0.1,10,10,10)((P-R交替隐式,截断)截断中间过渡层用u(i,j,k+1/2)代替)e(:,:,11) =Columns 1 through 60 0 0 0 0 00 0.00040947 0.00025182 0.00019077 0.00017112 0.000176040 0.00057359 0.00042971 0.00035402 0.00032565 0.000336280 0.00066236 0.00054689 0.00047408 0.00044596 0.000462670 0.00072152 0.00062001 0.00055081 0.00052442 0.000545530 0.00076164 0.0006576 0.00058522 0.00055732 0.000579840 0.00078336 0.00065993 0.00057557 0.00054161 0.000562090 0.00078161 0.00061872 0.00051646 0.00047429 0.000489640 0.00073621 0.0005148 0.00039979 0.00035439 0.000363130 0.00056964 0.00031688 0.00022051 0.0001884 0.000191920 0 0 0 0 02.[u u0 p e x y t]=ADI5(0.1,0.1,10,10,10)(P-R交替隐式,未截断)(未截断过渡层u(i,j,)’=u(i,j,k+1/2)-h2^2/4*dy^2dtu(i,j,k+1/2);)e(:,:,11) =Columns 1 through 60 0 0 0 0 00 0.00027006 0.00016305 0.00012104 0.0001071 0.000109950 0.00037754 0.00027817 0.0002253 0.00020483 0.000211160 0.00043539 0.00035386 0.00030207 0.00028124 0.00029140 0.00047398 0.00040104 0.00035113 0.00033111 0.000344050 0.0005003 0.00042535 0.00037309 0.0003519 0.000365710 0.00051479 0.00042699 0.00036681 0.00034164 0.00035410 0.00051415 0.00040056 0.00032887 0.0002985 0.000307640 0.00048504 0.0003335 0.00025411 0.0002221 0.000227060 0.00037609 0.00020532 0.00013956 0.00011718 0.000119020 0 0 0 0 03.[u p e x y t]=ADI2(0.1,0.1,10,10,10)(D'Yakonov交替方向隐格式)e(:,:,11) =Columns 1 through 60 0 0 0 0 00 8.6469e-006 1.4412e-005 1.8364e-005 2.091e-005 2.2174e-0050 1.4412e-005 2.4777e-005 3.2047e-005 3.6716e-005 3.8961e-0050 1.8364e-005 3.2047e-005 4.1789e-005 4.8054e-005 5.1008e-0050 2.091e-005 3.6716e-005 4.8054e-005 5.5353e-005 5.8764e-0050 2.2174e-005 3.8961e-005 5.1008e-005 5.8764e-005 6.2389e-0050 2.2118e-005 3.8698e-005 5.0523e-005 5.8126e-005 6.171e-0050 2.055e-005 3.5581e-005 4.6157e-005 5.2942e-005 5.6197e-0050 1.707e-005 2.8951e-005 3.7128e-005 4.2365e-005 4.4952e-0050 1.0851e-005 1.7698e-005 2.2265e-005 2.5203e-005 2.672e-0050 0 0 0 0 01.[u u0 p e x y t]=ADI1(0.1,0.1,10,10,10)((P-R交替隐式,截断)截断中间过渡层用u(i,j,k+1/2)代替)Columns 7 through 110 0 0 0 00.00020348 0.00026228 0.00038338 0.00066008 00.00038607 0.00048321 0.00064717 0.00091668 00.00052635 0.00064203 0.00081637 0.0010517 00.0006174 0.00074272 0.00092111 0.0011417 00.00065651 0.00078964 0.00097724 0.0012051 00.00064051 0.00078116 0.00098594 0.0012433 00.00056474 0.00070822 0.00093332 0.0012478 00.00042547 0.00055526 0.00078616 0.0011844 00.00022735 0.00030946 0.00049004 0.00092402 00 0 0 0 02.[u u0 p e x y t]=ADI5(0.1,0.1,10,10,10)(P-R交替隐式,未截断)(未截断过渡层u(i,j,)’=u(i,j,k+1/2)-h2^2/4*dy^2dtu(i,j,k+1/2);)Columns 7 through 110 0 0 0 00.00012826 0.00016798 0.00024986 0.00043637 00.00024444 0.00031023 0.00042173 0.00060513 00.00033401 0.00041257 0.00053179 0.00069358 00.00039216 0.00047742 0.00059986 0.00075263 00.00041704 0.00050761 0.00063642 0.00079439 00.00040657 0.0005021 0.00064226 0.00081984 00.00035784 0.000455 0.00060828 0.00082334 00.00026866 0.00035628 0.00051263 0.0007824 00.00014262 0.00019789 0.00031956 0.0006113 00 0 0 0 0 3.[u p e x y t]=ADI2(0.1,0.1,10,10,10)(D'Yakonov交替方向隐格式) Columns 7 through 110 0 0 0 02.2118e-005 2.055e-005 1.707e-005 1.0851e-005 03.8698e-005 3.5581e-005 2.8951e-005 1.7698e-005 05.0523e-005 4.6157e-005 3.7128e-005 2.2265e-005 05.8126e-005 5.2942e-005 4.2365e-005 2.5203e-005 06.171e-005 5.6197e-005 4.4952e-005 2.672e-005 06.1116e-005 5.5803e-005 4.4817e-005 2.6785e-005 05.5803e-005 5.1239e-005 4.1529e-005 2.5153e-005 04.4817e-005 4.1529e-005 3.42e-005 2.126e-005 02.6785e-005 2.5153e-005 2.126e-005 1.3869e-005 00 0 0 0 0。

二维抛物方程的有限差分法

二维抛物方程的有限差分法

二维抛物方程的有限差分法摘要二维抛物方程是一类有广泛应用的偏微分方程,由于大部分抛物方程都难以求得解析解,故考虑采用数值方法求解。

有限差分法是最简单又极为重要的解微分方程的数值方法。

本文介绍了二维抛物方程的有限差分法。

首先,简单介绍了抛物方程的应用背景,解抛物方程的常见数值方法,有限差分法的产生背景和发展应用。

讨论了抛物方程的有限差分法建立的基础,并介绍了有限差分方法的收敛性和稳定性。

其次,介绍了几种常用的差分格式,有古典显式格式、古典隐式格式、Crank-Nicolson隐式格式、Douglas差分格式、加权六点隐式格式、交替方向隐式格式等,重点介绍了古典显式格式和交替方向隐式格式。

进行了格式的推导,分析了格式的收敛性、稳定性。

并以热传导方程为数值算例,运用差分方法求解。

通过数值算例,得出古典显式格式计算起来较简单,但稳定性条件较苛刻;而交替方向隐式格式无条件稳定。

关键词:二维抛物方程;有限差分法;古典显式格式;交替方向隐式格式FINITE DIFFERENCE METHOD FORTWO-DIMENSIONAL PARABOLICEQUATIONAbstractTwo-dimensional parabolic equation is a widely used class of partial differential equations. Because this kind of equation is so complex, we consider numerical methods instead of obtaining analytical solutions. finite difference method is the most simple and extremely important numerical methods for differential equations. The paper introduces the finite difference method for two-dimensional parabolic equation.Firstly, this paper introduces the background and common numerical methods for Parabolic Equation, Background and development of applications. Discusses the basement for the establishment of the finite difference method for parabolic equation And describes the convergence and stability for finite difference method.Secondly, Introduces some of the more common simple differential format,for example, the classical explicit scheme, the classical implicit scheme, Crank-Nicolson implicit scheme, Douglas difference scheme, weighted six implicit scheme and the alternating direction implicit format. The paper focuses on the classical explicit scheme and the alternating direction implicit format. The paper takes discusses the derivation convergence,and stability of the format . The paper takes And the heat conduction equation for the numerical example, using the differential method to solve. Through numerical examples, the classical explicit scheme is relatively simple for calculation, with more stringent stability conditions; and alternating direction implicit scheme is unconditionally stable.Keywords:Two-dimensional Parabolic Equation; Finite-Difference Method; Eclassical Explicit Scheme; Alternating Direction Implicit Scheme目录摘要 (I)Abstract (II)1绪论 (1)1.1课题背景 (1)1.2发展概况 (1)1.2.1抛物型方程的常见数值解法 (1)1.2.2有限差分方法的发展 (2)1.3差分格式建立的基础 (3)1.3.1区域剖分 (3)1.3.2差商代替微商 (3)1.3.3差商代替微商格式的误差分析 (4)1.4本文主要研究容 (5)2显式差分格式 (7)2.1常系数热传导方程的古典显式格式 (7)2.1.1古典显式格式格式的推导 (7)2.1.3古典显式格式的算法步骤 (8)3隐式差分格式 (10)3.1古典隐式格式 (10)3.2 Crank-Nicolson隐式格式 (12)3.3 Douglas差分格式 (13)3.4加权六点隐式格式 (14)3.5交替方向隐式格式 (15)3.5.1 Peaceman-Rachford格式 (15)3.5.2 Rachford-Mitchell格式 (15)3.5.3 Mitchell-Fairweather格式 (15)3.5.4交替方向隐式格式的算法步骤 (16)4实例分析与结果分析 (17)4.1算例 (17)4.1.1已知有精确解的热传导问题 (17)4.1.2未知精确解的热传导问题 (19)4.2结果分析 (20)5稳定性探究与分析 (21)5.1稳定性问题的提出 (21)5.2 几种分析稳定性的方法 (21)5.3 r变化对稳定性的探究 (23)5.3.1 古典显式格式的稳定性 (23)5.3.2 P-R格式格式的稳定性 (24)结语 (26)参考文献 (27)附录P-R格式的C++实现代码 (28)致谢 (30)1绪论1.1课题背景抛物方程是一类特殊的偏微分方程,二维抛物方程的一般形式为u Lu t∂=∂ (1-1) 其中1212((,,))((,,))(,,)(,,)(,,)u u u u u u L a x y t a x y t b x y t b x y t C x y t x x y y x y∂∂∂∂∂∂=++++∂∂∂∂∂∂ 120,0,0a a C >>≥。

python有限元差分求解二维偏微分方程

python有限元差分求解二维偏微分方程

python有限元差分求解二维偏微分方程摘要:1.引言2.有限元方法简介3.差分方法简介4.二维偏微分方程的求解方法5.Python 有限元差分求解二维偏微分方程的实现6.总结正文:【引言】本文旨在介绍如何使用Python 有限元差分法求解二维偏微分方程。

有限元方法和差分方法是数值计算领域中常用的方法,它们可以用来解决偏微分方程问题。

在本文中,我们将使用Python 编程语言来实现这些方法,以解决二维偏微分方程。

【有限元方法简介】有限元方法是一种数值计算方法,它将连续的求解区域离散化为有限个单元,通过在每个单元内求解局部问题,最后将各单元的解合并得到原问题的解。

有限元方法广泛应用于固体力学、流体力学、热传导等领域。

【差分方法简介】差分方法是一种数值计算方法,它通过将连续的函数值用离散的点表示,然后通过差分公式将函数在某点的导数表示为有限差分形式。

差分方法主要包括前向差分、后向差分和中心差分等。

差分方法在数值计算中具有重要地位,例如在求解常微分方程的初值问题、边值问题以及偏微分方程等方面都有广泛应用。

【二维偏微分方程的求解方法】二维偏微分方程的求解方法主要包括有限元方法和差分方法。

有限元方法将求解区域离散化为有限个单元,通过在每个单元内求解局部问题,最后将各单元的解合并得到原问题的解。

而差分方法通过将连续的函数值用离散的点表示,然后通过差分公式将函数在某点的导数表示为有限差分形式。

这两种方法在求解二维偏微分方程时,可以相互结合,提高求解精度。

【Python 有限元差分求解二维偏微分方程的实现】Python 作为一门功能强大的编程语言,提供了丰富的数值计算库,如NumPy 和SciPy。

利用这些库,我们可以方便地实现有限元差分法求解二维偏微分方程。

下面是一个简单的示例,使用Python 求解二维Laplace 方程:```pythonimport numpy as npfrom scipy.spatial import griddatadef Laplace(x, y):return np.sin(x) + np.cos(y)def Laplace_dirichlet(x, y, x0, y0):return np.sin(x) + np.cos(y) - np.sin(x0) - np.cos(y0) # 网格划分x = np.linspace(0, 2 * np.pi, 100)y = np.linspace(0, 2 * np.pi, 100)X, Y = np.meshgrid(x, y)# 边界条件x0, y0 = 0, np.pi / 2# 求解Z = griddata(X, Y, Laplace(X, Y), (x, y), method="cubic")Z_dirichlet = griddata(X, Y, Laplace_dirichlet(X, Y, x0, y0), (x, y), method="cubic")# 绘制结果import matplotlib.pyplot as pltplt.figure()plt.contourf(x, y, Z)plt.colorbar()plt.title("二维Laplace 方程的数值解")plt.show()plt.figure()plt.contourf(x, y, Z_dirichlet)plt.colorbar()plt.title("二维Laplace 方程的有限元差分解")plt.show()```【总结】本文介绍了Python 有限元差分求解二维偏微分方程的方法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

%%%%% 真解u=sin(pi*x)*sin(pi*y)*sin(t)
%%%%% 方程diff(u,t)-div(a(x,y)*grad(u))=f
%%%%% a(x,y)=x^2+y^2+1
%%%%%
f=sin(pi*x)*sin(pi*y)*cos(t)-2*pi^2*sin(pi*x)*sin(pi*y)*sin(t)*(x^2+y^2+1)+2*pi*sin(t)*(x*cos( pi*x)*sin(pi*y)+y*sin(pi*x)*cos(pi*y))
%clear all
% clc
%%%%finite element code for parabolic equation with constant coefficient
%%%mesh%%
node=[0,0;1,0;1,1;0,1];
elem=[2,3,1;4,1,3];
T=1;
bdEdge=setboundary(node,elem,’Dirichlet’);
n=input(‘Please input initial mesh:’);
M=input(‘M=’);
for i=1:n
[node,elem,bdEdge]=uniformrefine(node,elem,bdEdge);
end
N=size(node,1);
NT=size(elem,1);
S=1/NT;
r=1/M;
A=zeros(N,N);;
u=zeros(N,M+1);
u1=zeros(N,1);
f=inline(‘sin(pi*xx(1,1))*sin(pi*xx(1,2))*cos(t)-2*pi^2*sin(pi*xx(1,1))*sin(pi*xx(1,2))*sin(t)*(x x(1,1)^2+xx(1,2)^2+1)+2*pi*sin(t)*(xx(1,1)*cos(pi*xx(1,1))*sin(pi*xx(1,2))+y*sin(pi*xx(1,1))* cos(pi*xx(1,2));
a=inline(‘xx(1,1)^2+xx(1,2)^2+1’,’xx’);
[lambda,weight]=quadpts(5);
p=node’;
T=elem’;
totalEdge=[elem(:,[2,3]);elem(:,[3,1]);elem(:,[1,2])];
isBdEdge=reshape(bdEdge,3*NT,1);
Dirichlet=totalEdge(isBdEdge==1),:);
isBdNode=false(N,1);
isBdNode(Dirichlet)=true;
bdNode=find(isBdNode);
freeNode=find(~isBdNode);
for j=2:M+1
for i=1:NT
F=zeros(N,1);
F_ele=zeros(1,3);
T_ele=elem(i,:);
for m=1:7
xx(m,1)=(p(1,t(1,i))-p(1,t(3,i)))*lambda(m,1)+(p(1,t(2,i))-p(1,t(3,i))*lambda(m,2)+p(1,t(3,i));
xx(m,1)=(p(2,t(1,i))-p(2,t(3,i)))*lambda(m,1)+(p(2,t(2,i))-p(2,t(3,i))*lambda(m,2)+p(2,t(3,i));
end
for i=1:3
for k=1:7
F_ele(i)=F_ele(i)+S*weight(k)*lambda(k,i)*f(xx(k,:),(j-1)*r);
end
end
z=0;
for k=1:7
z=z+S*weight(k)*lambda(k)*a(xx(k,:));
end
x=node(T_ele,:);
[a,b]=Basis_coeff(x);
A_ele=[a,b]’*[a,b]/(4*s);
B_ele=zeros(3,3);
for i=1:3
for j=1:3
if i==j
B_ele(i,j)=1/12;
else
B_ele(i,j)=1/24;
end
end
end
A(T_ele,T_ele)=A(T_ele,T_ele)+S*B_ele+r*z*A_ele;
F(T_ele,1)=F(T_ele,1)+r*F_ele’+S*B_ele;
end
uj=zeros(N,1);
uj(freeNode)=A(freeNode,freeNode)\H(freeNode);
u(:,j)=uj;
end
showresult(node,elem,uj)
u_exact=zeros(N,M+1);
for j=1:M+1
u_exact(:,j)=inline(‘sin(pi*pxy(:,1)).*sin(pi*pxy(:,2)).*sin((j-1)*r)’,’pxy’);
end
L2_err=getL2error(node,elem,u_exact(:,j),u(:,j),5);
L’2_err=getL2error(node,elem,u_exact,u,5);
Du(:,j)=inline(‘[pi*cos(pi*pxy(:,1)).*sin(pi*pxy(:,2)).*sin((j-1)*r),pi*sin(pi*pxy(:,1)).*cos(pi*px y(:,2)).*sin((j-1)*r)]’,’pxy’);
H1_err=getH1error((node,elem,Dut(:,j),u(:,j),5);。

相关文档
最新文档