function example_11_2
close all
clear all
clc

%利用pdepe指令求解一维热传导偏微分方程
m=0;
x=linspace(0,1,21);  
t=linspace(0,0.2,21);  
sol=pdepe(m,@pdefun,@pdeic,@pdebc,x,t);
%这里sol实际上是二维矩阵，sol(:,:)
%************
%绘图输出
%************
figure(1),surf(x,t,sol)
title('pde 数值解'),xlabel('x'),ylabel('t' ),zlabel('u')
%*************
%与解析解做比较
%*************
figure(2)
[X,T]=meshgrid(x,t);
surf(X,T,exp(-pi^2*T).*sin(pi*X)); %用法参考chapter5_example_11_2_pdepe_1.m程序
title('解析解'),xlabel('x'),ylabel('t' ),zlabel('u')
figure(3)
surf(X,T,exp(-pi^2*T).*sin(pi*X)-sol); %注意sol的行是时间坐标，列为空间坐标
title('误差'),xlabel('x'),ylabel('t' ),zlabel('u')

%*****************
%t=0.2时杆上各点的温度分布图
%*****************
figure(4)
M=length(t); %取终点时间的下标
xout=linspace(0,1,1001); %输出点位置
uout=pdeval(m,x,sol(M,:),xout);
plot(xout,uout); %绘图
title('时间为0.2时,杆上各点的温度分布图'),xlabel('x'),ylabel('u')

figure(5)
plot(xout,exp(-pi^2*t(end))*sin(pi*xout)-uout)
title('时间为0.2时,杆上各点的温度计算误差'),xlabel('x'),ylabel('delta_u')

%偏微分方程函数
function [c,f,s]=pdefun(x,t,u,dudx)
c=1;f=dudx;s=0;
 
%初始条件函数
function u0=pdeic(x)
u0=sin(pi*x);
 
%边界条件函数
function [pa,qa,pb,qb]=pdebc(xa,ua,xb,ub,t)
pa=ua;qa=0;
pb=ub;qb=0;