1 0 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 0 z =
0.8333 -0.1667 -0.1667 0.2236 0.4472 -0.1667 0.8333 -0.1667 0.2236 0.4472 -0.1667 -0.1667 0.8333 0.2236 0.4472 -0.5000 -0.5000 -0.5000 0.2236 0.4472 0 0 0 -0.8944 0.4472 w =
-1 0 0 0 0 0 -1 0 0 0 0 0 -1 0 0 0 0 0 -1 0 0 0 0 0 4
由上面可以看出,K5的特征值为–1和4,其中–1是四重根。MATLAB提供了mexGetVariable、mexPutVariable函数,以实现MEX空间与其它空间交换数据的任务,具体可以参看MATLAB帮助文档。
4.建立二维双精度矩阵函数mxCreateDoubleMatrix
其格式具体如下: #include \
mxArray *mxCreateDoubleMatrix(int m, int n, mxComplexity ComplexFlag);
其中m代表行数,n代表列数,ComplexFlag可取值mxREAL 或mxCOMPLEX。如果创建的矩阵需要虚部,选择mxCOMPLEX,否则选用mxREAL。
类似的函数有: mxCreateCellArray mxCreateCellMatrix mxCreateCharArray
创建n维元胞mxArray 创建二维元胞mxArray 创建n维字符串mxArray
mxCreateCharMatrixFromStrings 创建二维字符串mxArray mxCreateDoubleMatrix mxCreateDoubleScalar mxCreateLogicalArray mxCreateLogicalMatrix mxCreateLogicalScalar mxCreateNumericArray mxCreateNumericMatrix mxCreateScalarDouble MxCreateSparse
mxCreateSparseLogicalMatrix MxCreateString mxCreateStructArray mxCreateStructMatrix
创建二维双精度浮点mxArray 创建指定值的二维精度浮点mxArray 创建n维逻辑mxArray,初值为false 创建二维逻辑mxArray,初值为false 创建指定值的二维逻辑mxArray 创建n维数值mxArray
创建二维数值mxArray,初值为0 创建指定值的双精度mxArray 创建二维稀疏mxArray 创建二维稀疏逻辑mxArray 创建指定字符串的1 n的串mxArray 创建n维架构mxArray 创建二维架构mxArray
5.获取行维和列维函数mxGetM、mxGetN
其格式如下: #include \
int mxGetM(const mxArray *array_ptr); int mxGetN(const mxArray *array_ptr); 与之相关的还有:
mxSetM:设置矩阵的行维 mxSetN:设置矩阵的列维
6.获取矩阵实部和虚部函数mxGetPr、mxGetPi
其格式如下: #include \
double *mxGetPr(const mxArray *array_ptr); double *mxGetPi(const mxArray *array_ptr); 与之相关的函数还有:
mxSetPr:设置矩阵的实部 mxSetPi:设置矩阵的虚部 【例3】实现字符串的倒序输出。
#include \
void revord(char *input_buf,int buflen,char *output_buf)
{
int i;
//实现字符串倒序 for(i=0;i *(output_buf+i)=*(input_buf+buflen-i-2); } void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[]) { //定义输入和输出参量的指针 char *input_buf,*output_buf; int buflen,status; //检查输入参数个数 if(nrhs!=1) mexErrMsgTxt(\ else if(nlhs>1) mexErrMsgTxt(\ //检查输入参数是否是一个字符串 if(mxIsChar(prhs[0])!=1) mexErrMsgTxt(\ //检查输入参数是否是一个行变量 if(mxGetM(prhs[0])!=1) mexErrMsgTxt(\ //得到输入字符串的长度 buflen=(mxGetM(prhs[0])*mxGetN(prhs[0]))+1; //为输入和输出字符串分配内存 input_buf=mxCalloc(buflen,sizeof(char)); output_buf=mxCalloc(buflen,sizeof(char)); //将输入参量的mxArray结构中的数值拷贝到C类型字符串指针 status=mxGetString(prhs[0],input_buf,buflen); if(status!=0) mexWarnMsgTxt(\truncated.\ //调用C程序 revord(input_buf,buflen,output_buf); plhs[0]=mxCreateString(output_buf); } 这个程序中需要注意的地方是mxCalloc函数,它代替了标准C程序中的calloc函数用于动态分配内存,而mxCalloc函数采用的是MATLAB的内存管理机制,并将所有申请的内存初始化为0,因此凡是C代码需要使用calloc函数的地方,对应的Mex文件应该使用mxCalloc函数。同样,凡是C代码需要使用realloc函数的地方,对应的Mex文件应该使用mxRealloc函数。 在MATLAB命令窗口中对revord.cpp程序代码编译链接: >> mex revord.cpp 在MATLAB命令窗口中对C-MEX文件revord.dll进行测试: >> x='I am student.'; >> revord(x) ans = .tneduts ma