matlab - c(3)

2019-04-16 14:20

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


matlab - c(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:不同牧草品种混播组合对株高和产量的影响

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: