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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mvgmmpdf.c

?? 交叉熵實(shí)現(xiàn)多元高斯混合模型優(yōu)化的源代碼
?? C
字號(hào):
/* 


  Compute the pdf of a mixture of a Multivariate Gaussian process


  Usage:    pdf = mvgmmpdf(x , mu , sigma , p);
  ------

  Inputs 
  ------
     x        Support vector (d x N x [v1] , ... , [vp]) 
     mu       Mean vector (d x 1 x M x [n1] , ... , [nl]) 
     sigma    Covariance  (d x d x M x [n1] , ... , [nl]) 
	 p        Weights vector (1 x 1 x M x [n1] , ... , [nl])

  Outputs
  -------

     pdf    : (1 x N x v1 x ... x vp x n1 x ... x nl)

  
		
		  
 Example
 -------
			
 mu          = cat(3 , [0.6 ; 6] , [1 ; -10] ,[10 ; -1] , [ 0 ; 10] , [1 ; -3] , [5 ; 5]);            %(d x 1 x M)
 sigma       = corr2cov(cat(3 , [1 0.9 ; 0.9 1] , [1 -0.9 ; -0.9 1] , [2 0 ; 0 2] , [2 0 ; 0 2] , [2 0 ; 0 2] , [2 0 ; 0 2]  )); %(d x d x M)
 p           = cat(3 , [0.1] , [0.1]  , [0.2] , [0.2] , [0.2] , [0.2] );                       %(1 x 1 x M)
 N           = 1000;
 [Z , index] = sample_mvgm(N , mu , sigma , p);
 support     = (-15:0.3:15);
 [X , Y]     = meshgrid(support);
 grid        = [X(:) , Y(:)]';
 % pdf         = mvgmmpdf(grid , mu(:,:,:,ones(1,3)) , sigma(:,:,:,ones(1,3)) , p(:,:,:,ones(1,3)));
 pdf         = mvgmmpdf(grid , mu , sigma , p);
 pdf_Z       = mvgmmpdf(Z , mu , sigma , p);
 ZZ          = griddata(Z(1 , :) , Z(2 , :) , pdf_Z , X(:) , Y(:));


 figure(1)

 h           = surfc(X , Y , reshape(pdf , length(support) , length(support)));
 hold on
 stem3(Z(1 , :) , Z(2 , :) , pdf_Z);
 alpha(h , 0.7);
 hold off
 shading interp
 lighting phong
 light

 figure(2)

 surfc(X , Y , reshape(ZZ , length(support) , length(support)) )
 hold on
 stem3(Z(1 , :) , Z(2 , :) , pdf_Z);
 alpha(h , 0.7);
 hold off
 shading interp
 lighting phong
 light				
  
  To compile
  ----------
  
  Myself, I use Intel CPP compiler as : 

  mex  -f mexopts_intel10amd.bat -output mvgmmpdf.dll mvgmmpdf.c

  
  Ver 1.1 (06/06/08)


   Author : S閎astien PARIS (sebastien.paris@lsis.org) 
   -------
 
				  
*/




#include <math.h>
#include <time.h>

#include "mex.h"


#define NUMERICS_FLOAT_MIN 1.0E-37


#define M_PI 3.14159265358979323846


/*--------------------------------------------------------------- */

double gauss(double *, double * , int , int);


void lubksb(double *, int , int *, double *);


int ludcmp(double *, int , int *, double * , double *);


double inv(double * , double * , double * , double * , int * , int );



void mvgmmpdf(double * , double * , double * , double * , int , int , int , int , int , double * , 
			  double * , double * , double * , double * , double * , double * , int * , double *);


/*--------------------------------------------------------------- */



