二阶双曲型方程初边值问题的有限差分法

 

 

 

(代码在后面)

 

 

 

 

m=80,n=100;

 

 

 

 MATLAB代码:

clc
clear
M=80;%x
N=80;%T
L=1;T=1;
h=L/M;%空间步长
tao=T/N;%时间步长
x=0:h:L;
t=0:tao:T;
r=L*(tao/h)^2
f=@(x,t) 0;
%% 构造边值矩阵 
u=zeros(N+1,M+1);
u(1,:)=sin(4*pi*x); 
u(:,1)=0;
u(:,M+1)=0;
%% 方法一 偏心差分 求出网格中的第二行
% for j=2:M
%     u(2,j)=u(1,j)+tao*sin(8*pi*x(j));
% end
%% 方法二 中心差分 求出网格中的第二行
for j=2:M
    u(2,j)=r*(u(1,j-1)+u(1,j+1))/2+(1-r)*u(1,j)+tao*sin(8*pi*x(j));
end
%% 数值解
for i=2:N
    j=2;
    while j<=M;
        u(i+1,j)=r*(u(i,j+1)+u(i,j-1))+2*(1-r^2)*u(i,j)-u(i-1,j)+tao^2*f(x(j),t(i));
        j=j+1;
    end
end
%% 解析解
for j=1:M+1
    for i=1:N+1
    Accurate(i,j)=cos(4*pi*t(i))*sin(4*pi*x(j))+(sin(8*pi*t(i))*sin(8*pi*x(j)))/(8*pi);
    end
end
%% 误差
err=max(max((abs(Accurate-u))))
% %% 画图
% [xx,tt]=meshgrid(x,t);
% figure 
% surf(xx,tt,u)
% xlabel('x');ylabel('t');zlabel('u');title('数值解')

% figure
% surf(xx,tt,Accurate)
% xlabel('x');ylabel('t');zlabel('Accurate');title('解析解') 

  

 

Tags: