亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sparsesvd_partialeig.c

?? 關于有直接稀疏PCA的方法
?? C
字號:
/* Finds a sparse rank-one approximation to a given symmetric matrix A, by solving the SDP						   min_X lambda_max(A+X) : X = X', abs(X(i,j)) <= rho, 1<=i,j<= nand its dual:						   max_U Tr(UA) - rho sum_ij |U_ij| : U=U', U \succeq 0, Tr(U)=1***	inputs: ***A			nxn symmetric matrix (left unchanged)n			problem sizerho			non-negative scalar gapchange	required change in gap from first gap (default: 1e-4) MaxIter		maximum number of iterationsinfo		controls verbosity: 0 silent, n>0 frequency of progress reportWarmStart	0 if cold start, k0 if WarmStart (total number of iterations in previous run)F			Average gradient (for warm start, Fmat is updated)***	outputs: ***X			solves the primal SDP U			dual variable, solves the dual SDP u			largest eigenvector of U F			Average gradientThis code implements Nesterov's smooth minimization algorithm. See: Y. Nesterov "Smooth Minimization of NonSmooth Functions."Here, the gradient is only only computed aproximately. See A. d'Aspremont "Smooth optimization with approximate gradient."Last Modified: A. d'Aspremont, Laurent El Ghaoui, Ronny Luss November 2007.http://www.carva.org/alexandre.daspremont*/#include "sparsesvd.h"void sparse_rank_one_partialeig(double *Amat, int n, double rho, double gapchange, int MaxIter, double *Xmat, double *Umat, double *uvec, double *Fmat, double *iter, int info, int numeigs, int addeigs, int checkgap, double perceigs, int check_for_more_eigs, double *dualitygap_alliter, double *cputime_alliter, double *perceigs_alliter){	// Hard parameters	int Nperiod=imaxf(1,info);	int work_size=3*n+n*n;	// Working variables	double d1,sig1,d2,sig2,norma12,mu,Ntheo,L;	double alpha,gapk,dmax=0.0,fmu,lambda;	int n2=n*n,incx=1,precision_flag=0,iteration_flag=0;	int lwork=work_size,inflapack,indmax,k=0,i,j;	double cputime,last_time=(double)clock();double start_time=(double)clock();int left_h=0,left_m=0,left_s=0;	char jobz[1]="V",uplo[1]="U";	double *Vmat=(double *) calloc(n*n,sizeof(double));	double *bufmata=(double *) calloc(n*n,sizeof(double));	double *bufmatb=(double *) calloc(n*n,sizeof(double));	double *Dvec=(double *) calloc(n,sizeof(double));	double *workvec=(double *) calloc(work_size,sizeof(double));	double *gvec=(double *) calloc(n,sizeof(double));	double *hvec=(double *) calloc(n,sizeof(double));	int work_size3=8*n;	double *workvec2=(double *) calloc(work_size3,sizeof(double));	int *iwork=(int *) calloc(5*n,sizeof(int));	double *numeigs_matlab=(double *) calloc(1,sizeof(double));	double *evector_store=(double *) calloc(n*n,sizeof(double));	double *evector_temp=(double *) calloc(n*n,sizeof(double)); // TODO: one of these matrices can go.	double *eig=(double *) calloc(n,sizeof(double));	double eigcut,tolweight=.75,tol=.01,numeigstemp=numeigs;	int *count=(int *) calloc(n,sizeof(int)); // Records the distribution of eig computations	int checkgap_count=0,firstiter=0; // added for test variables	int arcount;	// Start...	if (info>=1){mexPrintf("DSPCA starting... Sparse eig. maximization using approximate gradient.\n");mexEvalString("drawnow;");}	// Test malloc results	if ((Fmat==NULL) || (Vmat==NULL) || (bufmata==NULL) || (bufmatb==NULL)|| (Dvec==NULL) || (workvec==NULL) || (gvec==NULL) || (hvec==NULL) ||(evector_temp==NULL)||(evector_store==NULL)||(iwork==NULL)||(workvec2==NULL)||(numeigs_matlab==NULL)||(eig==NULL)){		mexPrintf("DSPCA: memory allocation failed ... \n");mexEvalString("drawnow;");return;}	eigcut=(1-tolweight)*(tol/10)/(rho*n); // scale delta (tol/10) to get eig threshold	tol=tolweight*tol; // scale of .5 for partial eig precision	// First, compute some local params	norma12=1.0;d1=rho*rho*n*n/2.0;sig1=1.0;d2=log(n);sig2=0.5;mu=tol/(2.0*d2); // TODO: can we get a less conservative d1?	Ntheo=(4.0*norma12*sqrt(d1*d2/(sig1*sig2)))/tol;Ntheo=ceil(Ntheo);	L=(d2*norma12*norma12)/(2.0*sig2*tol);	alpha=0.0;cblas_dscal(n2,alpha,Xmat,incx);	cputime=start_time;	while ((precision_flag+iteration_flag)==0){				// eigenvalue decomposition of A+X 		cblas_dcopy(n2,Xmat,incx,Vmat,incx);		alpha=1.0; 		cblas_daxpy(n2,alpha,Amat,incx,Vmat,incx);		cblas_dcopy(n2,Vmat,incx,bufmata,incx);				// do partial eigenvalue approximation to exp(A+X)		*numeigs_matlab=1.0*numeigs;*count=0;arcount=0;		fmu=partial_eig(n,k,mu,eigcut,bufmata,bufmatb,numeigs_matlab,evector_temp,evector_store,eig,Dvec,gvec,hvec,Vmat,Umat,workvec,count,addeigs,perceigs,check_for_more_eigs,&arcount); 		numeigs=(int)(*numeigs_matlab);dmax=bufmata[0];		// update gradient's weighted average 		alpha=((double)(k)+1)/2.0;		cblas_daxpy(n2,alpha,Umat,incx,Fmat,incx);		// find a projection of X-Gmu/L on feasible set 		cblas_dcopy(n2,Xmat,incx,bufmata,incx);		alpha=-1.0/L;		cblas_daxpy(n2,alpha,Umat,incx,bufmata,incx);		// project again		alpha=-(sig1/L);		cblas_dcopy(n2,Fmat,incx,bufmatb,incx);		cblas_dscal(n2,alpha,bufmatb,incx);		// update X		lambda=2.0/((double)(k)+3.0);		for (j=0;j<n;j++){			for (i=0;i<n;i++){				Xmat[j*n+i]=lambda*dsignf(bufmatb[j*n+i])*dminif(rho,dabsf(bufmatb[j*n+i]))+(1-lambda)*dsignf(bufmata[j*n+i])*dminif(rho,dabsf(bufmata[j*n+i]));}}		// check convergence and gap periodically		cputime=((double)clock()-start_time)/CLOCKS_PER_SEC;		if ((k%checkgap==0)||(k%Nperiod==0)||(((double)(clock())/CLOCKS_PER_SEC-last_time)>=900)){			gapk=dmax-doubdot(Amat,Umat,n2)+rho*doubasum(Umat,n2);			if (firstiter==1) {dualitygap_alliter[checkgap_count]=gapk;cputime_alliter[checkgap_count]=cputime;perceigs_alliter[checkgap_count]=100.0*numeigs/n;checkgap_count++;}			if (firstiter==0){// If first iteration, reset precision targets				tol=gapk*gapchange;norma12=1.0;d1=rho*rho*n*n/2.0;sig1=1.0;d2=log(n);sig2=0.5;mu=tol/(2.0*d2);				L=(d2*norma12*norma12)/(2.0*sig2*tol);eigcut=(1-tolweight)*(tol/10)/(rho*n);				alpha=0.0;cblas_dscal(n2,alpha,Xmat,incx);cblas_dscal(n2,alpha,Fmat,incx);numeigs=numeigstemp;}					last_time=(double)(clock())/CLOCKS_PER_SEC;			if (gapk<=tol) precision_flag=1;			if (k>=MaxIter) iteration_flag=1;			// report iteration, gap and time left			if (((info>=1)&&(k%Nperiod==0)&&(firstiter==1))||(precision_flag+iteration_flag>0)){				left_h=(int)floor(cputime/3600);left_m=(int)floor(cputime/60-left_h*60);left_s=(int)floor(cputime-left_h*3600-left_m*60);				mexPrintf("Iter.: %.3e   Obj: %.4e    Gap: %.4e   CPU Time: %2dh %2dm %2ds	 %% Eigs Used: %.2f\n",(double)(k),dmax,gapk,left_h,left_m,left_s,100.0*numeigs/n);				mexEvalString("drawnow;");}			if (firstiter==0) {firstiter=1;k--;}}		k++;}	// set dual variable and output vector	// eigenvalue decomposition of A+X 	alpha=0.0;cblas_dscal(n2,alpha,Vmat,incx);	cblas_dcopy(n2,Umat,incx,Vmat,incx);	dsyev(jobz,uplo,&n,Vmat,&n,Dvec,workvec,&lwork,&inflapack); // TODO: switch to ARPACK here...	indmax=idxmax(Dvec,n);dmax=Dvec[indmax]; 	for (i=0;i<n;i++) {uvec[i]=Vmat[(indmax)*n+i];}	*iter=k; // return total number of iterations	// Free everything	free(Vmat);	free(bufmata);	free(bufmatb);	free(Dvec);	free(workvec);	free(workvec2);	free(gvec);	free(hvec);	free(iwork);	free(numeigs_matlab);	free(evector_store);	free(evector_temp);	free(eig);	free(count);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美日韩精品久久久久| 中文字幕第一区第二区| 高清免费成人av| 日韩电影免费在线看| 亚洲国产精品久久一线不卡| 亚洲人成影院在线观看| 亚洲啪啪综合av一区二区三区| 国产精品久久久久精k8| 一区二区三区日韩精品视频| 亚洲综合丁香婷婷六月香| 一级女性全黄久久生活片免费| 亚洲国产精品天堂| 日本美女一区二区| 国产伦精品一区二区三区免费迷 | 亚洲女同一区二区| 亚洲视频精选在线| 亚洲亚洲人成综合网络| 日韩一区精品字幕| 国产在线视频不卡二| 豆国产96在线|亚洲| 欧美曰成人黄网| 欧美一级免费观看| 国产精品日产欧美久久久久| 亚洲色图清纯唯美| 美美哒免费高清在线观看视频一区二区| 日韩av电影天堂| 国产乱码一区二区三区| 91成人免费在线| 精品国产乱码久久久久久图片| 中文字幕精品一区二区精品绿巨人| 国产精品久久三| 午夜视频一区二区三区| 国产精品综合一区二区| 在线视频一区二区免费| 91精品国产色综合久久不卡电影| 国产午夜精品久久| 亚洲成人动漫在线观看| 国产精品综合在线视频| 欧美日韩三级一区二区| 久久精品亚洲一区二区三区浴池| 一区二区三区四区在线| 国产综合久久久久久久久久久久| 91免费看`日韩一区二区| 日韩视频一区在线观看| 最好看的中文字幕久久| 九九在线精品视频| 欧美日韩一区二区三区高清| 欧美极品美女视频| 理论片日本一区| 欧美日韩中字一区| 亚洲欧洲国产日本综合| 麻豆传媒一区二区三区| 欧美老女人第四色| 伊人开心综合网| 大陆成人av片| 久久久久久久久久久99999| 视频一区二区中文字幕| 日本韩国视频一区二区| 中文字幕日韩av资源站| 国产麻豆视频精品| 精品久久久久久久久久久久久久久久久| 亚洲精品日韩专区silk| av动漫一区二区| 国产日韩影视精品| 国产乱码精品一品二品| 欧美成人r级一区二区三区| 午夜日韩在线电影| 欧美精品久久久久久久久老牛影院| 亚洲精品日韩综合观看成人91| 成人午夜av影视| 欧美国产一区视频在线观看| 久88久久88久久久| 久久亚洲综合色| 久久精品国产澳门| 精品美女一区二区| 国内外成人在线视频| 欧美成人官网二区| 激情文学综合网| 精品嫩草影院久久| 国产精品一区2区| 久久精品一区蜜桃臀影院| 国产不卡视频一区二区三区| 国产精品视频免费| 99久久精品国产一区二区三区| 国产精品午夜久久| 色婷婷av一区二区三区大白胸| 亚洲欧洲日韩一区二区三区| 99久久久国产精品| 一区二区三区四区在线播放| 欧美蜜桃一区二区三区| 美脚の诱脚舐め脚责91| 久久青草国产手机看片福利盒子| 国产成人午夜精品5599| 久久综合色8888| 91免费观看在线| 日本一不卡视频| 国产喂奶挤奶一区二区三区| av在线这里只有精品| 亚洲自拍欧美精品| 欧美mv和日韩mv的网站| 懂色av一区二区三区免费观看 | 亚洲国产欧美在线人成| 91精品国产91久久久久久最新毛片| 热久久久久久久| 久久精品欧美日韩| 欧洲国内综合视频| 久久99精品国产.久久久久| 国产亚洲精品aa午夜观看| 色狠狠av一区二区三区| 轻轻草成人在线| 国产清纯在线一区二区www| 欧美在线看片a免费观看| 麻豆国产精品777777在线| 中文字幕中文字幕一区二区| 欧美日韩亚洲不卡| 国产91在线观看丝袜| 日韩不卡一区二区三区| 国产精品狼人久久影院观看方式| 欧美日韩小视频| www.亚洲人| 国产真实乱对白精彩久久| 亚洲综合免费观看高清在线观看| 欧美电影精品一区二区| 色爱区综合激月婷婷| 国产一区二区看久久| 五月婷婷激情综合| 亚洲欧美日韩电影| 久久精品亚洲一区二区三区浴池 | 亚洲日本成人在线观看| 精品奇米国产一区二区三区| 欧美三级在线看| 91在线视频免费观看| 韩国在线一区二区| 日韩黄色小视频| 亚洲久草在线视频| 国产精品成人一区二区艾草 | 日韩美女视频一区二区在线观看| 色婷婷久久综合| 成人黄色大片在线观看| 国产在线观看免费一区| 激情丁香综合五月| 日本亚洲最大的色成网站www| 一个色综合网站| 亚洲男同性恋视频| 中文字幕一区日韩精品欧美| 久久久久国产一区二区三区四区 | 国产精品久久久久久一区二区三区| 欧美岛国在线观看| 91精品国产欧美一区二区| 欧美肥妇bbw| 日韩欧美高清在线| 日韩视频免费直播| 69精品人人人人| 在线视频欧美精品| 欧美三级日韩在线| 欧美一区二区精品| 精品裸体舞一区二区三区| 欧美成人性福生活免费看| 日韩一区二区影院| 欧美成人精品1314www| 久久欧美一区二区| 中文字幕一区二区5566日韩| 国产精品国产三级国产aⅴ原创 | 一二三四区精品视频| 一区二区三区蜜桃网| 亚洲国产成人tv| 美腿丝袜在线亚洲一区 | 亚洲成va人在线观看| 日本不卡高清视频| 国产精品 欧美精品| av一区二区三区在线| 色婷婷久久综合| 日韩视频一区二区三区| 日本一区二区三区国色天香| 一区二区三区精品在线| 免费日本视频一区| 国产.欧美.日韩| 欧美吻胸吃奶大尺度电影| 精品日韩在线一区| 国产精品久久久久毛片软件| 亚洲成人动漫一区| 成人午夜在线播放| 欧美日本在线视频| 久久蜜桃一区二区| 亚洲综合色视频| 国产成人免费av在线| 在线观看国产日韩| 久久精品一级爱片| 亚洲成人综合网站| 国产盗摄女厕一区二区三区| 欧美性猛片xxxx免费看久爱| 精品福利视频一区二区三区| 亚洲伦在线观看| 国产真实精品久久二三区| 欧美三级韩国三级日本三斤| 久久精品视频一区二区| 亚洲电影中文字幕在线观看| 福利电影一区二区三区| 日韩视频免费观看高清在线视频| 中文字幕一区二|