void mexFunction( int nlhs, mxArray *plhs[],
				 int nrhs, const mxArray *prhs[] )
{
	
	
	double *x , *mu , *sigma , *p;
	
	double *pdf;
	
	const int  *dimsmu , *dimssigma , *dimsp , *dimsx;
	
	int  *dimspdf , *indx;

	double *vect , *vv , *invsigma  , *temp_sigma , *temp_invsigma , *det_sigma , *res;

	
	int  numdimsmu , numdimssigma  , numdimsp , numdimsx;
	
	int  numdimspdf;
	
	int  i , d , d2 , N , M , K = 1, V=1;
	
	
	/* Check input */
	
	if(nrhs < 4)
		
	{     
		mexErrMsgTxt("At least 3 inputs argument are required for mvgmmpdf");	
	}
	
	
	/* Input 1 */
	
	x               = mxGetPr(prhs[0]);
	
	numdimsx        = mxGetNumberOfDimensions(prhs[0]);
	
	dimsx           = mxGetDimensions(prhs[0]);
	
	
	N               = dimsx[1];
	
	for (i = 2 ; i<numdimsx ; i++)
		
	{
		V *=dimsx[i];	
	}
	
	
	/* Input 2 */
	
	
	mu           = mxGetPr(prhs[1]);
	
	numdimsmu    = mxGetNumberOfDimensions(prhs[1]);
	
	dimsmu       = mxGetDimensions(prhs[1]);
	
	if ( (numdimsmu >3) && (dimsmu[1] != 1))
		
	{
		mexErrMsgTxt("mu must be (d x 1 x M)");	
	}
	
	d              = dimsmu[0];
	
	M              = dimsmu[2];
	
	for(i = 3 ; i < numdimsmu ; i++)
		
	{
		
		K *= dimsmu[i];
		
	}
	
	d2            = d*d;
	
	
	/* Input 3 */
	
	
	sigma               = mxGetPr(prhs[2]);
	
	numdimssigma        = mxGetNumberOfDimensions(prhs[2]);
	
	dimssigma           = mxGetDimensions(prhs[2]);
	
	if (  (dimssigma[0] != d) && (dimssigma[1] != d) && (dimssigma[2] != M))
		
	{
		mexErrMsgTxt("p must be (1 x 1 x M x n1 x ... x nL)");	
	}
	
	
	 		
	/* Input 4 */
	
	
	p               = mxGetPr(prhs[3]);
	
	numdimsp        = mxGetNumberOfDimensions(prhs[3]);
	
	dimsp           = mxGetDimensions(prhs[3]);
	
	if ( (dimsp[0] != 1) && (dimsp[1] != 1) && (dimsp[2] != M))
		
	{
		mexErrMsgTxt("p must be (1 x 1 x M)");	
	}
	
	
	
	
	/* Output 1 */
	
	
	numdimspdf    = 2 + (numdimsmu - 3) + (numdimsx - 2);
	
	dimspdf       = (int *)mxMalloc(numdimspdf*sizeof(int));
	
	
	dimspdf[0]    = 1;
	
	dimspdf[1]    = N;
	
	
	for (i = 2 ; i < numdimsx ; i++)
		
	{
		
        dimspdf[i] = dimsx[i] ;
		
	}
	
	
	for(i = 3 ; i < numdimsmu  ; i++)
		
	{
		
		dimspdf[(numdimsx - 2) + i - 1] = dimsmu[i];
		
	}
	
	
	
	plhs[0]            = mxCreateNumericArray(numdimspdf , dimspdf , mxDOUBLE_CLASS, mxREAL);
	
	pdf                = mxGetPr(plhs[0]);
	
	


	vect               = (double *)mxMalloc(d*sizeof(double));
	
	vv                 = (double *)mxMalloc(d*sizeof(double));
	
	temp_sigma         = (double *)mxMalloc(d2*sizeof(double));
	
	temp_invsigma      = (double *)mxMalloc(d2*sizeof(double));
	
	det_sigma          = (double *)mxMalloc(M*sizeof(double));
	
	invsigma           = (double *)mxMalloc((d2*M)*sizeof(double));
	
	indx               = (int *)mxMalloc(d*sizeof(int));

	res                = (double *)mxMalloc(d*sizeof(double));

		 
	
    /* Main call */
	
	
	mvgmmpdf(x , mu , sigma , p , d , M , N , K , V , pdf , invsigma , temp_sigma , temp_invsigma , det_sigma , vect , vv , indx , res);
	
	
	
	mxFree(vect);
	
	mxFree(vv);
	
	mxFree(temp_sigma);
	
	mxFree(temp_invsigma);
	
	mxFree(det_sigma);
	
	mxFree(invsigma);
	
	mxFree(indx);

	mxFree(res);

	mxFree(dimspdf);
	
	
 }
 
 
 /* ----------------------------------------------------------------------- */
 
 void mvgmmpdf(double *x , double *mu , double *sigma  , double *p , int d , int M , int N , int K , int V , 
	 double *pdf ,
	 double *invsigma , double *temp_sigma , double *temp_invsigma , double *det_sigma , double *vect , double *vv , int *indx , double *res)
	 
	 
 {
	 
	 
	 int  i , j , l , r , m , jd , dN = d*N  , k, d2 = d*d , kd , ld , mN , ld2 , i2 , iM , dM = d*M ,  mdN , NV = N*V , iNV  , idM , id2M;
	 
	 double cte = 1.0/pow(2*M_PI , d*0.5);
	 
	 
	 
	 
	 for (i = 0 ; i < K ; i++) // Loop on mu, sigma, p
		 
	 {
		 
		 
		 iM    = i*M;
		 
         idM   = d*iM;
		 
		 id2M  = d*idM;
		 
		 iNV   = i*NV;
		 
		 
		 for (l = 0 ; l < M ; l++)
			 
		 {
			 
			 ld    = l*d;
			 
			 ld2   = ld*d;
			 
			 i2    = ld2  + id2M;
			 
			 // invsigma //
			 
			 for(r = 0 ; r < d2 ; r++)
				 
			 {
				 
				 temp_sigma[r] = sigma[r + i2];
				 
			 }
			 
			 
			 det_sigma[l]  = inv(temp_sigma , temp_invsigma , vect , vv , indx , d);
			 
			 
			 for(r = 0 ; r < d2 ; r++)
				 
			 {
				 
				 invsigma[r + ld2] = temp_invsigma[r];
				 
			 }
			 
			 
			 det_sigma[l] = (sqrt(cte*fabs(det_sigma[l])));
			 
		 }
		 
		 // Loop on x
		 
		 for (m = 0 ; m < V ; m++) 
			 
		 {
			 
			 mdN = m*dN;

			 mN  = m*N + iNV;
			 		 
			 for (j = 0 ; j < N ; j++)
				 
			 {
				 
				 jd            = j*d + mdN;
				 
				 pdf[j + mN]   = 0.0;
				 
				 for (k = 0 ; k < M ; k++)
					 
				 {
					 
					 kd  = k*d;
					 			 					 
					 for(r = 0 ; r < d ; r++)
						 
					 {
						 
						 res[r] = (x[r + jd] - mu[r + kd]);
						 
					 }
					 			 
					 pdf[j + mN]  += (p[k + iM]*det_sigma[k])*exp(-0.5*gauss(res , invsigma , d , kd*d));
					 
				 }
				 
			 }			 
		 }
		 
	 }
 }
 
  
