当前位置:编程学习 > Matlab >>

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 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,