-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLinearLeastSquareHH.m
More file actions
45 lines (44 loc) · 874 Bytes
/
LinearLeastSquareHH.m
File metadata and controls
45 lines (44 loc) · 874 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
function x = LinearLeastSquareHH(A,b)
a = A(:,1);
[rowf,colf] = size(A);
[row,col] = size(a);
if(a(1,1) > 0)
alpha = -norm(a,2);
else
alpha = norm(a,2);
end
I = eye(row);
e1 = I(:,1);
v = a - alpha*e1;
vt = transpose(v);
H1 = I - 2*((v*vt)/(vt*v));
H1A = H1*A;
A1 = H1A(2:end,2:end);
c = H1*b;
R = H1A;
for i=2:colf
a = A1(:,1);
[rowin,colin] = size(a);
if(a(1,1) > 0)
alpha = -norm(a,2);
else
alpha = norm(a,2);
end
I = eye(rowin);
e1 = I(:,1);
v = a - alpha*e1;
vt = transpose(v);
Hkd = I - 2*((v*vt)/(vt*v));
Ik = eye(i-1);
HkdA = Hkd*A1;
[rowk,colk] = size(Hkd);
zr = zeros(i-1,colk);
zc = zeros(rowk,i-1);
Hk = [Ik,zr;zc,Hkd];
c = Hk*c;
R = Hk*R;
A1 = HkdA(2:end,2:end);
end
R1 = R(1:colf,:);
c1 = c(1:colf,:);
x = R1\c1;