⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lctoepinv.c

📁 speech signal process tools
💻 C
字号:
lctoepinv(R,iR,Rinv,iRinv,pdet,n)	/* natural log of determinant is returned */	/* R a vector of length n, Rinv a matrix of rank n */register double R[],iR[],Rinv[],iRinv[],*pdet;register int n;{	register int l,i,iM,j,jM,ss;	int N,rtflag,toggle;	static double *a,*ia,*p,Rt,iRt;	register double det,pt,dtemp;	double log();	N=n-1;	if(allocdp(&a,n*n))		{		printf("ctoepinv not possible due to storage limitations\n");		exit(1);		}	if(allocdp(&ia,n*n))		{		freedp(&a);		printf("ctoepinv not pollsible due to storage limitations\n");		exit(1);		}	if(allocdp(&p,n))		{		freedp(&a);		freedp(&ia);		printf("ctoepinv not possible due to storage limitations\n");		exit(1);		}		rtflag=cnormal(R,iR,a,ia,p,n);	if(rtflag==1)		{		freedp(&a);		freedp(ia);		freedp(&p);		*pdet=0;		return(1);		}		/* if(rtflag==2) printf("ctoep non-pos-definite\n"); */	det=0;	if(rtflag==0)		{		for(i=0;i<n;i++)			det+=log(p[i]);		}	if(rtflag==2)		{		toggle=1;		for(i=0;i<n;i++)			{			if((pt=p[i])<0)				{				toggle= -toggle;				pt= -pt;				}			det+=log(pt);			}		if(toggle!=1)			det=0;		}	*pdet=det;	for(i=0,iM=0;i<n;i++,iM+=n)		{		for(j=i,jM=i*n;j<n;j++,jM+=n)			{			Rt=0;			iRt=0;			for(l=0,ss=N*n;l<=i;l++,ss-=n)				toepmult(a[ss+i-l],-ia[ss+i-l],a[ss+j-l],ia[ss+j-l],&Rt,&iRt,p[N-l]);			Rinv[jM+i]=Rinv[iM+j]=Rt;			iRinv[iM+j]=iRt;			if(i!=j)				{				dtemp= -iRt;				iRinv[jM+i]=dtemp;				}			}		}		freedp(&a);	freedp(&ia);	freedp(&p);	return(rtflag);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -