1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
clear all; close all; a=1; h=0.05; x=[0:h:1]; tau=0.001; t=[0:tau:1]; r=a*tau/h^2; M=length(x)-1; N=length(t)-1;
e=r*ones(M-1,1); A=spdiags([-e 2+2*e -e],[-1 0 1],M-1,M-1); B=spdiags([e 2-2*e e],[-1 0 1],M-1,M-1);
u=zeros(M+1,N+1); u(:,1)=sin(x); u(1,:)=sin(t); u(end,:)=sin(1+t); for n=1:N F=tau*cos(x(2:M)'+t(n))+tau*sin(x(2:M)'+t(n))... +tau*cos(x(2:M)'+t(n+1))+tau*sin(x(2:M)'+t(n+1)); F(1)=F(1)+r*u(1,n)+r*u(1,n+1); F(M-1)=F(M-1)+r*u(end,n)+r*u(end,n+1); u(2:M,n+1)=A\B*u(2:M,n)+A\F; end
mesh(t(1:20:end),x,u(:,1:20:end)) set(gca,'fontsize',12) xlabel('t','fontsize', 14) ylabel('x','fontsize',14) zlabel('u','fontsize',14)
[T X]=meshgrid(t,x); ue=sin(X+T);
Error=max(max(abs(ue-u)))
|