资源描述:
《维波动方程的有限差分法.pdf》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、维波动方程的有限差分法--------------------------------------------------------------------------作者:_____________--------------------------------------------------------------------------日期:_____________学生实验报告实验课程名称偏微分方程数值解开课实验室数统学院学院数统年级2013专业班信计02班学生姓名学号开课时间2015至2016学年第2学期
2、总成绩教师签名2数学与统计学院制开课学院、实验室:数统学院实验时间:2016年6月20日实验项目类型实验项目一维波动方程的有限差分法验证演示综合设计其他名称指导教成绩曾芳是师一.实验目的通过该实验,要求学生掌握求解一维波动方程的有限差分法,并能通过计算机语言编程实现。二.实验内容考虑如下的初值问题:22uu,x0,1,t0,222txux,0sinx,ux,00(1)tu0,tu1,t0,t0,21.在第三部分写出问题(1)三层显格式。2.根据你写出的差分格式,编写有限差分法程序。将所写程序放到第四部分。3.取h0.1,
3、0.1h,分别将t0.5,1.0,1.5,2.0时刻的数值解画图显示。4.该问题的解析解为ux,tcostsinx,将四个时刻的数值解的误差画图显示,对数值结果进行简单的讨论。三.实验原理、方法(算法)、步骤1、三层显格式建立由于题中h0.1,0.1h,x0,1,t0,2,取N10,M200,故令网比r0.1,xjjh,j0,1,2,L10,tkk,k0,1,L,200,在xj,tk内网个点处,利用二h阶中心差商得到如下格式:k1kk1kkkuj2ujuj2uj12ujuj12ooh(2)22h略去误差项得到:3k12k
4、2k2kk1ujruj121rujruj1uj(3)22其中j1,2,L9,k1,2,L,199,局部截断误差为oh。对于初始条件ux,0sinx,建立差分格式为:0ujsinxjsinjh,j0,1,2,L10(4)对于初始条件ux,00,利用中心差商,建立差分格式为:t11ujuj110,即uj=uj,j0,1,2,L10(5)2对于边界条件u0,tu1,t0,t0,2,建立差分格式为:kku0uN0,k0,1,L,200(6)1将差分格式延拓使k0为内点,代入(3)得到的式子再与(5)联立消去uj后整理得到:112
5、020120ujruj11rujruj1(7)2222综上(3)、(4)、(6)、(7)得到三层显格式如下:(局部截断误差为oh)k12k2k2kk1ujruj121rujruj1uj,j1,2,L9,k1,2,L,1990ujsinxjsinjh,j0,1,2,L10(8)112020120ujruj11rujruj1,j1,2,L922kku0uN0,k0,1,L,200其中r0.1。h四.实验环境(所用软件、硬件等)及实验数据文件Matlab三层显格式程序如下:%一维波动方程,三层显格式求解法h=0.1;tau=0
6、.1*h;r=tau/h;N=1/h;M=2/tau;x=0:h:1;t=0:tau:2;u=sin(pi*x);%计算t=0时刻的u值u(1,11)=0;forj=2:Nu(2,j)=0.5*r^2*u(1,j+1)+(1-r^2)*u(1,j)+0.5*r^2*u(1,j-1);end%定义x=0边界上的数值fork=1:M+1u(k,1)=0;end4%定义x=1边界上的数值fork=1:M+1u(k,N+1)=0;end%迭代计算开始,差分格式fork=2:Mforj=2:Nu(k+1,j)=r^2*u(k,j+
7、1)+2*(1-r^2)*u(k,j)+r^2*u(k,j-1)-u(k-1,j);endendu(201,:)=zeros(1,11);%计算k=201行的数值解u2(201,11)=0;forj=2:Nu2(201,j)=r^2*u(200,j+1)+2*(1-r^2)*u(200,j)+r^2*u(200,j-1)-u(199,j);endu=u+u2;u=rot90(u,2);%将矩阵u旋转180度赋值于u%作出图像[x,t]=meshgrid(0:0.1:1,0:0.01:2);%划分网格%作出数值解的函数图像
8、subplot(2,2,1);mesh(x,t,u);title('u(x,t)数值解的函数图像');xlabel('x变量');ylabel('t变量');zlabel('u值');%作出精确解的函数图像subplot(2,2,2);u1=cos(pi*t).*sin(pi*x);mesh(x,t,u1);titl