📄 pcadesign.m
字号:
function Wt=PCADesign(n,m,sampleset,eignum)
% PCADESIGN will return the PCA transformation matrix on the basis of
% sample set
% n denotes the dimension of the problem
% m is the number of samples
% sampleset represents the sample set,i.e.sampleset(i,j) denote the i-th
% component of the j-th sample
% eignum is the number of eigvectors that are required
% the function will write the transformation matrix into special file if
% the output argument is not demanded
if nargout>1
error('Too many output arguments.');
end
if nargin~=4
error('Wrong number of input arguments.');
end
[cn,cm]=size(sampleset);
if cm~=m | cn~=n
error('Wrong input data.');
end
%求解所有样本整体的平均值
average=zeros(n,1);
for j=1:m
average=average+sampleset(:,j);
end
average=average/m;
%中心化以后得到的图象
for j=1:m
sampleset(:,j)=sampleset(:,j)-average;
end
%构造St矩阵的相关阵
c=sampleset'*sampleset;
c=c/m;
%求解St的所有特征值和特征向量并按照从大到小的的顺序排序
[v,d]=eig(c);
for j=1:(m-1)
k=j;
for i=(j+1):m
if d(i,i)>d(k,k)
k=i;
end
end
if k~=j
temp1=d(j,j);
d(j,j)=d(k,k);
d(k,k)=temp1;
temp=v(:,j);
v(:,j)=v(:,k);
v(:,k)=temp;
end
end
%确保不会取到为零的特征值
default=rank(sampleset);
if eignum>default
eignum=default;
end
%求解St矩阵的前eignum个特征向量并归一化组成变换矩阵Wt
Wt1=zeros(eignum,n);
for j=1:eignum
Wt1(j,:)=(sampleset*v(:,j))'/sqrt(m*d(j,j));
end
%如果没有指定输出参数就将变换矩阵写入文件
if nargout==1
Wt=Wt1;
else
fid=fopen('pcawt','w');
count=fwrite(fid,eignum,'short');
count=fwrite(fid,Wt1,'float');
if count~=eignum*n
error('file write error');
end
fclose(fid);
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -