向前差分格式求解二维热传导方程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用向前差分格式求解二维热传导方程function varargout=liu(varargin)
T=1;a=1;h=1/30;dt=1/150;
[X,T,Z]=chfenmethed(h,dt,a,T);
mesh(X,T,Z(:,:,3));
shading flat;
% xlabel('X','FontSize',14);
% ylabel('t','FontSize',14);
% zlabel('error','FontSize',14);
% title('误差图');
function [X,Y,Z]=chfenmethed(h,dt,a,T);
%求解下问题
%u_t-a*(u_xx+u_yy)=f(x,y,t) 0 %u(x,y,0)=d %h离散x y方向的步长 %dt离散t方向的步长 x=0:h:1; y=x; t=0:dt:T; m=length(x); n=length(t); r=a*dt/h^2; [X,Y]=meshgrid(x,y); Z=zeros(m,m,n); U=zeros(m,m,n); for i=1:m for j=1:m U(i,j,1)=d(x(i),y(j)); end end for j=2:n for k=1:m U(1,k,j)=g0(y(k),t(j)); U(m,k,j)=g1(y(k),t(j)); U(k,1,j)=h0(x(k),t(j)); U(k,m,j)=h1(x(k),t(j)); end end for k=2:n for i=2:m-1 for j=2:m-1 U(i,j,k)=U(i,j,k-1)+r*a*(U(i+1,j,k-1)+U(i-1,j,k-1)+U(i,j+1,k-1)... +U(i,j-1,k-1)-4*U(i,j,k-1))+f(x(i),y(j),t(k-1)); Z(i,j,k)=abs(U(i,j,k)-Uu(x(i),y(j),t(k))); end end end function z=Uu(x,y,t) %精确解函数 z=exp(-t)*sin((x+y)*pi) ; function z=g0(y,t) z=Uu(1,y,t); function z=g1(y,t) z=Uu(1,y,t); function z=h0(x,t) z=Uu(x,0,t); function z=h1(x,t) z=Uu(x,1,t); function z=d(x,y) z=Uu(x,y,0); function z=f(x,y,t) z=exp(-t)*sin((x+y)*pi)*(2*(pi)^2-1); 设计结果与分析:所得图形: