je voulais appliquer hotelling TRANSFORMATIONS aux vecteurs de donner et de faire pratiquer mon auto, que pourquoi je l'ai écrit le code suivant dans Matlabtransformation Hotteling il ne donne pas résultat désiré
function [Y covariance_matrix]=hotteling_trasform(X)
% this function take X1,X2,X3,,Xn as a matrix and apply hottleing
%transformation to get new set of vectors y1, y2,..ym so that covariance
%matrix of matrix consiist by yi vectors are almost diagonal
%% determine size of given matrix
[m n]=size(X);
%% compute mean of columns of given matrix
means=mean(X);
%% substract mean from given matrix
centered=X-repmat(means,m,1);
%% calculate covariance matrix
covariance=(centered'*centered)/(m-1);
%% Apply eigenvector decomposition
[V,D]=eig(covariance);
%% determine dimension of V
[m1 n1]=size(V);
%% arrange matrix so that eigenvectors are as rows,create matrix with size n1 m1
A1=zeros(n1,m1);
for ii=1:n1
A1(ii,:)=V(:,ii);
end
%% applying hoteling transformation
Y=A1*centered; %% because centered matrix is original -means
%% calculate covariance matrix
covariance_matrix=cov(Y);
alors je l'ai testé à la étant donné la matrice
A
A =
4 6 10
3 10 13
-2 -6 -8
et après l'exécution de code
[Y covariance_matrix]=hotteling_trasform(A);
covariance_matrix
covariance_matrix =
8.9281 22.6780 31.6061
22.6780 66.5189 89.1969
31.6061 89.1969 120.8030
certainement ce n'est pas une matrice diagonale, alors qu'est-ce qui ne va pas? merci à l'avance
Où avez-vous trouvé l'algorithme que vous avez implémenté? Ceux que je connais ont l'air assez différents. (Aussi dans la boucle 'for ii = 1: n1' vous calculez simplement la transposée de' V', qui n'est autre que 'V'') – flawr
pourriez-vous me dire la forme exacte de l'algorithme? à propos de transposer à droite je viens de compliqué: D –
Eh bien jusqu'à présent, je n'étais conscient de l'utilisation de la décomposition de la valeur singulière, qui est probablement un peu plus stable. – flawr