/*----------------------------------------------------------------------------------------------*/


double gauss(double *y, double *R , int d , int offset)

{
	
	int  i , j , id;
	
	register double temp;
		
	register double Q = 0.0;
	
		
	for (i = 0 ; i < d ; i++)
	{
		
		temp = 0.0;

		id   = i*d + offset;
		
		
		for(j = 0 ; j < d ; j++)
			
		{
			
			temp   += y[j]*R[j + id];
			
		}
		
		Q += temp*y[i];
		
	}
	
	return Q;
	
}




/*------------------------------------------------------------------*/

double inv(double *temp , double *invQ  , double *vect , double *vv , int *indx , int d)

{
	int i , j , jd;
	
	double dd , det = 1.0;
	
		
	if(ludcmp(temp , d , indx , &dd , vv ))
	{
		
		for(i = 0 ; i < d ; i++)
			
		{
			
			det *= temp[i + i*d];
			
		}
		
		for(j = 0; j < d; j++)
		{            
			for(i = 0; i < d; i++) 
				
			{
				vect[i] = 0.0;
			}
			
			jd      = j*d;
			
			vect[j] = 1.0;
			
			lubksb(temp , d , indx , vect);
			
			for(i = 0 ; i < d ; i++) 
				
			{
				
				invQ[jd + i] = vect[i];
				
			}
		}
		
	}

	return (1.0/det);
	
}



/*-------------------------------------------------------------------------------*/

void lubksb(double *m, int n, int *indx, double *b)
{
    int i, ii = -1, ip, j , nn = n*n, in;
	
    double sum;
    
    for(i = 0 ; i < n; i++)
	
	{
        ip        = indx[i];
		
        sum       = b[ip];
		
        b[ip]     = b[i];
		
        if(ii > -1)
		{
            for(j = ii; j <= i - 1; j++)
			{
               
				sum -= m[i + j*n] * b[j];
            
			}
        } 
		else if(sum)
		{
        
			ii = i;
        
		}
		
		b[i]     = sum;

    }
    
	for(i = n - 1 ; i >= 0 ; i--)
	
	{
        sum = b[i];
		
		in  = i*n;
		
        for(j = i + 1 ; j < n; j++)
		{
            sum -= m[i + j*n] * b[j];
        }
        
		b[i] = sum / m[i + in];
    }
}


