-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdecomposeEigenvectors.m
40 lines (31 loc) · 1.01 KB
/
decomposeEigenvectors.m
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
function coeffs = decomposeEigenvectors(eigenvectors, data)
% decomposeEigenvectors.m
%
% Decompose eigenvectors and calculate coefficients of contribution of each
% vector
%
% Inputs: eigenvectors : eigenvectors [MxN]
% M = number of points, N = number of vectors
% data : surface vertex data [Mxdimensions]
% dimensions = number of dimensions
% Output: coeffs : coefficient values [Nxdimensions]
%
% Original: James Pang, Monash University, 2021
%%
[M, N] = size(eigenvectors);
[dim1, dim2] = size(data);
if dim1<dim2 && dim1<=3
dimensions = dim1;
data = data';
elseif dim2<dim1 && dim2<=3
dimensions = dim2;
end
coeffs = zeros(N, dimensions);
PSI = eigenvectors;
for dim = 1:dimensions
coeffs(:,dim) = (PSI.'*PSI)\(PSI.'*data(:,dim));
end
end
% coefsx_l=decomposeEigenFunction(eigvecs.lh, vertex.lh(1,:)');
% coefsy_l=decomposeEigenFunction(eigvecs.lh, vertex.lh(2,:)');
% coefsz_l=decomposeEigenFunction(eigvecs.lh, vertex.lh(3,:)');