1 function [T]=INVERSE_TRIDIAG(A)
3 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4 %%% Berechnung der Inversen der Tridiagonalmatrix A %%%
5 %%% mit HMGTI-Algorithmus -- nach dem paper von El-Mikkawy & Karawia %%%
6 %%% (Inversion of general tridiagonal matrices, 2006) %%%
7 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9 %
function [T]=INVERSE_TRIDIAG(A)
11 % Input: A Tridiagonalmatrix in IR^{nxn}
12 % Output: T Matrix in IR^{nxn} - Inverse der Tridiagonalmatrix A, s.d.
16 n = size(A,1); % Dimension
17 d = diag(A); % Diagonalen auslesen
24 alpha(1) = 1; % Initialisieren
33 alpha(i+1) = d(i)*alpha(i)-b(i)*a(i-1)*alpha(i-1);
37 error(
'no inverse exists')
44 beta(i) = d(i)*beta(i+1)-b(i+1)*a(i)*beta(i+2);
47 if (min(abs(alpha))==0 | min(abs(beta))==0)
51 % Bestimmung der Werte auf der Diagonalen
52 t11 = d(1)-(b(2)*a(1)*beta(3))/beta(2);
55 tnn = d(n)-(b(n)*a(n-1)*alpha(n-1))/alpha(n);
59 tii = d(i)-(b(i)*a(i-1)*alpha(i-1))/alpha(i)-(b(i+1)*a(i)*beta(i+2))/beta(i+1);
64 % Berechnung der restlichen Eintraege
65 % fuer j>i (obere Dreiecksmatrix)
72 T(i,j) = (-1)^(j-i)*c1*alpha(i)/alpha(j)*T(j,j);
76 % fuer i>j (untere Dreiecksmatrix)
83 T(i,j) = (-1)^(i-j)*c2*beta(i+1)/beta(j+1)*T(j,j);