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
|
clear all; close all; Nvec=[10 50 100 200 500 1000]; Error=[]; for n=1:length(Nvec) N=Nvec(n); h=1/N; x=[0:h:1]; u(1)=1; Y=[1;1]; for i=1:N k=u(i); tol=1; while tol>1.0e-10 X=Y; D=[1-0.25*h,-h*(0.25-(sqrt(3))/6);... -h*( 0.25+(sqrt(3))/6),1-h*0.25]; F=[X(1)-k-h*(0.25*X(1)+(0.25-(sqrt(3))/6)*X(2));... X(2)-k-h*((0.25+(sqrt(3))/6)*X(1)+0.25*X(2))]; Y=X-D\F; tol=norm(Y-X); end u(i+1)=k+(h/2)*(Y(1)+Y(2)); end ue=exp(x); error=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.^(-4)), '--') grid on,
set(gca,'fontsize',12) xlabel('log_{10}N','fontsize',14), ylabel('log_{10}Error','fontsize',14)
ax = [0.62 0.58]; ay = [0.72 0.66]; annotation('textarrow',ax,ay,'String','slope = -4 ','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
|