rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
INVERSE_TRIDIAG.m
1 function [T]=INVERSE_TRIDIAG(A)
2 %
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 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8 %
9 % function [T]=INVERSE_TRIDIAG(A)
10 %
11 % Input: A Tridiagonalmatrix in IR^{nxn}
12 % Output: T Matrix in IR^{nxn} - Inverse der Tridiagonalmatrix A, s.d.
13 % AT=Id
14 
15 
16 n = size(A,1); % Dimension
17 d = diag(A); % Diagonalen auslesen
18 a = diag(A,1);
19 b = [0 ;diag(A,-1)];
20 
21 alpha = zeros(1,n+1);
22 beta = zeros(1,n+1);
23 
24 alpha(1) = 1; % Initialisieren
25 alpha(2) = d(1);
26 beta(n+1) = 1;
27 beta(n) = d(n);
28 
29 T = zeros(n,n);
30 
31 % Berechnung alpha
32 for i=2:n
33  alpha(i+1) = d(i)*alpha(i)-b(i)*a(i-1)*alpha(i-1);
34 end
35 
36 if alpha(n+1)==0
37  error('no inverse exists')
38 end
39 
40 % Berechnung beta
41 beta(1) = alpha(n+1);
42 
43 for i=n-1:-1:2
44  beta(i) = d(i)*beta(i+1)-b(i+1)*a(i)*beta(i+2);
45 end
46 
47 if (min(abs(alpha))==0 | min(abs(beta))==0)
48  error('Failure')
49 end
50 
51 % Bestimmung der Werte auf der Diagonalen
52 t11 = d(1)-(b(2)*a(1)*beta(3))/beta(2);
53 T(1,1) = 1/t11;
54 
55 tnn = d(n)-(b(n)*a(n-1)*alpha(n-1))/alpha(n);
56 T(n,n) = 1/tnn;
57 
58 for i=2:n-1
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);
60  T(i,i) = 1/tii;
61 end
62 
63 
64 % Berechnung der restlichen Eintraege
65 % fuer j>i (obere Dreiecksmatrix)
66 for j=2:n
67  for i=1:j-1
68  c1 = 1;
69  for k=1:j-i
70  c1=c1*a(j-k);
71  end
72  T(i,j) = (-1)^(j-i)*c1*alpha(i)/alpha(j)*T(j,j);
73  end
74 end
75 
76 % fuer i>j (untere Dreiecksmatrix)
77 for i=2:n
78  for j=1:i-1
79  c2=1;
80  for k=1:i-j
81  c2=c2*b(j+k);
82  end
83  T(i,j) = (-1)^(i-j)*c2*beta(i+1)/beta(j+1)*T(j,j);
84  end
85 end