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

📄 perform_moment_transform_mex.cpp

📁 matlab的工具箱
💻 CPP
字号:
// mex driver function#include "mex.h"#include "perform_moment_transform.h"void mexFunction(	int nlhs, mxArray *plhs[], 				 int nrhs, const mxArray*prhs[] ) { 	int n,k,k2,P;			// size	int dir;	/* retrieve arguments */	if( nrhs<4 ) 		mexErrMsgTxt("4 or 5 input arguments are required."); 	if( nlhs!=1 ) 		mexErrMsgTxt("1 output arguments are required."); 

	// first argument : v
	n = mxGetM(prhs[0]);
	if( n==1 )
		n = mxGetN(prhs[0]);
	v = mxGetPr(prhs[0]);
	// second argument : pos
	int a  = mxGetM(prhs[1]);
	int b  = mxGetN(prhs[1]);
	if( a!=2 || b!=n )		mexErrMsgTxt("pos must be of size 2xn."); 
	pos = mxGetPr(prhs[1]);
	// third argument : monomials
	a = mxGetM(prhs[2]);
	if( a!=2 )		mexErrMsgTxt("monomials must be of size 2x(2*k2)."); 
	k = mxGetN(prhs[2]);
	k2 = k >> 1;
	if( k!=2*k2 )		mexErrMsgTxt("monomials must be of even size."); 
	monomials = mxGetPr(prhs[2]);
	// fourth argument : dir
	dir = (int) *mxGetPr(prhs[3]);
	// fifth argument : part
	if( nrhs>=5 )
	{
		const mxArray* mx_part = prhs[4];
		if( !mxIsCell(mx_part) )			mexErrMsgTxt("part must be a cell array."); 
		P = mxGetNumberOfElements(mx_part);
		part = new double*[P];
		// construct G, part, and si
		G = new int[P];
		si = new int[P+1]; si[0] = 0;
		for( int i=0; i<P; ++i )
		{
			mxArray* parti = mxGetCell(mx_part, i);
			if( parti==NULL )
				mexErrMsgTxt("error in part.");  
			G[i] = mxGetNumberOfElements(parti);
			si[i+1] = si[i]+G[i];
			part[i] = mxGetPr(parti);
		}
	}
	else
	{
		P = -1;
		part = NULL;
	}

	// first ouput : y
	plhs[0] = mxCreateDoubleMatrix(n, 1, mxREAL); 
	w = mxGetPr(plhs[0]);	// perform the transform	perform_moment_transform(n, P, k, dir);	if( nrhs>=5 )
	{		// we are responsible for G and si		GW_DELETE( G );		GW_DELETE( si );
	}}

⌨️ 快捷键说明

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