Matlab PDE求解器问题

Matlab PDE求解器问题,matlab,Matlab,我试图在一维内求解瞬态热方程,并比较解析解和数值解。这些解具有相同的趋势,但非常不同,而且相对误差为零,尽管它显然不应该为零。我不确定我是否正确地解决了PDE问题。pde为du/dt=d^2u/dx^2,bcs为u0,t=1,u100,t=0,ux,0=0。谁能看看我的密码吗 function he m = 0; x = linspace(0,100,500); t = linspace(0,1000,500); sol = pdepe(m,@hepde,@heic,@hebc,x,t)

我试图在一维内求解瞬态热方程,并比较解析解和数值解。这些解具有相同的趋势,但非常不同,而且相对误差为零,尽管它显然不应该为零。我不确定我是否正确地解决了PDE问题。pde为du/dt=d^2u/dx^2,bcs为u0,t=1,u100,t=0,ux,0=0。谁能看看我的密码吗

    function he
m = 0;
x = linspace(0,100,500);
t = linspace(0,1000,500);
sol = pdepe(m,@hepde,@heic,@hebc,x,t);
u = sol(:,:,1);
y = erfc(x./(2*(t.^0.5)));
r=(y-u(70,:))/y;
figure;
plot(x,u(50,:),'.',x,u(150,:),'.',x,u(250,:),'.',x,u(end,:),'.',x,y,'.');
title('Numerical Solutions at different times.');
legend('t=100','t=300','t=500','t=700','y ana',0);
xlabel('Distance x');
ylabel('u(x,t)');
figure;
plot(x,r);
title('error in numerical and analytical solution');
legend('error',0);
xlabel('Distance x');
ylabel('error');

% --------------------------------------------------------------------------
function [c,f,s] = hepde(x,t,u,DuDx)
c = 1;
f = DuDx;
s = 0;
% --------------------------------------------------------------------------
function u0 = heic(x)
u0 = 0;
% --------------------------------------------------------------------------
function [pl,ql,pr,qr] = hebc(xl,ul,xr,ur,t)
pl = ul-1;
ql = 0;
pr = ur;
qr = 0;

实际上,您已正确设置了所有解决方案,只是错误地使用了结果。我会一个接一个地检查错误

sol = pdepe(m,@hepde,@heic,@hebc,x,t);
u = sol(:,:,1);
您找到了正确的答案,但行u=sol:,:,1;因为sizesol=[2]是无用的,所以您不妨只做u=pdepe

现在当你计算你的精确解时,你做得很奇怪。您希望在每个x/t组合中找到它,但仅在其中一些组合中找到。您需要使用meshgrid获得x和t的所有组合,然后计算每个组合的精确解

[X,T]=meshgrid(x,t);
y = erfc(X./(2*(T.^0.5)));
然后,您需要以不同的方式计算误差

r=(y-u)./y;
figure(3);
plot(x,u(50,:),'b',x,u(150,:),'g',x,u(250,:),'r',x,u(end,:),'c',x,y(50,:),'b--',x,y(150,:),'g--',x,y(250,:),'r--',x,y(end,:),'c--');
并以不同的方式进行策划

r=(y-u)./y;
figure(3);
plot(x,u(50,:),'b',x,u(150,:),'g',x,u(250,:),'r',x,u(end,:),'c',x,y(50,:),'b--',x,y(150,:),'g--',x,y(250,:),'r--',x,y(end,:),'c--');
实际上你的精确解不满足x=100的边界条件