pcac++.txt
- 文档编号:8775696
- 上传时间:2023-05-14
- 格式:TXT
- 页数:11
- 大小:10.86KB
pcac++.txt
《pcac++.txt》由会员分享,可在线阅读,更多相关《pcac++.txt(11页珍藏版)》请在冰点文库上搜索。
pca.h
typedefstructsourcedata//������һ��ԭʼ���ݽṹ��
{
intm;
intn;
double**data;
}SourceData;
classPCA
{
public:
PCA(intm,intn);//m������n����
SourceDatagetdata(constchar*file);//��ȡ�ⲿ����
//double**getdata(constchar*file,int&m,int&n)
voidstandarddata(double**a);//���ݱ���
doubleproduct(double*a,double*b);//�����˻�
voidswap(double&x,double&y);//���ݽ���
double**matrixproduct(double**a);//����������
voidselectionsort(double*A,double**v);//����ֵ����
voidzhengjiao(double**v);//����������
intjcb(double**a,double**v,doubleeps,intjt); //�������ֵ����������
intselectcharactor(double*A,doublegetratio,double*B);//��ȡ������
double**getProject(intt,double**x,double**v);//����ͶӰ
voidsaveProject(constchar*projectfile,double**project,intt);//����ͶӰ
~PCA(){}
private:
introws;
intcolumns;
};
SourceDataPCA:
:
getdata(constchar*file)
{
SourceDatadat;
ifstreamtestdata;
inti,j;
testdata.open(file);
if(!
testdata)
{
cout<<"cannotopen"< } testdata>>dat.m; testdata>>dat.n; dat.data=newdouble*[dat.m]; for(i=0;i dat.data[i]=newdouble[dat.n]; for(i=0;i for(j=0;j testdata>>dat.data[i][j]; returndat; testdata.close(); } /*double**PCA: : getdata(constchar*file,int&m,int&n) { ifstreamtestdata; inti,j; double**data; testdata.open(file); if(! testdata) { cout<<"cannotopen"< } testdata>>m;//��ȡ���� testdata>>n;//��ȡ���� data=newdouble*[m]; for(i=0;i data[i]=newdouble[n]; for(i=0;i for(j=0;j testdata>>data[i][j]; //��ȡ���� returndata; testdata.close(); }*/ PCA: : PCA(intm,intn)//���캯�� { columns=n; rows=m; } voidPCA: : standarddata(double**a)//���ݱ��� { doubles,ss; inti; for(i=0;i { s=0; for(intj=0;j s+=a[j][i]; s=s/rows; ss=0; for(j=0;j ss+=(a[j][i]-s)*(a[j][i]-s); ss=ss/(rows-1); for(j=0;j a[j][i]=(a[j][i]-s)/sqrt(ss); } } doublePCA: : product(double*a,double*b)//�����˻� { doublesum=0; for(inti=0;i sum+=a[i]*b[i]; returnsum; } double**PCA: : matrixproduct(double**a)//���Э������� { inti,j,k; double**c; c=newdouble*[columns]; for(i=0;i c[i]=newdouble[columns]; for(i=0;i for(j=0;j { c[i][j]=0; for(k=0;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; inti; xx=newdouble[columns]; yy=newdouble[columns]; b=newdouble*[columns]; for(i=0;i b[i]=newdouble[columns]; for(i=0;i b[i][0]=v[i][0]; for(intj=1;j for(i=0;i { for(intk=0;k { for(intt=0;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]; } } for(i=0;i { for(intj=0;j xx[j]=b[j][i]; yy[i]=sqrt(product(xx,xx)); } for(i=0;i for(j=0;j v[i][j]=b[i][j]/yy[j]; delete[]xx; delete[]yy; for(i=0;i delete[columns]b[i]; delete[rows]b; } voidPCA: : swap(double&x,double&y)//���ݽ��� { doubled; d=x; x=y; y=d; } voidPCA: : selectionsort(double*A,double**v)//����ֵ�Ͷ�Ӧ��������������ѡ������ { intmaxindex; inti,j; for(i=0;i { maxindex=i;//���Ԫ�ص��±���Ϊi for(j=i+1;j if(A[j]>A[maxindex]) maxindex=j; swap(A[i],A[maxindex]); for(intk=0;k 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; for(i=0;i<=columns-1;i++)//��ֵv=I { v[i][i]=1.0; for(j=0;j<=columns-1;j++) if(i! =j)v[i][j]=0; } while(true) { fm=0.0; for(i=0;i<=columns-1;i++) for(j=0;j<=i-1;j++) { d=fabs(a[i][j]); if((i! =j)&&(d>fm))//ȡ����a[p][q] { fm=d;p=i;q=j;} } if(fm { 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]; for(j=0;j<=columns-1;j++) 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; } for(i=0;i<=columns-1;i++) if((i! =p)&&(i! =q)) { fm=a[i][p]; a[i][p]=fm*cn+a[i][q]*sn; a[i][q]=-fm*sn+a[i][q]*cn; } for(i=0;i<=columns-1;i++) { fm=v[i][p]; v[i][p]=fm*cn+v[i][q]*sn; v[i][q]=-fm*sn+v[i][q]*cn; } } } intPCA: : selectcharactor(double*A,doublegetratio,double*B)//����ֵ����ȡ�� { doubles=0; for(inti=0;i s=s+A[i]; B[0]=A[0]/s; for(i=1;i B[i]=B[i-1]+A[i]/s;//����ֵ���ۼƹ����� if(getratio>1||getratio<0) return-1; for(i=0;i { if(B[i]>=getratio) { returni+1; break; } } if(B[columns-1] return-1; } double**PCA: : getProject(intt,double**x,double**v)//��ȡ����ͶӰ { double**C; C=newdouble*[rows]; for(inti=0;i C[i]=newdouble[t]; for(i=0;i for(intj=0;j C[i][j]=0; for(i=0;i { for(intj=0;j for(intk=0;k C[i][j]+=x[i][k]*v[k][j]; } returnC; for(i=0;i delete[t]C[i]; delete[rows]C; } voidPCA: : saveProject(constchar*projectfile,double**project,intt) { FILE*Ptr; Ptr=fopen(projectfile,"w"); if(Ptr==NULL) cout<<"error"< else { for(inti=0;i { for(intj=0;j fprintf(Ptr,"%12.8f%s",project[i][j],""); fprintf(Ptr,"\n"); } } fclose(Ptr); } ///pca.cpp #include #include #include #include #include #include #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<<"���ݵ�����Ϊ"< A=newdouble[n]; B=newdouble[n]; v=newdouble*[n]; for(i=0;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);//��ȡ����ֵ cout<<"�������ȡ������ֵ����Ӧ����������"< for(i=0;i<=t-1;i++) printf("%13.7e",A[i]); printf("\n\n"); for(i=0;i { for(j=0;j printf("%13.7e",v[i][j]); printf("\n"); } cout<<"����ֵ���ۼƹ�������"< for(i=0;i cout< cout< cout<<"����ȡЧ����"< if(t>=1&&t<=n) Project=testpca.getProject(t,x,v);//����ͶӰ else cout<<"error"< testpca.saveProject(projectfile,Project,t);//�������ݵ��ļ� } #include #include #include #include #include #include #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<<"���ݵ�����Ϊ"< A=newdouble[n]; B=newdouble[n]; v=newdouble*[n]; for(i=0;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);//��ȡ����ֵ cout<<"�������ȡ������ֵ����Ӧ����������"< for(i=0;i<=t-1;i++) printf("%13.7e",A[i]); printf("\n\n"); for(i=0;i { for(j=0;j printf("%13.7e",v[i][j]); printf("\n"); } cout<<"����ֵ���ۼƹ�������"< for(i=0;i cout< cout< cout<<"����ȡЧ����"< if(t>=1&&t<=n) Project=testpca.getProject(t,x,v);//����ͶӰ else cout<<"error"< testpca.saveProject(projectfile,Project,t);//�������ݵ��ļ� }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- pcac