用五点有限差分格式求解椭圆型方程(偏微分方程) 程序2
有限差分法求解偏微分方程

有限差分法求解偏微分方程摘要:本文主要使用有限差分法求解计算力学中的系统数学模型,推导了有限差分法的理论基础,并在此基础上给出了部分有限差分法求解偏微分方程的算例验证了推导的正确性及操作可行性。
关键词:计算力学,偏微分方程,有限差分法Abstract:This dissertation mainly focuses on solving the mathematic model of computation mechanics with finite-difference method. The theoretical basis of finite-difference is derived in the second part of the dissertation, and then I use MATLAB to program the algorithms to solve some partial differential equations to confirm the correctness of the derivation and the feasibility of the method.Key words:Computation Mechanics, Partial Differential Equations, Finite-Difference Method1 引言机械系统设计常常需要从力学观点进行结构设计以及结构分析,而这些分析的前提就是建立工程问题的数学模型。
通过对机械系统应用自然的基本定律和原理得到带有相关边界条件和初始条件的微分积分方程,这些微分积分方程构成了系统的数学模型。
求解这些数学模型的方法大致分为解析法和数值法两种,而解析法的局限性众所周知,当系统的边界条件和受载情况复杂一点,往往求不出问题的解析解或近似解。
另一方面,计算机技术的发展使得计算更精确、更迅速。
五点差分格式求解poisson方程

五点差分格式求解poisson方程在数学和科学领域中,Poisson方程是一种常见的偏微分方程,通常用于描述在某个区域内的物理现象。
求解Poisson方程在科学计算和数值模拟中具有重要的应用。
本文将介绍一种常用的数值求解方法——五点差分格式,用于求解Poisson方程。
1. 引言Poisson方程是二阶偏微分方程,形式如下:∇²u = f(x, y)其中,u是未知函数,f(x, y)是已知函数,∇²是拉普拉斯算子。
求解Poisson方程的目标是找到满足方程的函数u。
2. 五点差分格式五点差分格式是一种常用的离散化方法,用于将连续的Poisson方程转化为离散的数值方程。
在二维情况下,我们可以将区域划分为若干个格点,然后利用差分近似来求解。
假设我们在二维区域(0, 1) x (0, 1)内选择了一组均匀的格点(xi, yj),其中i和j分别表示x和y方向上的索引。
则方程中的拉普拉斯算子可以被近似为:(∂²u/∂x²) ≈ (u(i+1,j) - 2u(i,j) + u(i-1,j))/Δx²(∂²u/∂y²) ≈ (u(i,j+1) - 2u(i,j) + u(i,j-1))/Δy²其中Δx和Δy是格点的空间间隔。
将上述近似代入Poisson方程,我们可以得到离散的数值方程:(u(i+1,j) - 2u(i,j) + u(i-1,j))/Δx² + (u(i,j+1) - 2u(i,j) + u(i,j-1))/Δy² = f(i,j)3. 离散方程求解根据五点差分格式,我们可以得到离散的数值方程,进而求解Poisson方程。
为了方便计算,我们可以定义一个N x N的矩阵A,其中N表示在x和y方向上的格点数目。
矩阵A中的每个元素对应于方程中的一个未知数。
我们可以将方程表示为矩阵形式:Au = b其中,u是未知函数的向量,b是已知函数f的向量。
有限差分法解偏微分方程

有限差分法解偏微分方程综述绪论有限元方法最早应用于结构力学,后来随着计算机的发展慢慢用于流体力学的数值模拟。
在有限元方法中,把计算域离散剖分为有限个互不重叠且相互连接的单元,在每个单元内选择基函数,用单元基函数的线形组合来逼近单元中的真解,整个计算域上总体的基函数可以看为由每个单元基函数组成的,则整个计算域内的解可以看作是由所有单元上的近似解构成。
有限差分方法(FDM)是计算机数值模拟最早采用的方法,至今仍被广泛运用。
该方法将求解域划分为差分网格,用有限个网格节点代替连续的求解域。
有限差分法以Taylor 级数展开等方法,把控制方程中的导数用网格节点上的函数值的差商代替进行离散,从而建立以网格节点上的值为未知数的代数方程组。
该方法是一种直接将微分问题变为代数问题的近似数值解法,数学概念直观,表达简单,是发展较早且比较成熟的数值方法。
对于有限差分格式,从格式的精度来划分,有一阶格式、二阶格式和高阶格式。
从差分的空间形式来考虑,可分为中心格式和逆风格式。
考虑时间因子的影响,差分格式还可以分为显格式、隐格式、显隐交替格式等。
目前常见的差分格式,主要是上述几种形式的组合,不同的组合构成不同的差分格式。
差分方法主要适用于有结构网格,网格的步长一般根据实际地形的情况和柯朗稳定条件来决定。
构造差分的方法有多种形式,目前主要采用的是泰勒级数展开方法。
其基本的差分表达式主要有三种形式:一阶向前差分、一阶向后差分、一阶中心差分和二阶中心差分等,其中前两种格式为一阶计算精度,后两种格式为二阶计算精度。
通过对时间和空间这几种不同差分格式的组合,可以组合成不同的差分计算格式。
有限元方法的基础是变分原理和加权余量法,其基本求解思想是把计算域划分为有限个互不重叠的单元,在每个单元内,选择一些合适的节点作为求解函数的插值点,将微分方程中的变量改写成由各变量或其导数的节点值与所选用的插值函数组成的线性表达式,借助于变分原理或加权余量法,将微分方程离散求解。
五点差分格式

