Skip to content

Commit ae83d0c

Browse files
First_Version
Lanczos Algorithm
1 parent 3afa7d4 commit ae83d0c

File tree

8 files changed

+132362
-0
lines changed

8 files changed

+132362
-0
lines changed

Lanczos.asv

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
function [T] = Lanczos(A,n);
2+
%Lancozs Algorithm to find Eigenvalue spectra
3+
%Inputs :A hermitian matrix of the order n
4+
% :n order of the matrix
5+
6+
T = zeros(n);
7+
8+
v = rand(n,1); %Random vector
9+
v1 = v/norm(v); %
10+
11+
t = A*v1;
12+
alpha = v1'*t;
13+
t = t - v1*alpha;
14+
15+
T(1,1) = alpha;
16+
17+
for j = 2:n,
18+
19+
beta = norm(t);
20+
v0 = v1; v1 = t/beta;
21+
22+
t = A*v1 - v0*beta;
23+
alpha = v1'*t;
24+
t = t - v1*alpha;
25+
26+
T(j,j-1) = beta; T(j-1,j) = beta; T(j,j) = alpha;
27+
28+
29+
end
30+
T
31+
eig(T)
32+
end

Lanczos.m

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
%Lancozs Algorithm to find Eigenvalue spectra
2+
%Inputs :A matrix of the order n
3+
% :n order of the matrix
4+
%Author:Jishnu Rajendran
5+
%As a part of semester project
6+
%
7+
8+
9+
function [T,V,u] = Lanczos(A,n)
10+
11+
T = zeros(n); %Initailising the T matrix with all
12+
%All entries 0
13+
V = zeros(n,n);
14+
% if abs(norm(u)-1)<0.001
15+
% w1=u;
16+
%else
17+
w1 = rand(n,1); %Generating Random vector of norm 1
18+
w1 = w1/norm(w1); %
19+
u=w1;
20+
21+
22+
t = A*w1;
23+
alpha = w1'*t;
24+
t = t - w1*alpha;
25+
26+
V(:,1) = w1;
27+
T(1,1) = alpha;
28+
29+
for j = 2:n,
30+
31+
beta = norm(t);
32+
w0 = w1; w1 = t/beta;
33+
34+
t = A*w1 - w0*beta;
35+
alpha = w1'*t;
36+
t = t - w1*alpha;
37+
38+
T(j,j-1) = beta;
39+
T(j-1,j) = beta;
40+
T(j,j) = alpha;
41+
V(:,j) = w1;
42+
[X,~]=eig(T);
43+
if(abs(X(j,n))<0.000001)
44+
break
45+
end
46+
47+
end
48+
49+
end

inp.asv

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
%A=load('input.txt');
2+
%A=[2 0 1;
3+
% 0 3 0;
4+
% 1 0 2;];
5+
%A = rand(5,5);
6+
%A=rherm(5)
7+
A
8+
eig(A)
9+
[n,n]=size(A);
10+
11+
Lanczos(A,n);
12+
13+
14+
15+

inp.m

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
sHH=load('sparse_ham_sz_2.txt');
2+
%H = diag(ones(20, 1),0) + 0.5*diag(ones(19,1), 1) + 0.5*diag(ones(19,1), -1);
3+
%H(20,1)=1;H(1,20)=1;
4+
%D=[2 0 1; 0 3 0; 1 0 2;];
5+
%u =[0.171799151874028; 0.751483050929023; 0.636991582033681;];
6+
7+
A=spconvert(H);
8+
%save('A_mat.txt','A');
9+
issparse(A)
10+
g=eig(A);
11+
disp(g);
12+
[~,n]=size(A);
13+
[S,D]=eigs(A); %S is the matrix with the eigenvectors as column
14+
S;
15+
[T,V,u]=Lanczos(A,n);
16+
T;
17+
V;
18+
k=eig(T);
19+
disp(k);
20+
[X,Z]=eig(T); % X is the matrix with the eigenvectors as column
21+
X;
22+
B=eig(T)-eig(A);
23+
disp(B);
24+
disp([g,k]);
25+
disp(u);
26+

input.txt

Whitespace-only changes.

rherm.m

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
function [ A ] = rherm(n)
2+
% Generate a hermitian matrix with random values.
3+
% rherm(n) returns a random hermitian matrix of size n*n
4+
if exist('n')~=1, n=2; end
5+
A = [zeros(1,0),(2*rand(1,1)-1),(2*rand(1,n-1)-1)+(2*rand(1,n-1)-1)*1i;zeros(n-1,n)];
6+
for i=1:n-1, A = A + [zeros(n-i,n);zeros(1,n-i),(2*rand(1,1)-1),(2*rand(1,i-1)-1)+(2*rand(1,i-1)-1)*1i;zeros(i-1,n)];end
7+
for i=1:n-1, for j=1:n-i, A = A + [zeros(n-i,n);zeros(1,j-1),conj(A(j,n-i+1)),zeros(1,n-j);zeros(i-1,n)];end;end
8+
end

sparse_ham_sz_2.txt

Lines changed: 132132 additions & 0 deletions
Large diffs are not rendered by default.

test_mat.txt

Lines changed: 100 additions & 0 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)