|
[Sponsors] |
February 15, 2012, 13:34 |
TDMA code for MATLAB
|
#1 |
Member
Amin Shariat KHah
Join Date: Apr 2011
Location: Shiraz
Posts: 86
Rep Power: 15 |
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 |
|
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: 16 |
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: 15 |
You're welcome
|
|
March 2, 2016, 08:04 |
2D line by line iterative TDMA
|
#4 |
New Member
farah souayfane
Join Date: Jan 2016
Posts: 3
Rep Power: 10 |
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, 10:12 |
|
#5 |
New Member
Join Date: Mar 2014
Posts: 14
Rep Power: 12 |
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, 02:02 |
2D line by line iterative TDMA
|
#6 |
New Member
farah souayfane
Join Date: Jan 2016
Posts: 3
Rep Power: 10 |
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 02:05. Reason: add title |
|
March 4, 2016, 09:42 |
|
#7 | |||
New Member
Join Date: Mar 2014
Posts: 14
Rep Power: 12 |
Quote:
Quote:
Quote:
Does that make any sense? Does that help? |
||||
February 22, 2022, 00:18 |
|
#8 |
Senior Member
Lucky
Join Date: Apr 2011
Location: Orlando, FL USA
Posts: 5,740
Rep Power: 66 |
The wikipedia article tells you exactly what you need to do and even provides a full analytical derivation. If there's a specific step you don't understand, ask it. If there's a specific non-English language you understand better, ask for a translation.
|
|
Thread Tools | Search this Thread |
Display Modes | |
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
The FOAM Documentation Project - SHUT-DOWN | holger_marschall | OpenFOAM | 242 | March 7, 2013 12:30 |
How to make code run in parallel? | cwang5 | OpenFOAM Programming & Development | 1 | May 30, 2011 04:47 |
Open Source Vs Commercial Software | MechE | OpenFOAM | 28 | May 16, 2011 11:02 |
Error in CFX Solver | Leuchte | CFX | 5 | November 6, 2010 06:12 |
Small 3-D code | Zdravko Stojanovic | Main CFD Forum | 2 | July 19, 2010 10:11 |