-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathorzFisherSM.m
More file actions
44 lines (37 loc) · 1.02 KB
/
orzFisherSM.m
File metadata and controls
44 lines (37 loc) · 1.02 KB
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
function [B C V1 D1 ] = orzFisherSM(X1,nSubDim1,nAlpha)
[nDim nNum,nClass] = size(X1);
[V1,D1] = orzBasisVector(X1,nSubDim1);
P = zeros(nDim,nDim,nClass);
for iClass = 1:nClass
P(:,:,iClass) = eye(nDim) - V1(:,:,iClass)*V1(:,:,iClass)';
end
SB = zeros(nDim,nDim);
SW = zeros(nDim,nDim);
for iClass1 = 1:nClass
for iClass2 = 1:nClass
if iClass2 ~= iClass1;
Y = P(:,:,iClass1)*X1(:,:,iClass2);
SB = SB + Y*Y'/size(Y,2);
else
Y = P(:,:,iClass1)*X1(:,:,iClass2);
SW = SW + Y*Y'/size(Y,2);
end
end
end
A = (SW+nAlpha*eye(nDim))\SB;
[BB CC] = eig(A);
[C ind] = sort(diag(CC),'descend');
B=BB(:,ind);
%B = cvtGramSchmidt(BB);
% C=zeros(nDim,1);
% B=zeros(nDim,nDim);
% [B(:,1) C(1)] = eigs(A,1);
% for iDim=2:nDim
% D=orth(eye(nDim) - (B(:,1:iDim-1)*B(:,1:iDim-1)'));
% SWd = D'*SW*D;
% SBd = D'*SB*D;
% Ad = SWd\SBd;
% [tB tC] = eigs(Ad,1);
% B(:,iDim) = D*tB;
% C(iDim) = tC;
% end