文档详情

微分方程数值解报告三.doc

发布:2017-08-15约1.7千字共4页下载文档
文本预览下载声明
微分方程数值解报告三 迎风格式和Lax-Friedrichs格式求解微分方程 双曲型方程差分格式的性质和定解问题解析解的性质之间有着密切的联系,由于其对初值的局部依赖关系和特征关系是其他两类方程所没有的,其初值函数的一些性质也会沿特征线传播,从而使解不具有光滑性质,在构造双曲型方程的差分格式时应充分考虑这些特性,下面江将用两种常见格式求解一个简单的偏微分方程。 二、方法原理 本题求解首先用到一阶迎风格式(Upwind Scheme) 其中定义: 另外为了克服中心差分格式的不稳定性还有Lax-Friedrichs格式 三、求解问题 四、编程设计和方法分析 考虑网格参数: 接下来我们按照迎风格式和Lax-Friedrichs格式分别对方程进行离散处理 Lax-Fredrichs格式为: %迎风格式 ? clear all close all clc %设置计算网格的参数 ? L=1.0;%计算区域的长度 T=0.5;%计算的时间长度 dx=0.01; dt=0.005; x=-L:dx:L; t=0:dt:T; xn=size(x,2)-1;%网格段的个数 tn=size(t,2)-1;%时间段的个数 u=zeros(tn+1,xn+1); %设置初始条件 ? for xi=1:xn+1 ????if(x(xi)=0) ????????u(1,xi)=1;%x=0时,uo(x)=1 ????else ????????u(1,xi)=0;%x0时,uo(x)=0 ????end end %在计算开始前,将中间的网格点的值设为零 ? for i=2:xn ????u(i,1)=1;%将中间的网格点的值设置为0 end for ti=1:tn ????for j=2:xn ????????u(ti+1,j)=dt*u(ti,j-1)/dx+(1.0-dt/dx)*u(ti,j); ????end end %绘制计算结果 ? for i=2:30:92 ????subplot(2,2,1+(i-2)/30); ????plot(x,u(i,:)); ????str=num2str(t(i),T=%f); ????xlabel(str); ????str=num2str(i,u(%d,x)); ????ylabel(str); end Lax-Friedrichs格式代码 2%Lax-Friedrichs格式 clear all close all clc ? %设置计算网格的参数 ? L=1.0;%计算区域的长度 T=0.8;%计算的时间长度 dx=0.01;%网格尺寸 dt=0.005;%时间步长 miu=1; x=-L:dx:L; t=0:dt:T; xn=size(x,2)-1;%x的分段数 tn=size(t,2)-1;%时间的分段数 u=zeros(tn+1,xn+1);%u的上标为时间标号,下标为坐标标号 %设置初始条件 ? for xi=1:xn+1 ????if(x(xi)=0) ????????u(1,xi)=1;%x=0时,uo(x)=1 ????else ????????u(1,xi)=0;%x0时,uo(x)=0 ????end end for i=2:xn ????u(i,1)=1; end for ti=1:tn ????for j=2:xn ????????u(ti+1,j)=0.5*(1-dt/dx)*u(ti,j+1)+0.5*(1+dt/dx)*u(ti,j-1); ????end end %绘制计算结果 ? for i=2:30:92 ????subplot(2,2,1+(i-2)/30); ????plot(x,u(i,:)); ????str=num2str(t(i),T=%.4f); ????xlabel(str); ????str=num2str(i,u(%d,x)); ????ylabel(str); end
显示全部
相似文档