130 likes | 396 Vues
Solving Tridiagonal System ( By LU decomposition and backward substitution ). Course: CS 4MN3 Student: Imam Abdukerim Professor: Dr. Sanzheng Qiao Date: February 27, 2009. Tridiagonal System. u = [u 1 , u 2 , …, u n-1 ] d = [d 1 , d 2 , …, d n-1, d n ]
E N D
Solving Tridiagonal System( By LU decomposition and backward substitution ) Course: CS 4MN3 Student: Imam Abdukerim Professor: Dr. Sanzheng Qiao Date: February 27, 2009
Tridiagonal System • u = [u1, u2, …, un-1] • d = [d1, d2, …, dn-1, dn] • l = [l1, l2, …, ln-1]
LU decomposition of Tridiagonal Matrix (Matlab Code) function [u1,d1,l1] = decomt(u,d,l) n = length(d); % get the length of the diagonal % initialize the output vectors u1=u; d1=d; l1=l; %Perform LU decomposition d1(1)=d(1); for i=2:n l1(i-1) = l(i-1)/d1(i-1); % Update the lover triangle vector d1(i) = d(i) - (l(i-1)/d1(i-1))*u(i-1); %Update the diaginal end Complexity: O(n)
u = [23 43 22 3 77]; d = [3 34 55 18 13 56]; l = [1,2,3,4,5]; >>[u,d,l] = decomt(u,d,l) u = 23 43 22 3 77 d = 3.0000 26.3333 51.7342 16.7242 12.2825 24.6545 l = 0.3333 0.0759 0.0580 0.2392 0.4071 (Construct L and U using decomposed vectors) L = diag(l,-1)+eye(6); U = diag(d)+diag(u,+1); L = 1.0000 0 0 0 0 0 0.3333 1.0000 0 0 0 0 0 0.0759 1.0000 0 0 0 0 0 0.0580 1.0000 0 0 0 0 0 0.2392 1.0000 0 0 0 0 0 0.4071 1.0000 U = 3.0000 23.0000 0 0 0 0 0 26.3333 43.0000 0 0 0 0 0 51.7342 22.0000 0 0 0 0 0 16.7242 3.0000 0 0 0 0 0 12.2825 77.0000 0 0 0 0 0 24.6545 (Construct triangular matrix by multiplying L and U) >>L*U ans = 3.0000 23.0000 0 0 0 0 1.0000 34.0000 43.0000 0 0 0 0 2.0000 55.0000 22.0000 0 0 0 0 3.0000 18.0000 3.0000 0 0 0 0 4.0000 13.0000 77.0000 0 0 0 0 5.0000 56.0000 LU decomposition of Tridiagonal Matrix (Testing)
Solving Tridiagonal System(Matlab Code - Ditailed) function [x] = solvet(u,d,l,b) n = length(d); x = (1:n); y = (1:n); %Solve Tridiagonal system LUx=b; % Step 1 : Solve Ly=b for y y(1) = b(1); for i=2:n y(i) = b(i) - l(i-1)*y(i-1); end % Step 2 : Solve Ux=y for x x(n) = y(n)/d(n); for i=(n-1):-1:1 x(i) = (y(i)-u(i)*x(i+1))/d(i); End
(Using solvet() function) u = 23 43 22 3 77 d = 3.0000 26.3333 51.7342 16.7242 12.2825 24.6545 l = 0.3333 0.0759 0.0580 0.2392 0.4071 b = 45 43 33 67 89 76 >> solvet(u,d,l,b) y = 45.0000 28.0000 30.8734 65.2097 73.4036 46.1186 x = -11.9303 3.5127 -1.5000 4.9307 -5.7506 1.8706 ans = -11.9303 3.5127 -1.5000 4.9307 -5.7506 1.8706 (Using Matlab standard function) M = 3.0000 23.0000 0 0 0 0 1.0000 34.0000 43.0000 0 0 0 0 2.0000 55.0000 22.0000 0 0 0 0 3.0000 18.0000 3.0000 0 0 0 0 4.0000 13.0000 77.0000 0 0 0 0 5.0000 56.0000 b = 45 43 33 67 89 76 >> M\b1 ans = -11.9303 3.5127 -1.5000 4.9307 -5.7506 1.8706 Solving Tridiagonal System(Testing)
Solving Tridiagonal System(Matlab Code – overwrite b) function [b] = solvet(u,d,l,b) n = length(d); %Solve Tridiagonal system LUx=b; % Step 1 : Solve Ly=b for y (overwrite b) for i=2:n b(i) = b(i) - l(i-1)*b(i-1); end % Step 2 : Solve Ux=y for x (overwrite b) b(n) = b(n)/d(n); for i=(n-1):-1:1 b(i) = (b(i)-u(i)*b(i+1))/d(i); End