设为首页 加入收藏

TOP

matlab vc 参数传递
2014-11-23 20:10:58 来源: 作者: 【 】 浏览:52
Tags:matlab 参数 传递

参数问题

Matlab中最常使用的变量有三种,分别是标量、矩阵和元胞数组(Cell Array),我们只要掌握了这三种变量就可以对付大部分的需求了。在上面的例子中m函数MyStat(mStatMatrix,mNameMatrix,n)有三个输入参数,分别是二维矩阵mStatMatrix,元胞数组mNameMatrix和标量n。

mStatMatrix代表农作物产量矩阵,每行为一个地区,每行第一列为小麦产量,第二列为玉米产量;

mNameMatrix代表地区名称字符串数组;

n代表地区个数。

3.1 mxArray标量

建立一个标量最简单,只要将标量的值作为参数传入即可:

n = mxCreateScalarDouble(3);

3.2 mxArray矩阵

建立多维矩阵比较简单,但是给矩阵赋值则比较复杂。建立一个双精度数矩阵的函数如下:

mStatMatrix = mxCreateDoubleMatrix(4,2,mxREAL);

前两个参数代表二维矩阵是一个4*2的矩阵,最后一个代表这是一个实数矩阵。

给二维矩阵赋值是较为复杂的,首先要通过mxGetPr函数来得到矩阵存储数据的地址。然后通过[]符号来进行地址偏移将适当的值赋值给适当的地址。举例如下:

int mrows = mxGetM(mStatMatrix); //行数

int ncols = mxGetN(mStatMatrix); //列数

double* data = mxGetPr(mStatMatrix); //矩阵的数据地址

double setdata[4][2] = {{1,2},{3,4},{5,6},{7,8}}; //源数据

for (int i = 0; i < mrows; i++)

{

for (int j = 0; j < ncols; j++)

{

data[j*mrows+i] = setdata[i][j]; //注意这里的赋值,相当于转置矩阵赋值

}

}

给多维数组赋值时要特别注意:第一,mxArray的存储是先列后行的,而C语言是先行后列的,所以在赋值时相当于使用转置矩阵来赋值;第二要仔细防止下标越界,如果越界则程序运行时会崩溃。

3.3 元胞数组

元胞数组是matlab独有的数据类型。相当于将各种不同类型的变量集中到一个数组里面。此处我们用元胞数组来存储多个字符串。

创建元胞数组的函数如下:

mxArray *mxCreateCellArray(int ndim, const int *dims);

参数ndim指示元胞数组的维数,参数dims实际上是一个int数组,存储了各维的长度。下面创建了一个一维数组,长度为4.

//创建一个Cell数组来存放字符串数组

const int dim[1] = {3};

mNameMatrix = mxCreateCellArray(1,dim);

给Cell数组赋值比较简单,即使用mxCreateString创建多个字符串然后用mxSetCell将字符串赋值给元胞数组:

for (int x = 0; x < 4; x++)

{

char szTmp[10];

sprintf(szTmp,"地区%d",x+1);

mxArray* m = mxCreateString(szTmp);

mxSetCell(mNameMatrix,x,m);

}
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇matlab 7与vc/mfc混合编程 脱离运.. 下一篇VC给自定义按钮加上事件操作

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: