

Study with the several resources on Docsity
Earn points by helping other students or get them with a premium plan
Prepare for your exams
Study with the several resources on Docsity
Earn points to download
Earn points by helping other students or get them with a premium plan
This is solution to one of problems in Numerical Analysis. This is matlab code. Its helpful to students of Computer Science, Electrical and Mechanical Engineering. This code also help to understand algorithm and logic behind the problem. This code includes: Crout, Factorization, Tridiagonal, Linear, Systems, Algorithm, Dimesnsion, Entries, Inhonmogeneus, Equations
Typology: Exercises
1 / 3
This page cannot be seen from the preview
Don't miss anything!


% To solve the n x n linear system % % E1: A(1,1) X(1) + A(1,2) X(2) = A(1,n+1) % E2: A(2,1) X(1) + A(2,2) X(2) + A(2,3) X(3) = A(2,n+1) % : %. % E(n): A(n,n-1) X(n-1) + A(n,n) X(n) = A(n,n+1) % % INPUT: the dimension n; the entries of A. % % OUTPUT: the solution X(1), ..., X(N). syms('AA', 'OK', 'NAME', 'INP', 'N', 'I', 'A', 'B', 'NN'); syms('C', 'BB', 'Z', 'X', 'II', 'FLAG', 'OUP', 's'); TRUE = 1; FALSE = 0; fprintf(1,'This is Crout Method for tridiagonal linear systems.\n'); fprintf(1,'The array will be input from a text file in the order:\n'); fprintf(1,'all diagonal entries, all lower sub-diagonal entries, all '); fprintf(1,'upper sub-diagonal\n'); fprintf(1,'entries, inhomogeneous term.\n\n'); fprintf(1,'Place as many entries as desired on each line, but separate '); fprintf(1,'entries with\n'); fprintf(1,'at least one blank.\n\n\n'); fprintf(1,'Has the input file been created? - enter Y or N.\n'); AA = input(' ','s'); OK = FALSE; if AA == 'Y' | AA == 'y' fprintf(1,'Input the file name in the form - drive:\name.ext\n'); fprintf(1,'for example: A:\DATA.DTA\n'); NAME = input(' ','s'); INP = fopen(NAME,'rt'); OK = FALSE; while OK == FALSE fprintf(1,'Input the number of equations - an integer.\n'); N = input(' '); if N > 0 A = zeros(1,N); B = zeros(1,N); C = zeros(1,N); BB = zeros(1,N); X = zeros(1,N); Z = zeros(1,N); % A(I,I) is stored in A(I), 1 <= I <= n */ for I = 1 : N A(I) = fscanf(INP, '%f',1); end; % the lower sub-diagonal A(I,I-1) is stored %in B(I), 2 <= I <= n */ for I = 2 : N B(I) = fscanf(INP, '%f',1); end;
% the upper sub-diagonal A(I,I+1) is stored %in C(I), 1 <= I <= n-1 / NN = N-1; for I = 1 : NN C(I) = fscanf(INP, '%f',1); end; % A(I,N+1) is stored in BB(I), 1 <= I <= n / for I = 1 : N BB(I) = fscanf(INP, '%f',1); end; OK = TRUE; fclose(INP); else fprintf(1,'The number must be a positive integer.\n'); end; end; else fprintf(1,'The program will end so the input file can be created.\n') end; if OK == TRUE % Steps 1-3 set up and solve LZ = B % STEP 1 % the entries of U overwrite C and the entries of L overwrite A C(1) = C(1)/A(1); Z(1) = BB(1)/A(1); % STEP 2 for I = 2 : NN A(I) = A(I)-B(I)C(I-1); C(I) = C(I)/A(I); Z(I) = (BB(I)-B(I)Z(I-1))/A(I); end; % STEP 3 A(N) = A(N)-B(N)C(N-1); Z(N) = (BB(N)-B(N)Z(N-1))/A(N); % STEP 4 % STEPS 4, 5 solve UX = Z X(N) = Z(N); % STEP 5 for II = 1 : NN I = NN-II+1; X(I) = Z(I)-C(I)*X(I+1); end; % STEP 6 fprintf(1,'Choice of output method:\n'); fprintf(1,'1. Output to screen\n'); fprintf(1,'2. Output to text file\n'); fprintf(1,'Please enter 1 or 2.\n'); FLAG = input(' '); if FLAG == 2 fprintf(1,'Input the file name in the form - drive:\name.ext\n'); fprintf(1,'for example: A:\OUTPUT.DTA\n'); NAME = input(' ','s'); OUP = fopen(NAME,'wt'); else