对流扩散方程

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

徐州工程学院

课程设计报告

课程名称偏微分方程数值解

课题名称对流扩散方程

的迎风格式的推导和求解专业信息与计算科学

班级10信计3

姓名学号

指导教师杨扬

2013年 5 月23 日

一、实验目的:

进一步巩固理论学习的结果,学习双曲型对流扩散方程的迎风格式的构造

方法,以及稳定的条件。从而进一步了解差分求解偏微分方程的一些基本概念,掌握数值求解偏微分方程的基本过程。在此基础上考虑如何使用Matlab 的软件进行上机实现,并针对具体的题目给出相应的数值计算结果。

二、实验题目:

⎪⎩

⎨⎧-=-==<<<<+=+);2/1exp(),1();exp(),0();2/exp()0,(10,10,11t t u t t u x x u t x f u b u a u xx x t 其中a1=1,b1=2,

)2/exp(),(t x t x f --=。

用迎风格式求解双曲型对流扩散方程,观差分解对真解的敛散性()2/exp(t x u -=

三、实验原理:

1、用迎风格式求解双曲型对流扩散方程,迎风格式为:

)

01(21

1

)01(2112

1

1112

1

11

1<++-=-+->++-=-+--+++-+-+a f h

u u u b h

u u a u u a f h

u u u b h

u u a u u n

j n

j n j n j n

j

n j n

j

n j n j n

j n j n j n

j n j n j

n j τ

τ

若令,/*1,/*12h b h a r

τμτ==

则迎风格式可整理为:

>

<<++-+-+=><>++++--=-+++-+2)01()()21(1)01()()21(111111a f u u r u r u a f u u r u r u n j

n j n j n j n j n

j n j n j n j n j τμμμτμμμ2、稳定条件:

()

(01),*11*2/(01),*11*2/(2

2<-≤>+≤a h a b h a h a b h ττ(*) 四、数值实验的过程、相关程序及结果:

本次的实验题目所给出的边界条件是第一边界条件,直接利用所给的边界条件,我们可以给出界点处以及第0层的函数值,根据a1的正负性,使用相应的<1>或者<2>式,求出其他层的函数值。误差转化成图的形式,并输出最大值。 针对三种不同的输入对应输出结果 :

A: a1=1;b1=2;a=1;b=1;h=0.1;k=0.001;

结果一:

1.误差最大值:

e =

7.9402e-004

2.误差图如下图所示:

B: a1=-1;b1=2;a=1;b=1;h=0.1;k=0.001; 结果二:

1.误差最大值:

e =

0.0682

2.误差图:

C: a1=-1;b1=-0.1;a=1;b=1;h=0.1;k=0.001; 结果三:

1.误差最大值:

e =

6.2221e+005

2.误差图:

五、实验结论:

通过上机实现,进一步直观了解流扩散方程的稳定具有很强的条件性,只要在a1,b1,h和 满足(*)式时才是稳定的,如结果一、二,否则会出现结果三的情形,误差相当大。本次实验,熟悉并掌握了差分格式的一般构造方法,理清了具体的步骤,提高了利用计算机解决问题的能力。

附:Matlab源代码:

1. function z=ft(x)%求下边界

z=exp(x/2);

2.function z=fx1(t)%求左边界

z=exp(-t);

3.function z=fx2(t)%求右边界

z=exp(1/2-t);

4.function z=f(x,t)%求右端函数

z=-exp(x/2-t);

5 .function z=fu(x,t)%求真解

z=exp(x/2-t);

6. function [X,T,z]=upwindL(a1,b1,a,b,h,k)%用迎风格式求解upwindL(1,2,1,1,0.1,0.1)

x=0:h:a;t=0:k:b;

[T,X]=meshgrid(t,x);

m=length(x);n=length(t);

r1=a1*k/h;r2=b1*k/h^2;

uu=zeros(m,n);%储存数值解

z=uu;%储存误差

for i=1:m%求下边界

uu(i,1)=ft(x(i));

end

for j=2:n%求左右边界

uu(1,j)=fx1(t(j));

uu(m,j)=fx2(t(j));

end

%迎风格式求内点,从下往上

if(a1>0)

for j=2:n

for i=2:m-1%从左往右

uu(i,j)=(1-r1-2*r2)*uu(i,j-1)+(r1+r2)*uu(i-1,j-1)+r2*uu(i+1,j-1)+k*f(x(i),t(j-1));%求数值解z(i,j)=abs(uu(i,j)-fu(x(i),t(j)));%求误差

end

end

else

for j=2:n

for i=2:m-1%从左往右

uu(i,j)=(1+r1-2*r2)*uu(i,j-1)+(r2-r1)*uu(i+1,j-1)+r2*uu(i-1,j-1)+k*f(x(i),t(j-1));%求数值解z(i,j)=abs(uu(i,j)-fu(x(i),t(j)));%求误差

end

end

end

%主函数,用于输出

7. [X,T,z]=upwindL(a1,b1,a,b,h,k);

mesh(T,X,z)

e=max(max(z))

title('误差图')

xlabel('x轴')

ylabel('t轴')

zlabel('z轴')

相关文档
最新文档