/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/


int ludcmp(double *m, int n, int *indx, double *d , double *vv)
{
    int i, imax, j, k , jn , kn , n1 = n - 1;
	
    double big, dum, sum , temp;
	
    
    d[0] = 1.0;
	
    for(i = 0; i < n; i++)
	{
        big = 0.0;
		
        for(j = 0; j < n; j++)
		{
            if((temp = fabs(m[i + j*n])) > big)
				
			{
                big = temp;
            }
			
		}
        if(big == 0.0)
		{
			
            return 0;
        }
		
        vv[i] = 1.0 / big;
    }
	
    for(j = 0; j < n; j++)
	{
		jn  = j*n;
		
        for(i = 0; i < j; i++)
		
		{
            sum = m[i + jn];
			
            for(k = 0 ; k < i; k++)
				
			{
                sum -= m[i + k*n ] * m[k + jn];
            }
            
			m[i + jn] = sum;
        }
		
        big = 0.0;
		
        for(i = j; i < n; i++)
		
		{
            sum = m[i + jn];
			
            for(k = 0; k < j; k++)
		
			{
            
				sum -= m[i + k*n] * m[k + jn];
            
			}
            
			m[i + jn] = sum;
			
            if((dum = vv[i] * fabs(sum)) >= big)
				
			{
                big  = dum;
				
                imax = i;
            }
        }
        
		if(j != imax)
		
		{
            for(k = 0; k < n; k++)
				
			{
				
				kn            = k*n;
				
                dum           = m[imax + kn];
				
                m[imax + kn]  = m[j + kn];
				
                m[j + kn]     = dum;
				
            }
            
			d[0]       = -d[0];
			
            vv[imax]   = vv[j];
        }
		
        indx[j] = imax;
		
        if(m[j + jn] == 0.0)
		
		{
            
			m[j + jn] = NUMERICS_FLOAT_MIN;
        
		}
        
		if(j != n1)
		
		{
            dum = 1.0 / (m[j + jn]);
			
            for(i = j + 1; i < n; i++)
				
			{
  
				m[i + jn] *= dum;
            
			}
        }
    }
    
    return 1;
};

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色狠狠色噜噜噜综合网| 日韩免费看网站| 国产精品一区二区在线播放 | 精品欧美乱码久久久久久| 在线观看亚洲精品视频| 91香蕉视频mp4| 91麻豆成人久久精品二区三区| 成人污污视频在线观看| www.日本不卡| 91福利在线播放| 欧美日韩第一区日日骚| 欧美一级夜夜爽| 日韩美女在线视频 | 美女网站视频久久| 国产美女av一区二区三区| 首页亚洲欧美制服丝腿| 美国精品在线观看| 成人性生交大合| 日本电影亚洲天堂一区| 91精品国产综合久久久久久久久久| 欧美日韩一区精品| 日韩欧美一区二区久久婷婷| 久久只精品国产| 成人欧美一区二区三区白人| 国产精品免费免费| 一区二区在线观看视频| 麻豆国产精品官网| 91精品欧美综合在线观看最新| 在线播放欧美女士性生活| 精品免费视频.| 中文字幕中文字幕一区| 日韩精品久久理论片| 国产91在线观看丝袜| 色欧美88888久久久久久影院| 在线成人免费视频| 欧美国产日韩亚洲一区| 亚洲va韩国va欧美va精品| 久久97超碰色| 色婷婷亚洲一区二区三区| 精品久久久久久久久久久院品网| 国产精品成人免费在线| 日本网站在线观看一区二区三区 | 99久久免费视频.com| 日韩小视频在线观看专区| 亚洲欧美一区二区视频| 蜜臀国产一区二区三区在线播放| 成人性生交大片免费看在线播放| 欧美日本一区二区三区| 国产精品福利av| 激情综合色综合久久综合| 91久久精品一区二区二区| 久久精品男人的天堂| 午夜视频在线观看一区二区| av不卡在线播放| 国产午夜精品理论片a级大结局| 亚洲主播在线观看| www.亚洲色图| 中文字幕精品三区| 国内久久精品视频| 日韩一区二区三区视频在线| 一区二区欧美在线观看| 9i在线看片成人免费| 国产午夜精品理论片a级大结局| 美女久久久精品| 宅男在线国产精品| 亚洲成av人片在线观看| 在线亚洲免费视频| 中文字幕日韩精品一区| 成人午夜大片免费观看| 国产欧美一区二区精品性| 国产一区二区在线电影| 欧美mv日韩mv亚洲| 日日摸夜夜添夜夜添国产精品 | 樱桃视频在线观看一区| 91老师国产黑色丝袜在线| 国产女人18毛片水真多成人如厕| 老司机一区二区| 欧美一级专区免费大片| 老色鬼精品视频在线观看播放| 91.麻豆视频| 老汉av免费一区二区三区| 精品国产免费视频| 国产精品一区二区在线看| 中文字幕国产一区| 91浏览器在线视频| 伊人色综合久久天天人手人婷| 91视频免费播放| 亚洲国产va精品久久久不卡综合| 欧美色手机在线观看| 婷婷开心久久网| 日韩免费视频一区二区| 成人永久aaa| 亚洲最新在线观看| 日韩一区国产二区欧美三区| 色综合天天做天天爱| 一区二区成人在线视频| 欧美日韩国产成人在线免费| 蜜桃av噜噜一区| 国产欧美一区二区精品秋霞影院 | 欧美一级欧美三级| 国产一区二区三区黄视频| 国产午夜亚洲精品午夜鲁丝片 | 欧美在线|欧美| 奇米色一区二区| 中文字幕欧美国产| 欧洲亚洲精品在线| 久久99精品久久久| 综合激情网...| 欧美精品 日韩| 国产不卡视频在线播放| 亚洲第一福利视频在线| 2022国产精品视频| 在线观看视频欧美| 国产毛片精品一区| 亚洲在线视频免费观看| 久久这里只有精品6| 在线观看日产精品| 国产成人欧美日韩在线电影| 亚洲综合在线观看视频| xf在线a精品一区二区视频网站| 91蜜桃免费观看视频| 久久超碰97人人做人人爱| 亚洲少妇最新在线视频| 精品欧美黑人一区二区三区| 欧美日韩一区二区不卡| 成人精品视频一区二区三区尤物| 三级不卡在线观看| 亚洲在线观看免费视频| 国产精品久久一级| 久久一区二区三区四区| 欧美精品久久一区| 在线观看国产91| 色综合中文字幕国产 | 欧美色视频在线| 成人激情午夜影院| 韩国女主播一区二区三区| 五月开心婷婷久久| 一区二区三区久久| 亚洲三级电影全部在线观看高清| 精品国产污污免费网站入口| 7777精品伊人久久久大香线蕉最新版| 91蜜桃网址入口| 色综合天天在线| 波多野结衣欧美| 成人av资源站| 国产成人精品网址| 国产精品一区二区免费不卡| 精品在线播放午夜| 久久精品国产在热久久| 麻豆精品视频在线| 奇米影视在线99精品| 蜜桃精品视频在线| 精品在线你懂的| 国产成人一区在线| 成人午夜在线播放| 不卡视频在线看| 97久久超碰国产精品电影| 9i看片成人免费高清| 色偷偷久久人人79超碰人人澡| 94-欧美-setu| 91蝌蚪porny| 欧美亚洲另类激情小说| 欧美日韩电影一区| 精品精品国产高清a毛片牛牛| 亚洲视频在线观看一区| 国产精品国产精品国产专区不片| 国产精品丝袜一区| 亚洲欧美成人一区二区三区| 亚洲男人天堂av网| 亚洲午夜激情av| 免费成人在线观看| 国产成人精品一区二区三区网站观看 | 婷婷中文字幕一区三区| 精品在线观看免费| 91亚洲永久精品| 欧美巨大另类极品videosbest| 91麻豆精品国产91久久久更新时间| 欧美剧在线免费观看网站 | 欧美久久久久久久久| 91精品婷婷国产综合久久| 欧美va在线播放| 国产视频亚洲色图| 亚洲一区在线看| 国产精品综合一区二区| 色综合一个色综合亚洲| 91精品国产福利| 国产精品久久久久久亚洲伦 | 日韩欧美国产综合| 中文字幕av一区二区三区免费看 | 欧美高清视频一二三区 | 日韩毛片精品高清免费| 日本中文一区二区三区| 国产福利一区二区三区视频| 91麻豆高清视频| 国产婷婷色一区二区三区四区| 一区二区在线观看视频| 国产一区二区福利| 欧美电影一区二区| 中文字幕在线不卡一区| 久久99精品久久久久久国产越南|