pcac++.txt资料文档下载

上传人:b****3 文档编号:15495065 上传时间:2022-11-02 格式:TXT 页数:8 大小:10.86KB
下载 相关 举报
pcac++.txt资料文档下载_第1页
第1页 / 共8页
pcac++.txt资料文档下载_第2页
第2页 / 共8页
pcac++.txt资料文档下载_第3页
第3页 / 共8页
pcac++.txt资料文档下载_第4页
第4页 / 共8页
pcac++.txt资料文档下载_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

pcac++.txt资料文档下载

《pcac++.txt资料文档下载》由会员分享,可在线阅读,更多相关《pcac++.txt资料文档下载(8页珍藏版)》请在冰豆网上搜索。

pcac++.txt资料文档下载

};

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);

//�������ݵ��ļ�

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 自考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1