《微分方程数值解》大作业(一)——椭圆型方程编程计算:采用五点差分格式求如下椭圆型方程2222uu x y f (x,y),(x,y);∂∂∂∂--=∈Ω其中f (x,y)、Ω及边条件为:1. f (x,y)0,= (1,2)(0,1)Ω=⨯, 且边条件如下:222u(x,0)2ln x,u(x,1)ln(x 1)1x 2;u(1,y)ln(1y ),u(2,y)ln(4y ),0y 1.⎧==+<<⎪⎨=+=+<<⎪⎩, 问题存在精确解为: 22(,)ln()u x y x y =+2.f (x,y)4,=- (0,1)(0,2)Ω=⨯,且边条件如下:2222u(x,0)x ,u(x,2)(x 2)0x 1;u(0,y)y ,u(1,y)(y 1),0y 2.⎧==-<<⎪⎨==-<<⎪⎩, 问题存在精确解为: 2(,)()u x y x y =-3.f (x,y)cos(x y)cos(x y),=++- (0,)(0,)2πΩ=π⨯,且边条件如下:u(x,0)cos x,u(x,)00x ;2u(0,y)cos y,u(,y)cos y,0y .2π⎧==<<π⎪⎪⎨π⎪=π=-<<⎪⎩, 问题存在精确解为: (,)cos cos u x y x y =.代码:主函数1,差分解function g=fivepoints(x1,x2,y1,y2,M,N)%变步长法h=(x2-x1)/M; %横轴步长k=(y2-y21/N; %纵轴步长m=M-1;n=N-1;h1=h^2;r=h1/k^2; %五点中的上下两个点的系数t=2+2*r; %五点中的中心点的系数x=x1+(x2-x1)*(0:M)/M; %x,y向量表示横纵坐标y=y1+(y2-y1)*(0:N)/N;a=zeros(m*n,m*n);b=zeros(m*n,1);%初始化a,b矩阵,a为系数矩阵%内部的(m-2)*(n-2)个点for i=2:m-1for j=2:n-1a(i+(j-1)*m,:)=[zeros(1,i-1+(j-2)*m) -r zeros(1,m-2) -1 t -1 zeros(1,m-2) -r zeros(1,(n-j)*m-i)];b(i+(j-1)*m)=h1*f(x(i+1),y(j+1));endend%下边缘j=1;for i=2:m-1a(i+(j-1)*m,:)=[zeros(1,i-2) -1 t -1 zeros(1,m-2) -r zeros(1,(n-j)*m-i)];b(i+(j-1)*m)=h1*f(x(i+1),y(j+1))+r*bottom(x(i+1));end;%右边缘i=m;for j=2:n-1a(i+(j-1)*m,:)=[zeros(1,(j-1)*m-1) -r zeros(1,m-2) -1 t zeros(1,m-1) -r zeros(1,(n-j)*m-i)];b(i+(j-1)*m)=h1*f(x(i+1),y(j+1))+right(y(j+1));end%上边缘j=n;for i=2:m-1a(i+(j-1)*m,:)=[zeros(1,i-1+(j-2)*m) -r zeros(1,m-2) -1 t -1 zeros(1,m-i-1)];b(i+(j-1)*m)=h1*f(x(i+1),y(j+1))+r*top(x(i+1));end%左边缘i=1;for j=2:n-1a(i+(j-1)*m,:)=[zeros(1,i-1+(j-2)*m) -r zeros(1,m-1) t -1 zeros(1,m-2) -rzeros(1,(n-j)*m-i)];b(i+(j-1)*m)=h1*f(x(i+1),y(j+1))+left(y(j+1));end;%左下角的那个点i=1;j=1;a(1,:)=[t -1 zeros(1,m-2) -r zeros(1,(n-1)*m-1)];b(1)=h1*f(x(2),y(2))+r*bottom(x(2))+left(y(2));%右下角的那个点i=m;j=1;a(i+(j-1)*m,:)=[zeros(1,m-2) -1 t zeros(1,m-1) -r zeros(1,(n-2)*m)]; b(i+(j-1)*m)=h1*f(x(i+1),y(j+1))+r*bottom(x(i+1))+right(y(j+1)); %左上角的那个点i=1;j=n;a(i+(j-1)*m,:)=[zeros(1,(n-2)*m) -r zeros(1,m-1) t -1 zeros(1,m-2)]; b(i+(j-1)*m)=h1*f(x(i+1),y(j+1))+r*top(x(i+1))+left(y(j+1));%右上角的那个点i=m;j=n;a(i+(j-1)*m,:)=[zeros(1,(n-1)*m-1) -r zeros(1,m-2) -1 t];b(i+(j-1)*m)=h1*f(x(i+1),y(j+1))+r*top(x(i+1))+right(y(j+1));u=a\bab2,精确解:function g=ni(x1,x2,y1,y2,M,N)m=M-1;n=N-1;x=x1+(x2-x1)*(0:M)/M;y=y1+(y2-y1)*(0:N)/N;for i=1:mfor j=1:nu1(i+(j-1)*m)=f1(x(i+1),y(j+1))endend(1)辅助函数function g=f(x,y)g=0;function g=bottom(x)g=2*log(x);function g=right(y)g=log(4+y^2);function g=top(x)g=log(x^2+1);function g=left(y)g=log(1+y^2);function g=f1(x,y)g=log(x^2+y^2);运行fivepoints(1,2,0,1,4,4)u =数值解0.4847467147016780.8376456266975491.1390195099193150.5944295076643080.9158860659528741.1974022894530100.7539416986884711.0340668399966291.287784599003526a =4 -1 0 -1 0 0 0 0 0 -1 4 -1 0 -1 0 0 0 0 0 -1 4 0 0 -1 0 0 0 -1 0 0 4 -1 0 -1 0 0 0 -1 0 -1 4 -1 0 -1 0 0 0 -1 0 -1 4 0 0 -1 0 0 0 -1 0 0 4 -1 0 0 0 0 0 -1 0 -1 4 -1 0 0 0 0 0 -1 0 -1 4b =0.5069117244448540.8109302162163292.5210301235267010.2231435513142101.4469189829363251.3872704470929461.1786549963416462.919669266564466运行ni(1,2,0,1,4,4)u1 =精确解Columns 1 through 30.485507815781701 0.838329190404443 1.139434283188365 Columns 4 through 60.594707107746693 0.916290731874155 1.197703191312341 Columns 7 through 90.753771802376380 1.034073767530539 1.287854288306638 误差很小(2)辅助函数function g=f(x,y)g=-4;function g=bottom(x)g=x^2;function g=right(y)g=(y-1)^2;function g=top(x)g=(x-2)^2;function g=left(y)g=y^2;function g=f1(x,y)g=(x-y)^2;fivepoints(1,2,0,1,4,4)fivepoints(0,1,0,2,4,4)u =0.062500000000000-0.0000000000000000.0625000000000000.5625000000000000.2500000000000000.0625000000000001.5625000000000001.0000000000000000.562500000000000a =Columns 1 through 32.500000000000000 -1.000000000000000 0 -1.000000000000000 2.500000000000000-1.0000000000000000 -1.000000000000000 2.500000000000000 -0.250000000000000 0 00 -0.250000000000000 00 0 -0.2500000000000000 0 00 0 00 0 0Columns 4 through 6-0.250000000000000 0 00 -0.250000000000000 00 0 -0.2500000000000002.500000000000000 -1.000000000000000 0 -1.000000000000000 2.500000000000000-1.0000000000000000 -1.000000000000000 2.500000000000000 -0.250000000000000 0 00 -0.250000000000000 00 0 -0.250000000000000Columns 7 through 90 0 00 0 00 0 0-0.250000000000000 0 00 -0.250000000000000 00 0 -0.2500000000000002.500000000000000 -1.000000000000000 0 -1.000000000000000 2.500000000000000-1.0000000000000000 -1.000000000000000 2.500000000000000b =0.015625000000000-0.1875000000000000.1406250000000000.750000000000000-0.250000000000000-0.2500000000000002.7656250000000000.3125000000000000.390625000000000精确解ni(0,1,0,2,4,4)u1 =u1 =Columns 1 through 30.062500000000000 0 0.062500000000000 Columns 4 through 60.562500000000000 0.2500000000000000.062500000000000Columns 7 through 91.562500000000000 1.0000000000000000.562500000000000误差很小(3)辅助函数function g=f(x,y)g=cosd(x+y)+cosd(x-y);function g=bottom(x)g=cosd(x);function g=right(y)g=-cosd(y);function g=top(x)g=0;function g=left(y)g=cosd(y);function g=f1(x,y)g=cosd(x)*cosd(y);数值解Pi=3.1415926fivepoints(0,pi,0,pi/2,4,4)u =0.6578183624886530.000000024999241-0.6578183271343870.5049807980892560.000000019229497-0.5049807708946410.2736443626241530.000000010432161-0.273644347870850a =10 -1 0 -4 0 0 0 0 0 -1 10 -1 0 -4 0 0 0 0 0 -1 10 0 0 -4 0 0 0 -4 0 0 10 -1 0 -4 0 0 0 -4 0 -1 10 -1 0 -4 0 0 0 -4 0 -1 10 0 0 -4 0 0 0 -4 0 0 10 -1 0 0 0 0 0 -4 0 -1 10 -1 0 0 0 0 0 -4 0 -1 10b =4.5582604075302670.000000137720159-4.5582602127645491.323957*********0.000000023374742-1.3239570281549570.7165204234523470.000000012650320-0.716520405562093精确解ni(0,pi,0,pi/2,4,4)u1 =Columns 1 through 30.653281493003155 0.000000024755257-0.653281457993935Columns 4 through 60.500000013397448 0.000000018946853-0.499999986602551Columns 7 through 90.270598066826879 0.000000010253963-0.270598052325585误差很小注:(1)需要对数值解与精确解作比较,以及不同步长选取下的误差比较。
椭圆形方程的差分法

【实验结论】(结果)
y =
0
0.2000
0.4000
0.6000
0.8000
1.0000
1.2000
1.4000
1.6000
1.8000
2.0000
2.2000
2.4000
2.6000
2.8000
3.0000
3.2000
3.4000
3.6000
3.8000
4.0000
x0=D(1);
xf=D;
dx=(xf-x0)/M;
x=x0+[0:M]*dx;
dy=(yf-y0)/N;
y=y0+[0:N]'*dy;
%边界条件
for m=1:N+1
u(m,[1,M+1])=[feval(bx0,y(m)),feval(bxf,y(m))];
end
for n=1:M+1
u([1,N+1],n)=[feval(by0,x(n)),feval(byf,x(n))];
end
%边界的平均值作为初始值
bvaver=sum([sum(u(2:N,[1,M+1])),sum(u([1,N+1],2:M))]);
u(2:N,2:M)=bvaver/(2*(M+N-2));
for j=2:M
for i=2:N
u(i,j)=ry*(u(i,j+1)+u(i,j-1))+rx*(u(i+1,j)+u(i-1,j))+rxy*(G(i,j)*u(i,j)-F(i,j));
end
椭圆型微分方程

数学与计算科学学院实验报告
实验项目名称椭圆型方程数值解
所属课程名称微分方程数值解法
实验类型验证
实验日期
班级信计0902
学号
姓名
成绩
附录1:源程序
附录2:实验报告填写说明
1.实验项目名称:要求与实验教学大纲一致。
2.实验目的:目的要明确,要抓住重点,符合实验教学大纲要求。
3.实验原理:简要说明本实验项目所涉及的理论知识。
4.实验环境:实验用的软、硬件环境。
5.实验方案(思路、步骤和方法等):这是实验报告极其重要的内容。
概括整个实验过程。
对于验证性实验,要写明依据何种原理、操作方法进行实验,要写明需要经过哪几个步骤来实现其操作。
对于设计性和综合性实验,在上述内容基础上还应该画出流程图、设
计思路和设计方法,再配以相应的文字说明。
对于创新性实验,还应注明其创新点、特色。
6.实验过程(实验中涉及的记录、数据、分析):写明具体实验方案的具体实施步骤,包括实验过程中的记录、数据和相应的分析。
7.实验结论(结果):根据实验过程中得到的结果,做出结论。
8.实验小结:本次实验心得体会、思考和建议。
9.指导教师评语及成绩:指导教师依据学生的实际报告内容,给出本次实验报告的评价。
五点差分法(matlab)解椭圆型偏微分方程

用差分法解椭圆型偏微分方程-(Uxx+Uyy)=(pi*pi-1)e^xsi n(pi*y) 0<x<2; 0<y<1U(0,y)=sin(pi*y),U(2,y)=e^ 2sin(pi*y); 0=<y<=1 U(x,0)=0, U(x,1)=0; 0=<x<=2先自己去看一下关于五点差分法的理论书籍Matlab程序:unction[p e u x y k]=wudianchafenfa(h,m, n,kmax,ep)% g-s迭代法解五点差分法问题%kmax为最大迭代次数%m,n为x,y方向的网格数,例如(2-0)/0.01=200;%e为误差,p为精确解syms temp;u=zeros(n+1,m+1);x=0+(0:m)*h;y=0+(0:n)*h;for(i=1:n+1)u(i,1)=sin(pi*y(i));u(i,m+1)=exp(1)*exp(1) *sin(pi*y(i));endfor(i=1:n)for(j=1:m)f(i,j)=(pi*pi-1)*exp(x (j))*sin(pi*y(i));endendt=zeros(n-1,m-1);for(k=1:kmax)for(i=2:n)for(j=2:m)temp=h*h*f(i,j)/4+(u(i ,j+1)+u(i,j-1)+u(i+1,j )+u(i-1,j))/4;t(i,j)=(temp-u(i,j))*( temp-u(i,j));u(i,j)=temp;endendt(i,j)=sqrt(t(i,j));if(k>kmax)break;endif(max(max(t))<ep)break;endendfor(i=1:n+1)for(j=1:m+1)p(i,j)=exp(x(j))*sin(p i*y(i));e(i,j)=abs(u(i,j)-exp( x(j))*sin(pi*y(i)));endEnd在命令窗口中输入:[p e u x y k]=wudianchafenfa(0.1,20, 10,10000,1e-6) k=147 surf(x,y,u) ;xlabel(‘x’);ylabel(‘y’); zlabel(‘u’);Title(‘五点差分法解椭圆型偏微分方程例1’)就可以得到下图surf(x,y,p)surf(x,y,e)[p e u x y k]=wudianchafenfa(0.05,4 0,20,10000,1e-6)[p e u x y k]=wudianchafenfa(0.025,80,40,10000,1e-6)为什么分得越小,误差会变大呢?我们试试运行:[p e u x y k]=wudianchafenfa(0.025, 80,40,10000,1e-8)K=2164surf(x,y,e)误差变小了吧还可以试试[p e u x y k]=wudianchafenfa(0.025, 80,40,10000,1e-10)K=3355误差又大了一点再试试[p e u x y k]=wudianchafenfa(0.025, 80,40,10000,1e-11)k=3952误差趋于稳定总结:最终的误差曲面与网格数有关,也与设定的迭代前后两次差值(ep,看程序)有关;固定网格数,随着设定的迭代前后两次差值变小,误差由大比变小,中间有一个最小值,随着又增大一点,最后趋于稳定。
五点差分格式

计算科学系 杨韧
椭圆型方程的五点差分格式
第三章 椭圆型方程的差分格式
一般方程
a(x,
y)
2u x 2
c(x,
y)
2u y 2
d (x,
y)
u x
e(x, y) u f (x, y)u g(x, y) y
Laplace方程
2u x2
2u y 2
u g(x, y) (x, y), h 1 2
n
U7
U8
U9 顶点
解 网格节点如图所示
U4
U5 内点
U6 边界点
U1
U2
U3
椭圆型方程的五点差分格式
矩阵方程为
4 2 0 2 0 0 0 0 0 U1
1 4 1 0 2 0
0
0
0
U
§3.3 混合(Robins)边值条件
2u
x
2
2u y 2
0
(x, y)u (x,
y)
u n
(x,
y)
(x, y) (x, y)
其中(x, y),(x, y) 0。
椭圆型方程的五点差分格式
例1 用五点差分格式求解 Laplace方程
2u y 2
0
(x, y) (x, y) | 0 x 1,0 y 1
u
g(x, y) (x, y)
n
u 表示函数 u 沿着边界的外法线方向导数, n
在正方形的四个顶点上法向量没有定义,取平均值代替。
椭圆型方程的五点差分格式