matlab vc 参数传递
参数问题
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);
}
补充:软件开发 , Vc ,