精确解为:U(x,t)=e^(x+t);
用紧差分格式:
此种方法精度为o(h1^2+h2^4),无条件差分稳定;
一:用追赶法解线性方程组(还可以用迭代法解)
Matlab程序为:
function [u p e x t]=JCHGS(h1,h2,m,n)
%紧差分格式解一维抛物线型偏微分方程
%此程序用的是追赶法解线性方程组
%h1为空间步长,h2为时间步长
%m,n分别为空间,时间网格数
%p为精确解,u为数值解,e为误差
x=(0:m)*h1+0; x0=(0:m)*h1;%定义x0,t0是为了f(x,t)~=0的情况%
t=(0:n)*h2+0; t0=(0:n)*h2+1/2*h2;
syms f;
for(i=1:n+1)
for(j=1:m+1)
f(i,j)=0; %f(i,j)=f(x0(j),t0(i))==0%
end
end
for(i=1:n+1)
u(i,1)=exp(t(i));
u(i,m+1)=exp(1+t(i));
end
for(i=1:m+1)
u(1,i)=exp(x(i));
end
r=h2/(h1*h1);
for(i=1:n) %外循环,先固定每一时间层,每一时间层上解一线性方程组%
a(1)=0;b(1)=5/6+r;c(1)=1/12-r/2;d(1)=(r/2-1/12)*u(i+1,1)+... (1/12+r/2)*u(i,1)+(5/6-r)*u(i,2)+(1/12+r/2)*u(i,3)+...
h2/12*(f(i,1)+10*f(i,2)+f(i,3));
for(k=2:m-2)
a(k)=1/12-r/2;b(k)=5/6+r;c(k)=1/12-r/2;d(k)=h2/12*(f(i,k)+...