% FIGURE 5.11.1 % BREAK POINTS ARE XPTS(K), K=1,N+1 % UNKNOWNS ARE A(I), I=1,M global N global XPTS global M global A global OMEGA global LOCATE OMEGA = 'OMEGA5111'; LOCATE = 'LOCATE5111'; % NSUBS = NUMBER OF SUBINTERVALS NSUBS=4; N = NSUBS; M = 2*NSUBS+1; ALPHA = 4.0; for K=1:N+1 XPTS(K) = (K-1)/N; end % INITIAL VALUES ASSIGNED for I=1:M [HORS,K] = LOCATE5111(I); if (HORS == 'H') A(I) = 1.0; else A(I) = 0.0; end end % DO ITMAX INVERSE POWER ITERATIONS ITMAX = 15; for ITER=1:ITMAX % SAVE PREVIOUS A VECTOR for I=1:M AOLD(I) = A(I); end % CALCULATE MATRIX A-ALPHA*B, AND F=B*AOLD L = 3; for K=1:M F(K) = 0.0; for I=max(K-L,1):min(K+L,M) AMAT(K,L+1+I-K) = GAUSS('FUNA5111',K,I); BMAT = GAUSS('FUNB5111',K,I); F(K) = F(K) + BMAT*A(I); AMAT(K,L+1+I-K) = AMAT(K,L+1+I-K) - ALPHA*BMAT; end end % SOLVE LINEAR SYSTEM USING BAND SOLVER A = LBAND(AMAT,F,M,L); % ESTIMATE EIGENVALUE ANUM = 0.0; ADEN = 0.0; for I=1:M ANUM = ANUM + F(I)*AOLD(I); ADEN = ADEN + F(I)*A(I); end EIGEN = ANUM/ADEN + ALPHA; % CALCULATE MAXIMUM ERROR ERMAX = 0.0; for J=0:100 X = J/100.0; EXACTX = exp(X)*sin(2.0287579*X); EXACT1 = exp(1.0)*sin(2.0287579*1.0); ERR = abs(USOL(0,X,1,M)/USOL(0,1.0,1,M) - EXACTX/EXACT1); ERMAX = max(ERMAX,ERR); end ITER EIGEN ERMAX end