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

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

?? sparsesvd_pade.c

?? 關于有直接稀疏PCA的方法
?? C
字號:
/* Main functionsparse_rank_one(double *Amat, int n, double rho, double tol, int MaxIter, double *Xmat, double *Umat, double *uvec, double *Fmat, int WarmStart, int info) SPARSERANKONE finds a sparse rank-one approximation to a given symmetric matrix A, by solving the SDPmin_U lambda_max(A+X) : X = X', abs(X(i,j)) <= rho, 1<=i,j<= nand its dual:max_X 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			symmetric matrix that solves the above SDP U			dual variable, solves the dual SDP u			largest eigenvector of U F			Average gradientk			number of iterations run
This code implements Nesterov's smooth minimization algorithm. See: Y. Nesterov "Smooth Minimization of NonSmooth Functions", CORE DP 2003/12. Last Modified: A. d'Aspremont, Laurent El Ghaoui, Ronny Luss July 2006.http://www.carva.org/alexandre.daspremont*/#include "sparsesvd.h"void sparse_rank_one_pade(double *Amat, int n, double rho, double gapchange, int MaxIter, double *Xmat, double *Umat, double *uvec, double *Fmat, double *iters, int info,  int checkgap, double *dualitygap_alliter, double *cputime_alliter)
{	// Hard parameters	int Nperiod=imaxf(1,info),changedmu=0;	int work_size=3*n+n*n;	double d1,sig1,d2,sig2,norma12,mu,Ntheo,L;	double alpha,gapk,first_gapk0;	double dmax=0,fmu,lambda;	int n2=n*n,incx=1,precision_flag=0,iteration_flag=0,error_flag=0;	int lwork,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],uplo[1],tolerancestr[100];	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 ideg=6,work_size2=4*n*n+ideg+1;
	int *work_in=(int *) calloc(n,sizeof(int));
	double *work_out=(double *) calloc(work_size2,sizeof(double));	double trace,bufmata_shift=0.0,tol=.01;
	int work_size3=8*n;
	double *workvec2=(double *) calloc(work_size3,sizeof(double));
	double *numeigs_matlab=(double *) calloc(1,sizeof(double));
	double *evalue=(double *) calloc(1,sizeof(double));
	int *iwork=(int *) calloc(5*n,sizeof(int));
	mxArray *input[1],*output[1];
	double *Fmattemp=(double *) calloc(n*n,sizeof(double));
	double *Xmattemp=(double *) calloc(n*n,sizeof(double));
	int checkgap_count=0; // added for test variables
	double tolerance;
	char which[2]="LA"; // Arpack: we want largest algebraic eigs...
	int ncv=2,nconv,nummatvec,info_arpack,maxitr_arpack=1000;
	double *evector_temp=(double *) calloc(n,sizeof(double)); // only one eigenvector
	mxArray *input_eigs[4],*output_eigs[3];
	
	// Start...	if (info>=1)	{		mexPrintf("DSPCA starting ... \n");		mexEvalString("drawnow;");	}	// Test malloc results	if ((Fmat==NULL) || (Vmat==NULL) || (bufmata==NULL) || (bufmatb==NULL) || (Dvec==NULL) || (workvec==NULL) || (gvec==NULL) || (hvec==NULL)||(work_in==NULL)||(work_out==NULL)||(workvec2==NULL)||(numeigs_matlab==NULL)||(evalue==NULL)||(iwork==NULL)||(Fmattemp==NULL)||(Xmattemp==NULL))	{		mexPrintf("DSPCA: memory allocation failed ... \n");		mexEvalString("drawnow;");return;	}	input[0] = mxCreateDoubleMatrix(n,n,mxREAL); // for use in calling Matlab function expm
	mexEvalString("options.disp=0\;");			 // for use in calling Matlab function eigs
	mexEvalString("options.maxit=500\;");		 // for use in calling Matlab function eigs
	input_eigs[0] = mxCreateDoubleMatrix(n,n,mxREAL); 
	input_eigs[1] = mxCreateDoubleMatrix(1,1,mxREAL);
	*numeigs_matlab=1.0;
	memcpy(mxGetPr(input_eigs[1]),numeigs_matlab,sizeof(double));		
	input_eigs[2]=mxCreateString("la");
	input_eigs[3]=mexGetVariable("caller","options");
	
	// First, compute some local params	d1=rho*rho*n*n/2.0;sig1=1.0;d2=log(n);sig2=0.5;norma12=1.0;mu=tol/(2.0*d2);	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+error_flag)==0)	{		
		if (k==1 && changedmu==0) {  // after 1st iteration and when algorithm hasn't been restarted, adjust tol to be a percentage change in original gap
			gapk=dmax-doubdot(Amat,Umat,n2)+rho*doubasum(Umat,n2);
			tol=gapchange*gapk;
			mu=tol/(2.0*d2);
			L=(d2*norma12*norma12)/(2.0*sig2*tol);
			alpha=0.0;cblas_dscal(n2,alpha,Xmat,incx);
			alpha=0.0;cblas_dscal(n2,alpha,Fmat,incx);				
			k=0;
			changedmu=1;
		}
		// eigenvalue decomposition of A+X 		cblas_dcopy(n2,Xmat,incx,Vmat,incx);		alpha=1.0; 		cblas_daxpy(n2,alpha,Amat,incx,Vmat,incx);		// do pade approximation to exp(A+X)		symmetrize(Vmat,bufmata,n);	// symmetrize A+X so no precision problems		
		cblas_dcopy(n2,bufmata,incx,Vmat,incx);
		bufmata_shift=frobnorm(bufmata,n);// simple bound on largest magnitude eigenvalue
		//i=1;tolerance=.0001/bufmata_shift;
		//info_arpack=simarpack(bufmata,n,i,ncv,tolerance,which,maxitr_arpack,0,evalue,evector_temp,&nconv,&nummatvec);
		//if (info_arpack<0) {
			sprintf(tolerancestr,"options.tol=%.15f;",.0001/bufmata_shift); // this will be the tolerance parameter for eigs
			mexEvalString(tolerancestr);
			memcpy(mxGetPr(input_eigs[0]),bufmata,n*n*sizeof(double));
			mexCallMATLAB(3,output_eigs,4,input_eigs,"eigs");
			memcpy(evalue,mxGetPr(output_eigs[1]),sizeof(double));
		//}
		dmax=evalue[0];
		for (i=0;i<n;i++) {bufmata[i*n+i]-=dmax;}
		alpha=1.0/mu;cblas_dscal(n2,alpha,bufmata,incx);
		memcpy(mxGetPr(input[0]),bufmata,n*n*sizeof(double));
		mexCallMATLAB(1,output,1,input,"expm");
		memcpy(Umat,mxGetPr(output[0]),n*n*sizeof(double));
		mxDestroyArray(output[0]);
		trace=0.0;for (i=0;i<n;i++){trace+=Umat[i*n+i];}
		fmu=dmax+mu*log(trace)-mu*log(n);
		alpha=1.0/trace;cblas_dscal(n2,alpha,Umat,incx);
		// 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/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);		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 ((changedmu==1)&&((k%checkgap==0)||(k%Nperiod==0)||(((double)(clock())/CLOCKS_PER_SEC-last_time)>=900))){
			gapk=dmax-doubdot(Amat,Umat,n2)+rho*doubasum(Umat,n2);
			dualitygap_alliter[checkgap_count]=gapk;cputime_alliter[checkgap_count]=cputime;checkgap_count++;
			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))||(precision_flag==1)||iteration_flag==1){
				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\n",(double)(k),dmax,gapk,left_h,left_m,left_s);
				mexEvalString("drawnow;");}
		}
		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);	*jobz='V';*uplo='U';lwork=work_size;	dsyev(jobz,uplo,&n,Vmat,&n,Dvec,workvec,&lwork,&inflapack);	indmax=idxmax(Dvec,n);dmax=Dvec[indmax]; 	for (i=0;i<n;i++) {uvec[i]=Vmat[(indmax)*n+i];}	// Return total number of iterations
	*iters=k;
	// Free everything	free(Vmat);	free(bufmata);	free(bufmatb);	free(Dvec);	free(workvec);	free(workvec2);
	free(gvec);	free(hvec);	free(iwork);
	free(numeigs_matlab);
	free(evalue);
	free(evector_temp);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久免费网| 国产精品色婷婷久久58| 99麻豆久久久国产精品免费优播| 国产麻豆成人精品| 激情成人午夜视频| 久久99精品网久久| 国产一区二区三区久久久| 久久电影网站中文字幕| 激情亚洲综合在线| 国产成人亚洲综合色影视 | 色噜噜狠狠一区二区三区果冻| heyzo一本久久综合| 91在线国内视频| 欧美日韩综合在线| 精品久久国产字幕高潮| 国产欧美在线观看一区| 亚洲精品国产第一综合99久久| 亚洲一卡二卡三卡四卡五卡| 麻豆91小视频| 99久久99久久免费精品蜜臀| 欧美最新大片在线看| 7777精品伊人久久久大香线蕉经典版下载| 欧美精品视频www在线观看 | 91在线观看免费视频| 91久久精品一区二区三| 在线不卡a资源高清| 国产亚洲人成网站| 亚洲观看高清完整版在线观看| 日韩激情在线观看| 成人免费视频一区| 精品视频在线看| 久久在线免费观看| 亚洲国产日韩av| 国产成人精品免费看| 欧美影视一区二区三区| 国产亚洲一本大道中文在线| 亚洲影院理伦片| 国产精品综合一区二区三区| 欧美无人高清视频在线观看| 国产午夜精品一区二区三区视频 | 成人h动漫精品一区二| 欧美亚洲丝袜传媒另类| 久久久精品欧美丰满| 亚洲精品国产成人久久av盗摄| 国产原创一区二区三区| 欧美日韩国产高清一区二区三区| 欧美极品xxx| 久久爱另类一区二区小说| 91国产免费看| 中文子幕无线码一区tr| 狠狠色综合播放一区二区| 欧美美女一区二区三区| 亚洲精品va在线观看| 成人性生交大片免费| 337p粉嫩大胆色噜噜噜噜亚洲| 亚洲综合区在线| 99久久99久久精品免费观看| 国产无一区二区| 精品一区二区三区在线视频| 欧美情侣在线播放| 亚洲国产一区二区在线播放| 91亚洲国产成人精品一区二区三 | 五月天国产精品| 色久综合一二码| 1000精品久久久久久久久| 国产成人精品三级| 国产拍揄自揄精品视频麻豆| 国产乱淫av一区二区三区| 欧美一级一区二区| 日日嗨av一区二区三区四区| 欧美色区777第一页| 亚洲综合色自拍一区| 欧洲精品在线观看| 亚洲一区二区三区美女| 在线观看不卡视频| 亚洲va在线va天堂| 91精品欧美一区二区三区综合在| 亚洲制服丝袜一区| 欧美高清性hdvideosex| 秋霞av亚洲一区二区三| 日韩久久久久久| 精品一区二区三区免费视频| 欧美tickling挠脚心丨vk| 美脚の诱脚舐め脚责91 | 91久久人澡人人添人人爽欧美 | 欧美mv日韩mv国产网站app| 美女视频一区二区| 久久久国产午夜精品| caoporen国产精品视频| 亚洲精品菠萝久久久久久久| 9191成人精品久久| 国模无码大尺度一区二区三区| 国产亚洲一本大道中文在线| 一本大道久久a久久精品综合| 亚洲一区二区视频在线观看| 日韩美女一区二区三区| 成人av在线电影| 亚洲国产sm捆绑调教视频 | 欧洲一区二区av| 麻豆精品一区二区三区| 国产情人综合久久777777| av在线不卡观看免费观看| 性做久久久久久久久| 国产亚洲欧美激情| 欧美在线你懂的| 国产精品一区二区免费不卡| 一区二区在线观看视频| 精品免费国产二区三区| 99国产精品久| 老司机免费视频一区二区三区| 中文一区二区完整视频在线观看| 欧美色偷偷大香| 高清国产一区二区| 丝袜美腿亚洲色图| 亚洲三级在线免费观看| 欧美变态凌虐bdsm| 欧美在线免费视屏| 成人免费毛片app| 秋霞午夜av一区二区三区| 亚洲欧美偷拍三级| 亚洲精品一区二区精华| 欧美嫩在线观看| 91老师片黄在线观看| 国产精品伊人色| 日韩av午夜在线观看| 亚洲综合激情另类小说区| 国产三级一区二区| 欧美成人高清电影在线| 欧美日韩在线观看一区二区 | 欧美性生活久久| 99精品在线观看视频| 国产一区二区剧情av在线| 日韩专区欧美专区| 亚洲自拍偷拍九九九| 亚洲婷婷国产精品电影人久久| 欧美不卡激情三级在线观看| 欧美一区二区在线不卡| 欧美写真视频网站| 日本道色综合久久| 91丨九色丨蝌蚪丨老版| www.性欧美| a美女胸又www黄视频久久| 国产电影一区二区三区| 国产一区二区在线电影| 国产呦萝稀缺另类资源| 久久疯狂做爰流白浆xx| 国精品**一区二区三区在线蜜桃 | 国产欧美日韩在线| 久久夜色精品一区| 久久综合色综合88| 国产亚洲欧洲997久久综合| 国产亚洲精品精华液| 久久九九99视频| 中文字幕欧美激情一区| 国产精品你懂的在线| 椎名由奈av一区二区三区| 亚洲精品日产精品乱码不卡| 亚洲精品欧美综合四区| 亚洲国产精品一区二区久久恐怖片| 一区av在线播放| 亚洲第一激情av| 蜜臀av一区二区在线免费观看| 美国欧美日韩国产在线播放| 国产一区高清在线| 97se狠狠狠综合亚洲狠狠| 91久久精品一区二区| 制服丝袜成人动漫| 久久久另类综合| 亚洲少妇30p| 丝袜美腿一区二区三区| 国产一区二区在线影院| 99精品一区二区| 欧美日韩激情一区| 精品国产一区久久| 一色屋精品亚洲香蕉网站| 亚洲午夜在线观看视频在线| 久久99国产精品免费| proumb性欧美在线观看| 777xxx欧美| 国产精品国产自产拍高清av王其 | 日韩一区精品视频| 精品一区二区三区免费播放| 北条麻妃国产九九精品视频| 欧美亚洲图片小说| 久久亚洲捆绑美女| 一区二区三区四区国产精品| 奇米亚洲午夜久久精品| 99久久精品免费看| 538在线一区二区精品国产| 欧美激情一区二区在线| 香蕉成人伊视频在线观看| 国产美女一区二区| 欧美乱妇20p| 亚洲免费伊人电影| 极品少妇xxxx精品少妇偷拍| 91成人免费电影| 国产精品国产精品国产专区不蜜| 日韩黄色一级片| 色狠狠av一区二区三区| 国产亚洲欧美在线|