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

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

?? sparsesvd_partialeig_matlab.c

?? 關于有直接稀疏PCA的方法
?? C
字號:
/* Main function
sparse_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 SDP
min_U lambda_max(A+X) : X = X', abs(X(i,j)) <= rho, 1<=i,j<= n
and 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 size
rho			non-negative scalar 
gapchange	required change in gap from first gap (default: 1e-4) 
MaxIter		maximum number of iterations
info		controls verbosity: 0 silent, n>0 frequency of progress report
WarmStart	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 gradient
k			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_partialeig_matlab(double *Amat, int n, double rho, double gapchange, int MaxIter, double *Xmat, double *Umat, double *uvec, double *Fmat, double *iters, 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),dspca_finished=0;
	int work_size=3*n+n*n,changedmu=0;
	// Working variables
	double d1,sig1,d2,sig2,norma12,mu,Ntheo,L;
	double alpha,gapk;
	double dmax=0.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];
	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 *workvec=(double *) calloc(work_size,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_temp=(double *) calloc(n*n,sizeof(double));
	double *evalue=(double *) calloc(n*n,sizeof(double));
	double *evector_store=(double *) calloc(n*n,sizeof(double));
	double eigcut,tolweight=.75,tol=.01;
	int *count=(int *) calloc(n,sizeof(int));
	mxArray *output[3],*input[4];
	double *Fmattemp=(double *) calloc(n*n,sizeof(double));
	double *Xmattemp=(double *) calloc(n*n,sizeof(double));
	int checkgap_count=0; // added for test variables

	// Start...
	if (info>=1)
	{
		mexPrintf("DSPCA starting ... \n");
		mexEvalString("drawnow;");
	}
	// Test malloc results
	if ((Fmat==NULL) || (Vmat==NULL) || (bufmata==NULL) || (bufmatb==NULL)|| (workvec==NULL) || (hvec==NULL) ||(evector_temp==NULL)||(evector_store==NULL)||(evalue==NULL)||(iwork==NULL)||(workvec2==NULL)||(numeigs_matlab==NULL)||(Fmattemp==NULL)||(Xmattemp==NULL))
	{
		mexPrintf("DSPCA: memory allocation failed ... \n");
		mexEvalString("drawnow;");return;
	}
	eigcut=(1-tolweight)*(tol/10)/(rho*pow(n,1.5)); // scale delta (tol/10) to get eig threshold
	tol=tolweight*tol; // scale of .5 for partial eig precision
	mexEvalString("options.disp=0\;");           // for use in calling Matlab function eigs	
	mexEvalString("options.maxit=500\;");		 // for use in calling Matlab function eigs	
	input[0] = mxCreateDoubleMatrix(n,n,mxREAL); // for use in calling Matlab function eigs
	input[1] = mxCreateDoubleMatrix(1,1,mxREAL);
	input[2]=mxCreateString("la");
	input[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;
			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
			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;
			checkgap_count=0;			
			free(Fmattemp);
			free(Xmattemp);
			changedmu=1;
		}
		*count=0;
		// eigenvalue decomposition of A+X 
		cblas_dcopy(n2,Xmat,incx,Vmat,incx);
		alpha=1.0; 
		cblas_daxpy(n2,alpha,Amat,incx,Vmat,incx);
		symmetrize(Vmat,bufmata,n);	// symmetrize A+X so no precision problems		
		// do partial eigenvalue approximation to exp(A+X)
		cblas_dcopy(n2,bufmata,incx,Vmat,incx);		
		*numeigs_matlab=1.0*numeigs;
		fmu=partial_eig_matlab(n,k,mu,eigcut,bufmata,bufmatb,numeigs_matlab,
			evector_temp,evector_store,evalue,input,output,
			hvec,Vmat,Umat,workvec,count,dmax,addeigs,perceigs,check_for_more_eigs);
		numeigs=(int)(*numeigs_matlab);
		dmax=bufmata[0];
		error_flag=(int)bufmata[1];
		// 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 (k%checkgap==0) {  // check gap more often than printing info
			gapk=dmax-doubdot(Amat,Umat,n2)+rho*doubasum(Umat,n2);
			dualitygap_alliter[checkgap_count]=gapk;
			cputime_alliter[checkgap_count]=cputime;
			perceigs_alliter[checkgap_count]=100.0*numeigs/n;
			checkgap_count++;
			if (gapk<=tol) dspca_finished=1;
		}
		if ((changedmu==1)&&((dspca_finished==1)||(k%Nperiod==0)||(((double)(clock())/CLOCKS_PER_SEC-last_time)>=900)))
		{
			gapk=dmax-doubdot(Amat,Umat,n2)+rho*doubasum(Umat,n2);
			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){
				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;");
			}
		}
		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,hvec,workvec,&lwork,&inflapack);
	indmax=idxmax(hvec,n);dmax=hvec[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(workvec);
	free(workvec2);
	free(hvec);
	free(iwork);
	free(numeigs_matlab);
	free(evector_store);
	free(evector_temp);
	free(evalue);
	free(count);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
捆绑调教一区二区三区| 欧美日韩精品三区| 欧美三级中文字| 久久影院视频免费| 午夜久久久久久久久| 成人午夜精品一区二区三区| 日韩一级免费观看| 亚洲一区二区三区在线播放| 国产成人亚洲综合色影视| 欧美一区二区三区人| 亚洲蜜桃精久久久久久久| 国产精品亚洲专一区二区三区 | 国产v日产∨综合v精品视频| 欧美色窝79yyyycom| 中文字幕一区二区三区在线观看| 国产一区二区三区免费在线观看| 7777精品伊人久久久大香线蕉经典版下载 | 日韩精品一二区| 色婷婷综合久久久久中文一区二区| 久久蜜桃av一区精品变态类天堂| 亚洲国产成人tv| 在线观看亚洲成人| 1024精品合集| 色综合中文字幕国产 | 久久婷婷国产综合国色天香| 日本最新不卡在线| 欧美午夜精品一区| 一区二区三区电影在线播| 91小宝寻花一区二区三区| 国产欧美视频一区二区三区| 国产精品一区二区无线| 国产日产欧美精品一区二区三区| 国产麻豆精品95视频| 精品免费视频一区二区| 国产自产2019最新不卡| 久久在线观看免费| 成人av电影免费观看| 亚洲私人黄色宅男| 91福利在线看| 午夜精品久久久久| 日韩欧美国产1| 国产一区二区在线电影| 久久精品一区二区三区不卡| 成人激情图片网| 中文字幕一区二区三区不卡在线| 色婷婷亚洲综合| 日韩成人午夜电影| 久久综合久久综合久久综合| 国产成人av电影| 亚洲精品亚洲人成人网| 欧美一区二区三区免费大片| 国内久久婷婷综合| 国产精品久久毛片| 欧美日韩精品电影| 激情小说亚洲一区| 中文字幕一区二区三区不卡在线| 日本精品一区二区三区四区的功能| 亚洲一区在线看| 欧美va天堂va视频va在线| 国产91露脸合集magnet| 亚洲精品免费电影| 日韩欧美专区在线| 成人精品一区二区三区中文字幕| 亚洲影视资源网| 亚洲精品在线一区二区| 97久久人人超碰| 免费成人在线观看| 国产精品超碰97尤物18| 欧美疯狂性受xxxxx喷水图片| 国产在线不卡一卡二卡三卡四卡| 国产精品电影一区二区三区| 欧美久久免费观看| 不卡的av电影| 久久精品国产999大香线蕉| 自拍视频在线观看一区二区| 日韩午夜激情视频| 91美女蜜桃在线| 国产一区二区三区蝌蚪| 亚洲午夜三级在线| 国产欧美精品国产国产专区| 777午夜精品视频在线播放| 9色porny自拍视频一区二区| 日本免费新一区视频| 亚洲欧美另类小说| 亚洲精品一区二区三区影院| 欧美日韩国产精品自在自线| 99久久久精品| 韩国女主播一区二区三区| 亚洲图片一区二区| 亚洲精品一二三区| 中文字幕欧美日韩一区| 26uuu亚洲| 欧美一级日韩不卡播放免费| 欧美羞羞免费网站| 一本一道波多野结衣一区二区| 激情五月婷婷综合| 日韩电影在线观看网站| 亚洲成人午夜影院| 亚洲美女在线一区| 中文字幕一区视频| 国产精品美女久久久久aⅴ国产馆| 日韩精品一区二区三区在线观看| 欧美日韩黄视频| 欧美日产在线观看| 日本黄色一区二区| 色婷婷综合久久久久中文一区二区| 成人av网在线| 成人高清在线视频| 福利视频网站一区二区三区| 国产精品主播直播| 成人一区二区三区视频| 高清beeg欧美| 99久久精品99国产精品| 99vv1com这只有精品| 91免费在线看| 91成人网在线| 欧美日韩一区三区| 欧美日韩国产欧美日美国产精品| 欧美性受极品xxxx喷水| 欧美性猛交xxxxxxxx| 欧美日韩在线播放一区| 91精品欧美久久久久久动漫| 欧美一区在线视频| 精品国产一区二区三区不卡| 亚洲乱码国产乱码精品精小说| 亚洲摸摸操操av| 亚洲成av人**亚洲成av**| 日韩国产精品久久久| 麻豆freexxxx性91精品| 激情综合五月婷婷| caoporm超碰国产精品| 一本久道中文字幕精品亚洲嫩| 日本高清免费不卡视频| 欧美性猛交xxxxxxxx| 91精品国产91久久久久久一区二区| 91精品国产一区二区三区香蕉| 精品国产凹凸成av人导航| 国产丝袜欧美中文另类| 日韩美女精品在线| 天天影视涩香欲综合网| 激情文学综合丁香| 色av成人天堂桃色av| 日韩美一区二区三区| 国产精品久久免费看| 污片在线观看一区二区| 国产一区二区免费视频| 99视频一区二区| 91精品国产色综合久久不卡电影| 国产亚洲人成网站| 亚洲成人av一区| 国产精品资源在线| 欧美日韩一区精品| 国产女人aaa级久久久级| 亚洲一区二区三区四区的| 精品综合久久久久久8888| 99re热视频精品| 精品欧美黑人一区二区三区| 亚洲精品中文在线观看| 国产伦精品一区二区三区视频青涩| 97精品国产露脸对白| 精品国产精品网麻豆系列| 亚洲狠狠爱一区二区三区| 国产成人精品www牛牛影视| 91精品国产综合久久久久久漫画| 国产欧美日韩另类视频免费观看| 日韩黄色免费电影| 91一区二区三区在线观看| 久久亚洲二区三区| 亚洲大片一区二区三区| 成人av电影免费观看| 日韩视频永久免费| 亚洲国产欧美日韩另类综合| 成人毛片视频在线观看| 欧美成人免费网站| 亚洲成人av免费| 色哟哟在线观看一区二区三区| 26uuu国产一区二区三区| 亚洲国产va精品久久久不卡综合| 成人高清免费观看| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 一区二区三区免费| 国产成人免费av在线| 精品国产伦一区二区三区免费 | 亚洲欧美日韩国产另类专区| 国产999精品久久久久久| 欧美α欧美αv大片| 日韩精品亚洲一区二区三区免费| 91久久精品一区二区三| 国产精品每日更新在线播放网址| 狠狠色综合日日| 精品国产成人在线影院| 紧缚捆绑精品一区二区| 日韩精品专区在线| 蜜臀国产一区二区三区在线播放| 在线观看亚洲精品| 亚洲成人免费电影| 欧美日韩国产精品成人| 午夜精品久久久久久久久| 欧美精品v国产精品v日韩精品 | 欧美bbbbb|