pcac++.txt资料文档下载
《pcac++.txt资料文档下载》由会员分享,可在线阅读,更多相关《pcac++.txt资料文档下载(8页珍藏版)》请在冰豆网上搜索。
};
SourceDataPCA:
:
getdata(constchar*file)
SourceDatadat;
ifstreamtestdata;
inti,j;
testdata.open(file);
if(!
testdata)
cout<
<
"
cannotopen"
endl;
}
testdata>
>
dat.m;
dat.n;
dat.data=newdouble*[dat.m];
for(i=0;
i<
i++)
dat.data[i]=newdouble[dat.n];
for(j=0;
j<
j++)
testdata>
dat.data[i][j];
returndat;
testdata.close();
}
/*double**PCA:
getdata(constchar*file,int&
double**data;
m;
//��ȡ����
n;
//��ȡ����
data=newdouble*[m];
data[i]=newdouble[n];
data[i][j];
//��ȡ����
returndata;
}*/
PCA:
PCA(intm,intn)//���캯��
columns=n;
rows=m;
voidPCA:
standarddata(double**a)//���ݱ���
doubles,ss;
inti;
for(i=0;
columns;
{
s=0;
for(intj=0;
rows;
j++)
s+=a[j][i];
s=s/rows;
ss=0;
for(j=0;
ss+=(a[j][i]-s)*(a[j][i]-s);
ss=ss/(rows-1);
a[j][i]=(a[j][i]-s)/sqrt(ss);
doublePCA:
product(double*a,double*b)//�����˻�
doublesum=0;
for(inti=0;
sum+=a[i]*b[i];
returnsum;
double**PCA:
matrixproduct(double**a)//����������
inti,j,k;
double**c;
c=newdouble*[columns];
c[i]=newdouble[columns];
{
c[i][j]=0;
for(k=0;
k<
k++)
c[i][j]+=a[k][i]*a[k][j];
c[i][j]/=(rows-1);
}
returnc;
for(i=0;
i++)
delete[columns]c[i];
delete[columns]c;
voidPCA:
zhengjiao(double**v)//����������
double**b;
double*xx,*yy;
xx=newdouble[columns];
yy=newdouble[columns];
b=newdouble*[columns];
b[i]=newdouble[columns];
b[i][0]=v[i][0];
for(intj=1;
for(i=0;
for(intk=0;
j;
{
for(intt=0;
t<
t++)
{
xx[t]=b[t][k];
yy[t]=v[t][j];
}
b[i][j]=v[i][j]-(product(xx,yy)/product(xx,xx))*b[i][k];
}
}
xx[j]=b[j][i];
yy[i]=sqrt(product(xx,xx));
v[i][j]=b[i][j]/yy[j];
delete[]xx;
delete[]yy;
delete[columns]b[i];
delete[rows]b;
swap(double&
y)//���ݽ���
doubled;
d=x;
x=y;
y=d;
selectionsort(double*A,double**v)//����ֵ�Ͷ�Ӧ��������������ѡ������
intmaxindex;
columns-1;
maxindex=i;
//���Ԫ�ص��±
���Ϊi
for(j=i+1;
if(A[j]>
A[maxindex])
maxindex=j;
swap(A[i],A[maxindex]);
for(intk=0;
swap(v[k][i],v[k][maxindex]);
//��Ӧ�������������н���
intPCA:
jcb(double**a,double**v,doubleeps,intjt)
//jacobi��ʵ�Գƾ��������ֵ����������
inti,j,p,q,l;
doublefm,cn,sn,omega,x,y,d;
l=1;
=columns-1;
i++)//��ֵv=I
v[i][i]=1.0;
if(i!
=j)v[i][j]=0;
while(true)
fm=0.0;
for(j=0;
=i-1;
d=fabs(a[i][j]);
if((i!
=j)&
&
(d>
fm))//ȡ����a[p][q]
fm=d;
p=i;
q=j;
if(fm<
eps)//����ﵽ�����ľ�������ѭ��
{
return
(1);
break;
if(l>
jt)//����������
return(-1);
break;
}
l=l+1;
//��¼
��������
x=-a[p][q];
y=(a[q][q]-a[p][p])/2.0;
omega=x/sqrt(x*x+y*y);
if(y<
0.0)omega=-omega;
sn=1.0+sqrt(1.0-omega*omega);
sn=omega/sqrt(2.0*sn);
//����
cn=sqrt(1.0-sn*sn);
fm=a[p][p];
a[p][p]=fm*cn*cn+a[q][q]*sn*sn+a[p][q]*omega;
a[q][q]=fm*sn*sn+a[q][q]*cn*cn-a[p][q]*omega;
a[p][q]=y*omega+a[p][q]*(2*cn*cn-1);
a[q][p]=a[p][q];
if((j!
=p)&
(j!
=q))
{
fm=a[p][j];
a[p][j]=fm*cn+a[q][j]*sn;
a[q][j]=-fm*sn+a[q][j]*cn;
if((i!
(i!
fm=a[i][p];
a[i][p]=fm*cn+a[i][q]*sn;
a[i][q]=-fm*sn+a[i][q]*cn;
fm=v[i][p];
v[i][p]=fm*cn+v[i][q]*sn;
v[i][q]=-fm*sn+v[i][q]*cn;
selectcharactor(double*A,doublegetratio,double*B)//����ֵ����ȡ��
doubles=0;
s=s+A[i];
B[0]=A[0]/s;
for(i=1;
B[i]=B[i-1]+A[i]/s;
//����ֵ���ۼƹ�����
if(getratio>
1||getratio<
0)
return-1;
if(B[i]>
=getratio)
returni+1;
break;
if(B[columns-1]<
getratio)
getProject(intt,double**x,double**v)//��ȡ����ͶӰ
double**C;
C=newdouble*[rows];
C[i]=newdouble[t];
t;
C[i][j]=0;
C[i][j]+=x[i][k]*v[k][j];
returnC;
delete[t]C[i];
delete[rows]C;
voidPCA:
saveProject(constchar*projectfile,double**project,intt)
FILE*Ptr;
Ptr=fopen(projectfile,"
w"
);
if(Ptr==NULL)
error"
else
for(inti=0;
for(intj=0;
fprintf(Ptr,"
%12.8f%s"
project[i][j],"
"
fprintf(Ptr,"
\n"
fclose(Ptr);
///pca.cpp
#include<
math.h>
fstream.h>
iostream.h>
stdio.h>
iomanip.h>
#include"
pca.h"
voidmain()
{
inti,j,t;
intm,n;
double**x,**c,**v,**Project;
double*A,*B;
sourcedatapp;
doubleeps=0.000001;
//jacobi��������ֹ����
doublegetratio=0.9;
//����ֵ����ȡ��
constchar*File="
test.txt"
;
//ԭʼ�����ļ�����
constchar*projectfile="
pcaproject.txt"
//�����������ļ�����
PCApca(2,3);
//����һ����ʱ������ó
�Ա��������ȡ����
pp=pca.getdata(File);
//��ȡ�ⲿ����
x=pp.data;
m=pp.m;
n=pp.n;
//x=pca.getdata(File,m,n);
cout<
���ݵ�����Ϊ"
m<
�����ݵ�����Ϊ"
n<
A=newdouble[n];
B=newdouble[n];
v=newdouble*[n];
i++)
v[i]=newdouble[n];
PCAtestpca(m,n);
//����һ�����
�ʼ��
testpca.standarddata(x);
//�����ݽ��б�������
c=testpca.matrixproduct(x);
//��ȡЭ�������
i=testpca.jcb(c,v,eps,100);
//��ȡ����ֵ����������
for(intk=0;
k++)
A[k]=c[k][k];
//��ȡ����ֵ
testpca.zhengjiao(v);
//��������������
testpca.selectionsort(A,v);
//����ֵ��������������
t=testpca.selectcharactor(A,getratio,B);
�������ȡ������ֵ����Ӧ����������"
=t-1;
printf("
%13.7e"
A[i]);
printf("
\n\n"
{
for(j=0;
j++)
printf("
v[i][j]);
printf("
}
����ֵ���ۼƹ�������"
cout<
B[i]<
����ȡЧ����"
getratio<
ʱ��ȡ��ǰ"
������"
if(t>
=1&
=n)
Project=testpca.getProject(t,x,v);
//����ͶӰ
else
testpca.saveProject(projectfile,Project,t);
//�������ݵ��ļ�
}
voidmain()
inti,j,t;
intm,n;
double**x,**c,**v,**Project;
double*A,*B;
sourcedatapp;
doubleeps=0.000001;
//jacobi��������ֹ����
doublegetratio=0.9;
//����ֵ����ȡ��
constchar*File="
//ԭʼ�����ļ�����
constchar*projectfile="
//�����������ļ�����
PCApca(2,3);
//����һ����ʱ������ó
�Ա��������ȡ����
pp=pca.getdata(File);
//��ȡ�ⲿ����
x=pp.data;
m=pp.m;
n=pp.n;
//x=pca.getdata(File,m,n);
cout<
A=newdouble[n];
B=newdouble[n];
v=newdouble*[n];
v[i]=newdouble[n];
PCAtestpca(m,n);
//����һ�����
�ʼ��
testpca.standarddata(x);
//�����ݽ��б�������
c=testpca.matrixproduct(x);
//��ȡЭ�������
i=testpca.jcb(c,v,eps,100);
//��ȡ����ֵ����������
for(intk=0;
A[k]=c[k][k];
//��ȡ����ֵ
testpca.zhengjiao(v);
//��������������
//����ֵ��������������
t=testpca.selectcharactor(A,getratio,B);
printf("
printf("
printf("
printf("
if(t>
=n)
Project=testpca.getProject(t,x,v);
//����ͶӰ
testpca.saveProject(projectfile,Project,t);
//�������ݵ��ļ�
}