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 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
clear all; close all; Nvec=2.^[2:7]; Error=[]; for N=Nvec h1=pi/N; h2=1/N; x=[0:h1:pi]'; y=[0:h2:1]'; [X,Y]=meshgrid(x,y); X1=X(2:N,2:N); Y1=Y(2:N,2:N); f=cos(3*X1).*sin(pi*Y1); e=ones(N-1,1); C=diag([1/h1^2+2/h2^2, (2/h1^2+2/h2^2)*ones(1,N-3), 1/h1^2+2/h2^2])... -1/h1^2*diag(ones(N-2,1),1)-1/h1^2*diag(ones(N-2,1),-1); D=-1/h2^2*eye(N-1); A=kron(eye(N-1),C)+kron(spdiags([e e],[-1 1],N-1,N-1),D); f=f'; u=zeros(N+1,N+1); u(2:N,2:N)=reshape(A\f(:),N-1,N-1)'; u(:,1)=u(:,2); u(:,end)=u(:,end-1); ue=1/(9+pi^2)*(cos(3*X)).*(sin(pi*Y)); error=max(max(abs(u-ue))); Error=[Error,error]; end plot(log10(Nvec),log10(Error),'ro-','MarkerFaceColor','w','LineWidth',1) hold on plot(log10(Nvec), log10(Nvec.^(-1)), '--') grid on
set(gca,'fontsize',14) xlabel('log_{10}N','fontsize', 14), ylabel('log_{10}Error','fontsize',14),
ax = [0.64 0.60]; ay = [0.69 0.64]; annotation('textarrow',ax,ay,'String','slope = -1 ','fontsize',14)
for i=1:length(Nvec)-1 order(i)=-log(Error(i)/Error(i+1))/(log(Nvec(i)/Nvec(i+1))); end Error order
|