TDMA code for MATLAB

 Register Blogs Members List Search Today's Posts Mark Forums Read

 February 15, 2012, 14:34 TDMA code for MATLAB #1 Member   Amin Shariat KHah Join Date: Apr 2011 Location: Shiraz Posts: 86 Rep Power: 8 TDMA is a quick Aligorithm for solving AX=b when A is Tridiagonal matrix: Code: % Written by Amin ShariatKhah 2012 - Shahrood University Of technology %Feel Free to use it %This code solve the AX=b (When A is Tridiagonal ) function X=TDMAsolver(A,b) m=length(b); % m is the number of rows X=zeros(m,1); A(1,2)= A(1,2) ./ A(1,1); % Division by zero risk. b(1)= b(1) ./ A(1,1); % Division by zero would imply a singular matrix for i=2:m-1 temp= A(i,i) - A(i,i-1) .* A(i-1,i); A(i,i+1)= A(i,i+1) ./ temp; b(i)= ( b(i) - A(i,i-1) .* b(i-1) ) ./ temp; end i=m; X(m)=(b(i) - A(i,i-1) .* b(i-1)) ./ (A(i,i) - A(i,i-1) .* A(i-1,i)); for i=m-1:-1:1 X(i)= -A(i,i+1) .* X(i+1) + b(i); end end there is another version of this code in wikipedia: Code: function x = TDMAsolver(a,b,c,d) %a, b, c are the column vectors for the compressed tridiagonal matrix, d is the right vector n = length(b); % n is the number of rows % Modify the first-row coefficients c(1) = c(1) / b(1); % Division by zero risk. d(1) = d(1) / b(1); % Division by zero would imply a singular matrix. for i = 2:n-1 temp = b(i) - a(i) * c(i-1); c(i) = c(i) / temp; d(i) = (d(i) - a(i) * d(i-1)) / temp; end d(n) = (d(n) - a(n) * d(n-1))/( b(n) - a(n) * c(n-1)); % Now back substitute. x(n) = d(n); for i = n-1:-1:1 x(i) = d(i) - c(i) * x(i + 1); end end you can find some explanation about TDMA and find this code in C and Fortran90 in : HTML Code: http://en.wikipedia.org/wiki/Tridiagonal_matrix_algorithm hityangsir and CZdozen like this.

 March 27, 2012, 11:33 thank you very much,that is what I need #2 New Member     Y. Yang Join Date: Mar 2010 Location: Miami, United States Posts: 28 Rep Power: 9 thank you very much,that is what I need

 April 6, 2012, 15:27 #3 Member   Amin Shariat KHah Join Date: Apr 2011 Location: Shiraz Posts: 86 Rep Power: 8 You're welcome

 March 2, 2016, 09:04 2D line by line iterative TDMA #4 New Member   farah souayfane Join Date: Jan 2016 Posts: 3 Rep Power: 3 hello, I am working on modelling phase change including the effect of convection in liquid phase. I want to write my program on MATLAB. Actually I am a beginner in MATLAB. I need help to write the 2D line by line TDMA iterative solution of my equations ( 2D transient) Can any one provide me with a code to 2D TDMA line by line iterative algorithm for the solution of 2D discretized equations. Thank you in advance

 March 2, 2016, 11:12 #5 New Member   Join Date: Mar 2014 Posts: 14 Rep Power: 5 I cannot provide a Matlab code, but I can provide some advice. If your stencil looks like this , you can treat the W and E values explicitly (use the values from the previous time-/iteration step). If you are solving , include the W and E values in your solution vector and fill your matrix with the coefficients of unknowns along a North-South line. You can step W to E in the domain along N-S lines.

 March 4, 2016, 03:02 2D line by line iterative TDMA #6 New Member   farah souayfane Join Date: Jan 2016 Posts: 3 Rep Power: 3 Thank you for your reply, Actually I have a problem in how to define the temperature field in Matlab code, is it a vector or a matrix?? for example in my 2D grid I have T(1,1) T(1,2) .....T(n,m) When I use A line by line TDMA the pentadiagonal matrix became tridiagonal. I am sweeping from west to east along N-S lines so for a determined line ( for a specified n ) I have to calculate all the values of temperature for m going from 2 to m ( for example if n=2 (x direction ) so I calculate T(2,2) T(2,3) T(2,4) T(2,5).....(T2,m) and then I sweep to n=3 ....) . here I don't understand how can I define the temperature field in Matlab ?? Last edited by fsouayfane; March 4, 2016 at 03:05. Reason: add title

March 4, 2016, 10:42
#7
New Member

Join Date: Mar 2014
Posts: 14
Rep Power: 5
Quote:
 Originally Posted by fsouayfane Actually I have a problem in how to define the temperature field in Matlab code, is it a vector or a matrix?? for example in my 2D grid I have T(1,1) T(1,2) .....T(n,m)
Using an matrix will work just fine.

Quote:
 When I use A line by line TDMA the pentadiagonal matrix became tridiagonal.
Forgive me, I do not understand... do you mean because you treat two of the coefficients in an explicit manner?

Quote:
 I am sweeping from west to east along N-S lines so for a determined line ( for a specified n ) I have to calculate all the values of temperature for m going from 2 to m ( for example if n=2 (x direction ) so I calculate T(2,2) T(2,3) T(2,4) T(2,5).....(T2,m) and then I sweep to n=3 ....) . here I don't understand how can I define the temperature field in Matlab ??
This procedure sounds great. I am not sure what you mean by being unable to define the temperature field in matlab... when I implemented a similar code in FORTRAN, I used two data structures, something like: and , where I start by filling with an initial guess for the field, and then store the solved temperature distribution in , and then overwrite with the solved temperature before the next iteration.

Does that make any sense? Does that help?

 Thread Tools Display Modes Linear Mode

 Posting Rules You may not post new threads You may not post replies You may not post attachments You may not edit your posts BB code is On Smilies are On [IMG] code is On HTML code is OffTrackbacks are On Pingbacks are On Refbacks are On Forum Rules

 Similar Threads Thread Thread Starter Forum Replies Last Post holger_marschall OpenFOAM 242 March 7, 2013 13:30 cwang5 OpenFOAM Programming & Development 1 May 30, 2011 04:47 MechE OpenFOAM 28 May 16, 2011 11:02 Leuchte CFX 5 November 6, 2010 07:12 Zdravko Stojanovic Main CFD Forum 2 July 19, 2010 10:11

All times are GMT -4. The time now is 13:28.