当前位置:文档之家› C++和MATLAB的相互调用及多维动态数组定义方式

C++和MATLAB的相互调用及多维动态数组定义方式

C++和MATLAB的相互调用及多维动态数组定义方式
C++和MATLAB的相互调用及多维动态数组定义方式

转载:VC++与Matlab混合编程之引擎操作详解(1)

2009-12-18 10:51

Visual C++是当前主流的应用程序开发环境之一,开发环境强大,开发的程序执行速度快。但在科学计算方面函数库显得不够丰富、读取、显示数据图形不方便。Matlab是一款将数值分析、矩阵计算、信号处理和图形显示结合在一起,包含大量高度集成的函数可供调用,适合科学研究、工程设计等众多学科领域使用的一种简洁、高效的编程工具。不过由于Matlab使用的是解释性语言,大大限制了它的执行速度和应用场合。基于VC和Matlab混合编程是很多熟悉VC++编程而又需要进行科学计算、数据仿真的科研人员常用的一种方式,其中最简单也最直接的方法就是调用Matlab引擎。本文以下部分将详细介绍通过VC++6.0调用Matlab6.5引擎来达到VC++与Matlab数据共享编程的方法。

1. 什么是Matlab引擎

所谓Matlab引擎(engine),是指一组Matlab提供的接口函数,支持C/C++、Fortran等语言,通过这些接口函数,用户可以在其它编程环境中实现对Matlab 的控制。可以主要功能有:

★打开/关闭一个Matlab对话;

★向Matlab环境发送命令字符串;

★从Matlab环境中读取数据;

★向Matlab环境中写入数据。

与其它各种接口相比,引擎所提供的Matlab功能支持是最全面的。通过引擎方式,应用程序会打开一个新的Matlab进程,可以控制它完成任何计算和绘图操作。对所有的数据结构提供100%的支持。同时,引擎方式打开的Matlab进程会在任务栏显示自己的图标,打开该窗口,可以观察主程序通过engine方式控制Matlab运行的流程,并可在其中输入任何Matlab命令。

实际上,通过引擎方式建立的对话,是将Matlab以ActiveX控件方式启动的。在Matlab初次安装时,会自动执行一次:

matlab /regserver

将自己在系统的控件库中注册。如果因为特殊原因,无法打开Matlab引擎,可以在Dos命令提示符后执行上述命令,重新注册。

2. 配置编译器

要在VC中成功编译Matlab引擎程序,必须包含引擎头文件engine.h并引入Matlab对应的库文件libmx.lib、libmat.lib、libeng.lib。具体的说,打开一个工程后,做如下设置(以VC6为例):

1) 通过菜单工程/选项,打开设置属性页,进入Directories页面,在目录下拉列表框中选择Include files,添加路径:"C:\matlab\extern\include"(假定matlab安装在C:\matlab目录)。

2) 选择Library files,添加路径:C:\matlab\extern\lib\win32\microsoft\msvc60。(vs2005的话,不加msvc60)

3) 通过菜单工程/设置,打开工程设置属性页,进入Link页面,在Object/library modules编辑框中,添加文件名libmx.lib libmat.lib libeng.lib。

以上步骤1)、2)只需设置一次,而步骤3)对每个工程都要单独设定,对于其它

C++编译器如Borland C++ builder,设置大体相同,不再赘述。

转载:VC++与Matlab混合编程之引擎操作详解(2)引擎API详解

2009-12-18 10:52

3. 引擎API详解

在调用Matlab引擎之前,首先应在相关文件中加入一行:#include "enging.h",该文件包含了引擎API函数的说明和所需数据结构的定义。可以在VC中调用的引擎函数分别如下:

3.1 引擎的打开和关闭

engOpen-打开Matlab engine

函数声明:

Engine *engOpen(const char *startcmd);

参数startcmd是用来启动Matlab引擎的字符串参数,在Windows操作系统中只能为NULL。

函数返回值是一个Engine类型的指针,它是在engine.h中定义的engine数据结构。

EngClose-关闭Matlab 引擎

函数声明:

int engClose(Engine *ep);

参数ep代表要被关闭的引擎指针。

函数返回值为0表示关闭成功,返回1表示发生错误。

例如,通常用来打开/关闭Matlab引擎的代码如下:

Engine *ep; //定义Matlab引擎指针。

if (!(ep=engOpen(NULL))) //测试是否启动Matlab引擎成功。

{

MessageBox("Can't start Matlab engine!" );

exit(1);

}

. …………

engClose(ep); //关闭Matlab引擎。

3.2 向Matlab发送命令字符串

engEvalString-发送命令让Matlab执行。

函数声明:

int engEvalString(Engine *ep, Const char *string);

参数ep为函数engOpen返回的引擎指针,字符串string为要matlab执行的命令。函数返回值为0表示成功执行,返回1说明执行失败(如命令不能被Matlab正确解释或Matlab引擎已经关闭了)。

3.3 获取Matlab命令窗口的输出

要在VC中获得函数engEvalString发送的命令字符串被Matlab执行后在matlab 窗口中的输出,可以调用engOUtputBuffer函数。

函数声明:

int engOutputBuffer(Engine *ep, char *p, int n);

参数ep为Matlab引擎指针,p为用来保存输出结构的缓冲区,n为最大保存的字符个数,通常就是缓冲区p的大小。该函数执行后,接下来的engEvalString

函数所引起的命令行输出结果会在缓冲区p中保存。如果要停止保存,只需调用代码:engOutputBuffer(ep, NULL, 0)。

3.4 读写Matlab数据

3.4.1从Matlab引擎工作空间中获取变量。

mxArray *engGetVariable(Engine *ep, const char *name);

参数ep为打开的Matlab引擎指针,name为以字符串形式指定的数组名。

函数返回值是指向name数组的指针,类型为mxArray*(mxArray数据类型在本文第4节详细简介)。

3.4.2 向Matlab引擎工作空间写入变量。

int engPutVariable(Engine *ep, const char *name, const mxArray *mp);

参数ep为打开的Matlab引擎指针,mp为指向被写入变量的指针,name为变量写入后在Matlab引擎工作空间中的变量名。

函数返回值为0表示写入变量成功,返回值为1表示发生错误。

3.5 调用引擎时显示/隐藏Matlab主窗口

默认情况下,以engine方式调用Matlab的时候,会打开Matlab主窗口,可在其中随意操作。但有时也会干扰应用程序的运行,可用以下设置是否显示该窗口。int engSetVisible(Engine *ep, bool value);

参数ep为打开的Matlab引擎指针,value为是否显示的标志,取值true(或1)表示显示Matlab窗口,取值false(或0)表示隐藏Matlab窗口。

函数返回值为0表示设置成功,为1表示有错误发生。

要获得当前Matlab窗口的显示/隐藏情况,可以调用函数:

int engGetVisible(Engine *ep, bool *value);

参数ep为打开的Matlab引擎指针,Value为用来保存显示/隐藏情况的变量(采用指针方式传递)。

函数返回值为0表示获取成功,为1表示有错误发生。

转载:VC++与Matlab混合编程之引擎操作详解(3)数据类型mxArray的操作2009-12-18 10:57

4. 数据类型mxArray的操作

在上节的Matlab引擎函数中,所有与变量有关的数据类型都是mxArray类型。数据结构mxArray以及大量的mx开头的函数,广泛用于Matlab 引擎程序和Matlab C数学库中。mxArray是一种很复杂的数据结构,与Matlab中的array相对应,我们只需熟悉Matlab的array类型和几个常用的mxArray函数即可。

在VC中,所有和Matlab的数据交互都是通过mxArray来实现的,在使用mxArray 类型的程序中,应包含头文件matrix.h,不过在引擎程序中,一般会包含头文件engine.h,该文件里面已经包含了matrix.h,因此无需重复包含。

4.1 创建和清除mxArray型数据

Matlab有很多种变量类型,对应于每种类型,基本上都有一个函数用于创建,但它们都有相同的数据结构,就是mxArray。

数组的建立采用mxCreatexxx形式的函数,例如新建一个double类型数组,可用函数mxCreateDoubleMatrix,函数形式如下:

mxArray *mxCreateDoubleMatrix(int m, int n, mxComplexity ComplexFlag);

参数m和n为矩阵的函数和列数。ComplexFlag为常数,用来区分矩阵中元素是

实数还是复数,取值分别为mxREAL和mxCOMPLEX。

例如,创建一个3行5列的二维实数数组,可用如下语句:

mxArray *T = mxCreateDoubleMatrix(3, 5, mxREAL);

对应的,要删除一个数组mxDestroyArray,该函数声明如下:

void mxDestroyArray(mxArray *array_ptr);

参数array_ptr为要删除的数组指针。

例如,要删除上面创建的数组T,可用如下语句:

mxDestroyArray(T);

类似的创建函数还有:

mxArray *mxCreateString(const char *str);

创建一个字符串类型并初始化为str字符串。

一般的在VC与Matlab交互中,以上两种类型就够了,其它类型数组的创建这里不再介绍。

4.2 管理mxArray数据类型

4.2.1 管理mxArray数据大小

要获得mxArray数组每一维上元素的个数,可以用mxGetM和mxGetN函数。其中mxGetM用来获得数组第一维的元素个数,对于矩阵来说就是行数。

int mxGetM(const mxArray *array_ptr); //返回array_ptr对应数组第一维的元素个数(行数)

int mxGetN(const mxArray *array_ptr); //返回array_ptr对应数组其它维的元素个数,对于矩阵来说是列数。对于多维数组来说是从第2维到最后一维的各维元素个数的乘积。

要获得某一特定维的元素个数,则要用函数:

const int *mxGetDimensions(const mxArray *array_ptr);

该函数返回array_ptr各维的元素个数保存在一个int数组中返回。对于常用的矩阵来说,用mxGetM和mxGetN两个函数就可以了。

另外还可以通过mxGetNumberOfDimensions来获得数组的总的维数,用mxSetM、mxSetN设置矩阵的行数和列数,函数说明如下:

int mxGetNumberOfDimensions(const mxArray *array_ptr); //返回数组的维数

void mxSetM(mxArray *array_ptr, int m); //设置数组为m行

void mxSetN(mxArray *array_ptr, int n); //设置数组为n列

4.2.2 判断mxArray数组类型

在对mxArray类型的变量进行操作之前,可以验证以下其中的数组的数据类型,比如是否为double数组、整数、字符串、逻辑值等,以及是否为某种结构、类、或者是特殊类型,比如是否为空数组,是否为inf、NaN等。常见的判断函数有:bool mxIsDouble(const mxArray *array_ptr);

bool mxIsComplex(const mxArray *array_ptr);

bool mxIsChar(const mxArray *array_ptr);

bool mxIsEmpty(const mxArray *array_ptr);

bool mxIsInf(double value);

…………

这些函数比较简单,意义自明,不再解释。

4.2.3 管理mxArray数组的数据

对于常用的double类型的数组,可以用mxGetPr和mxGetPi两个函数分别获得

其实部和虚部的数据指针,这两个函数的声明如下:

double *mxGetPr(const mxArray *array_ptr); //返回数组array_ptr的实部指针double *mxGetPi(const mxArray *array_ptr); //返回数组array_ptr的虚部指针

这样,就可以通过获得的指针对mxArray类型的数组中的数据进行读写操作。例如可以用函数engGetVariable从Matlab工作空间读入mxArray类型的数组,然后用mxGetPr和mxGetPi获得数据指针,对并其中的数据进行处理,最后调用engPutVariable函数将修改后的数组重新写入到Matlab工作空间。具体实现见第5节程序实例。

转载:VC++与Matlab混合编程之引擎操作详解(3)数据类型mxArray的操作

2009-12-18 10:57

5. 程序实例

对大部分软件研发人员来说利用VC编程方便、高效,但是要显示数据图形就不那么容易了,这时候不防借助Matlab引擎辅助画图做数据分析。下面通过实例演示如何利用VC调用Matlab绘图,程序的主要功能是在VC中对数组x计算函数值y=sin(x) ±log(x),然后调用Matlab绘制y对x的图形。

在VC中新建工程,编写代码如下:

#include

#include

#include "engine.h"

using namespace std;

void main()

{

const int N = 50;

double x[N],y[N];

int j = 1;

for (int i=0; i

{

x[i] = (i+1);

y[i] = sin(x[i]) + j * log(x[i]); //产生-之间的随机数赋给xx[i];

j *= -1;

}

Engine *ep; //定义Matlab引擎指针。

if (!(ep=engOpen(NULL))) //测试是否启动Matlab引擎成功。

{

cout <<"Can't start Matlab engine!" <

exit(1);

}

//定义mxArray,为行,N列的实数数组。

mxArray *xx = mxCreateDoubleMatrix(1,N, mxREAL);

mxArray *yy = mxCreateDoubleMatrix(1,N, mxREAL); //同上。

memcpy(mxGetPr(xx), x, N*sizeof(double)); //将数组x复制到mxarray数组xx中。memcpy(mxGetPr(yy), y, N*sizeof(double)); //将数组x复制到mxarray数组yy中。

engPutVariable(ep, "xx",xx); //将mxArray数组xx写入到Matlab工作空间,命名为xx。

engPutVariable(ep, "yy",yy); //将mxArray数组yy写入到Matlab工作空间,命名为yy。

//向Matlab引擎发送画图命令。plot为Matlab的画图函数,参见Matlab相关文档。

engEvalString(ep, "plot(xx, yy); ");

mxDestroyArray(xx); //销毁mxArray数组xx和yy。

mxDestroyArray(yy);

cout <<"Press any key to exit!" <

cin.get();

engClose(ep); //关闭Matlab引擎。

}

编译并运行程序得结果入下图:

本文详细的介绍了Matlab引擎使用方法并演示了一个简单的利用VC调用Matlab画图的程序实例。大多数时候,程序员可以利用Matlab强大的数据读写、显示能力和VC编程的高效率。例如,在Matlab中要读入一幅任意格式的图像均只需一条命令i=imread('test.jp');图像数据矩阵便存放在了二维数组i中,可以通过VC读入该数组进行相关处理再调用Matlab显示,这种混合编程方式能大大提高工作效率。

当然,利用VC编译的Matlab引擎程序,运行环境中还必须Matlab的支持,如果要编译完全脱离Matlab的程序,可采用其它方式,如利用第三方Matcom程序编译独立的可执行程序等。

如何在VC++中调用matlab的求行列式和逆矩阵函数

(2010-05-23 17:06:01) 分类:C++方向 1.建立vc工程

2.在vc-->工具->选择-->目录下添加路径

所在matlab目录\extern\include

所在matlab目录\extern\include\cpp

3.注意所在matlab目录\extern\lib\win32\microsoft\msvc60中的*.lib文件它们与你调用的函数有关,如engOpen与libeng.lib有关mx***与libmx.lib 有关,将用到的库文件拷贝到你的vc工程目录下并添加进工程

4.#include "engine.h",添加实现你功能的代码,具体可以参照范例程序完成。#include "engine.h"

#include "math.h"

#include "iostream"

#include "matrix.h"

using namespace std;

#define V5_COMPAT

#pragma comment (lib,"libmatlb.lib")

#pragma comment (lib,"libmx.lib")

#pragma comment (lib,"libeng.lib") 另外:在Include Path中,加入目录路径< matlab >\extern\include,该路径包含了engine.h和matlab.h等有用

的头文件。 Library Path中,加入< matlab >\bin和< matlab >\extern\include。这两个目录路径包含了可外部调用的DLL和LIB文件。

其它代码如下://已知矩阵a,长度为N,求其行列式和逆矩阵 Engine *ep;//定义matlab引擎指针

if(!(ep=engOpen(NULL)))

{

MessageBox(NULL,"引擎打开失败","",MB_OK);return 0;

}

//定义mxArray ,为行,N列的实数数组

mxArray *aa=mxCreateDoubleMatrix(N,N,mxREAL);

memcpy(mxGetPr(aa),a,N*N*sizeof(double)); engPutVariable(ep,"aa",aa); engEvalString(ep,"dett=det(aa);");

engEvalString(ep,"bb=inv(aa);"); mxDestroyArray(aa); mxArray

*dett=engGetVariable(ep,"dett");

mxArray *b=engGetVariable(ep,"bb");

if(dett==NULL)

{

MessageBox(NULL,"dett==NULL","dett==NULL",MB_OK);

return ;

}

if(b==NULL)

{

MessageBox(NULL,"bb==NULL","bb==NULL",MB_OK);

return ;

}

double *dettt=mxGetPr(dett);//dett为所求行列式

double *bb=mxGetPr(b);//bb为所求逆矩阵

engClose(ep);//关闭matlab引擎

本文来自: 高校自动化网(https://www.doczj.com/doc/818441403.html,) 详细出处参考(转载请保留本链接):https://www.doczj.com/doc/818441403.html,/html/matlab/8532.html

问题:

大侠求解·~~

在VC中调用matlab engine本来不是难的事情,但是我遇到不解的问题。

在vc中,数组都是以内存单位存放的吧,有以下的程序段:

我要求解的是这样的一个问题,有一个n*n的数组invN,将这个数组求逆后和另外一个列矩

阵Q_Array1相乘,问题在这里,就是Qx数组的元素好像不能传到mxArray类型的Q_Array1

矩阵中~就是***行

,Qx是一个一维double型的数组Qx[0]...

最后的Px想将这个计算的结构取出来,好像不成功~~到底是哪里出了问题呢??

请大家指教一下~~我也是刚刚开始用这个matlab engine的~不是很懂

Engine *ep;

if(!(ep=engOpen(NULL)))//deal with the error situation

{

printf("error!!Can't open Matlab!!");

exit(1);

}

mxArray *invN=mxCreateDoubleMatrix(n,n,mxREAL);//创建invN数组存储inverse_N mxArray *Q_Array1=mxCreateDoubleMatrix(n,1,mxREAL);

memcpy(mxGetPr(invN),inverse_N,n*n*sizeof(double));

memcpy(mxGetPr(Q_Array1),Qx,n*sizeof(double)); *******

engPutV ariable(ep,"invN",invN);

engPutV ariable(ep,"Q_Array1",Q_Array1);

engEvalString(ep,"a=inv(invN)*Q_Array1;");

mxDestroyArray(invN);

mxDestroyArray(Q_Array1);

mxArray *ans1=engGetVariable(ep,"a");

if(ans1==NULL)

{

printf("ans errors!!\n");

}

double *Px=mxGetPr(ans1);

在C++中如何定义一个动态数组,使用关键字new !(包括一维数组和二维数组!自己百度的!)

动态定义一个二维数组有两层的意思,第一维是一个指针数组,第二维就是第一维中每个指针所指向的数组,下面是一个实例:

int** ptr1 = new int*[4]; //先定义第一维,他们是一个指针数组,这里是int 类型。因为是指向指针的数组所有所用了int**

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

ptr1[i] = new int[4]; //第一维中的每个指针又是指向一个数组的。

下面是一个程序可以看看:

int main(int argc, char* argv[])

{

int** ptr = new int*[4];

int i,j;

for(i=0;i<4;i++)

ptr[i] = new int[5];//创建第二维!矩阵为4行5列!

for(i=0;i<4;i++) //为每一个数赋值

for(j=0;j<5;j++)

ptr[i][j] = i*j;

for(i=0;i<4;i++) //将所有的数值显示出来

{

for(j=0;j<5;j++)

{

cout<

}

cout<

}

return 0;

}

1.#include

https://www.doczj.com/doc/818441403.html,ing namespace std;

3.

4.class T

5.{

6. public:

7. T() {cout<<"in T constructor."<

8. ~T(){cout<<"in T destructor."<

9.};

10.

11.int main()

12.{

13. //char **p = new char[10][10]; // 错误:不能将‘char (*)[10]’

转换为‘char**’,在 initialization 中

14. int const t = 3; int j=2;

15. T (*pt)[t] = new T[j][t]; //t必须为const,否则报错,错误:

‘t’ 不能出现在常量表达式中 .使用new时,构造函数会执行

16. cout<<"sizeof(class T)="<

17. cout<<"sizeof(pt)="<

18. cout<<"sizeof(*pt)="<

19. cout<<"sizeof(pt[1])="<

20. delete []pt; //析构会执行

21.

22. int m = 10;

23. int n = 12;

24. char **p = new char*[m]; //创建第一维

25. for(int i=0; i

26. p[i] = new char[n]; //再创建第二维,缺点:非连续储存,

程序烦琐,p为char**类型优点:调用直观,n可以不是已知

27.

28. cout<<"sizeof(p)="<

29. cout<<"sizeof(*p)="<

30. cout<<"sizeof(p[1])="<

31.

32. for(int i=0; i

33. delete []p[i]; //先释放第二维

34. delete []p; //再释放第一维

35.

36. return 0;

37.}

#include

...

vector > arr;

够动态吧?

自己理解这个用法!如何使用vector!

动态定义一维数组!

第一种方法:动态内存分配。new 和delete(它们应该总是成对出现的)

int *p = NULL;//这里也可以写成int *p;

int n;

cin >> n;

p = new int[n];

p现在指向分配的这段内存的首地址,就相当于在使用数组时,数组名字代表的功能,之后就可以像使用数组那样来写用了。比如:p[i];

......

delete []p;如果不写这个,就会造成内存的泄露。

第二种方法:定义一个类,在类里面可以实现自由定义长度。定义自己的类是为了改进C++中对一维数组支持不足的原因。在C++中,可以访问a[-4],即使知道这个索引值是不对的,这样,就会产生很多莫名的错误。

定义一个自己的类,还可以实现很多其他的功能,比如说:数组之间直接的算数运算。

C++中动态定义一维数组,二维数组,三维数组

//动态定义一维数组、二维数组、三维数组

#include

#include

using namespace std ;

int main()

{

int hight , row , col ;

register int i , j , k ;

srand((unsigned)time(NULL)) ;

cout<<"输入一维数组的行"<

cin>>row ;

//动态定义一维数组

int *p1 ;

p1 = new int [row] ;

//输入一维数组的值

for( i = 0 ; i < row ; i ++ )

p1[i] = rand () % 10 ;

//输出一维数组

for( i = 0 ; i < row ; i ++ )

cout<

cout<

//释放一维数组

delete [] p1 ;

1.cout<<"输入二维数组的行,列:";

cin>>row >>col ;

//动态定义二维数组

int **p2 ;

p2 = new int*[row] ;//创建第一维,row为行的意思!

2.

for( i = 0 ; i < row ; i ++ ) //创建第二维,col为列的意思!

p2[i] = new int[col] ;

//输入二维数组的值

for( i = 0 ; i < row ; i ++ )

for( j = 0 ; j < col ; j ++ )

p2[i][j] = rand() % 10 ;

//输出二维数组

cout<<"输出二位数组:"<

for( i = 0 ; i < row ; i ++ )

{

for( j = 0 ;j < col ; j ++ )

cout<

cout<

}

//释放二维数组

for( i = 0 ; i < row ; i ++ )

delete []p2[i] ;

delete []p2 ;

3.cout<<"输入三维数组高,行,列: ";

cin>>hight>>row >> col ;

//动态定义三维数组:

int *** p3 ;

p3 = new int**[hight ] ;

for( i = 0 ; i < hight ; i ++ )

p3[i] = new int*[row] ;

for( i = 0 ; i < hight ; i ++ )

for( j = 0 ; j < row ; j ++ )

p3[i][j] = new int[col] ;

//输入三维数组值:

for(i = 0 ; i < hight ; i ++ )

for(j = 0 ; j < row ; j ++ )

for( k = 0 ; k < col ; k ++)

p3[i][j][k] = rand()%10 ;

//输出三维数组:

cout<<"输出三维数组"<

for(i = 0 ; i < hight ; i ++ )

{

for( j = 0 ; j < row ; j ++ )

{

for( k = 0 ; k < col ; k ++ )

cout<

cout<

}

cout<

}

//释放三维数组

for( i = 0 ; i < hight ; i ++ )

for( j = 0 ; j < row ; j ++ )

delete []p3[i][j] ;

for( i = 0 ; i < hight ; i ++ )

delete []p3[i] ;

delete []p3 ;

return 0 ;

}

VC++中如何调用matlab函数

Visual C++是当前主流的应用程序开发环境之一,开发环境强大,开发的程序执行速度快。但在科学计算方面函数库显得不够丰富、读取、显示数据图形不方便。Matlab是一款将数值分析、矩阵计算、信号处理和图形显示结合在一起,包含大量高度集成的函数可供调用,适合科学研究、工程设计等众多学科领域使用的一种简洁、高效的编程工具。不过由于Matlab使用的是解释性语言,大大限制了它的执行速度和应用场合。基于VC和Matlab混合编程是很多熟悉VC++编程而又需要进行科学计算、数据仿真的科研人员常用的一种方式,其中最简单也最直接的方法就是调用Matlab引擎。本文以下部分将详细介绍通过VC++6.0调用Matlab6.5引擎来达到VC++与Matlab数据共享编程的方法。 1. 什么是Matlab引擎 所谓Matlab引擎(engine),是指一组Matlab提供的接口函数,支持C/C++、Fortran等语言,通过这些接口函数,用户可以在其它编程环境中实现对Matlab 的控制。可以主要功能有: ★打开/关闭一个Matlab对话; ★向Matlab环境发送命令字符串; ★从Matlab环境中读取数据; ★向Matlab环境中写入数据。 与其它各种接口相比,引擎所提供的Matlab功能支持是最全面的。通过引擎方式,应用程序会打开一个新的Matlab进程,可以控制它完成任何计算和绘图操作。对所有的数据结构提供100%的支持。同时,引擎方式打开的Matlab 进程会在任务栏显示自己的图标,打开该窗口,可以观察主程序通过engine方式控制Matlab运行的流程,并可在其中输入任何Matlab命令。 实际上,通过引擎方式建立的对话,是将Matlab以ActiveX控件方式启动的。在Matlab初次安装时,会自动执行一次: matlab /regserver

数组和矩阵的关系 MATLAB

数组和矩阵的关系 摘要:数组和矩阵式MATLAB中基本的数据存在形式。一方面,数组是数据结构中的概念,有利于计算机实现层次上的计算;另一方面,矩阵是线性代数中的概念,有利于数学层次上的计算。 关键词:数组,矩阵,MATLAB 我们可以确定数组与矩阵之间的关系:(1)一维数组可以表示行向量或列向量;(2)二维数组可以表示为矩阵。所以,矩阵运算可以看作是基于数组实现的高级运算。 所谓数组,就是相同数据类型的元素按一定顺序排列的集合,即把有限个类型相同的变量用一个名字命名,用编号区分每个元素的变量的集合,这个名字称为数组名,编号称为下标。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。我们必须清楚,数组是用于程序设计的数据结构中的概念,并不是数学上的概念,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来的一种形式。为了实现某种数学运算,可以使用数组来描述某种类型的变量。简而言之,数组的运算是对所有元素进行相同运算。 一,数组与矩阵的创建 直接输入法是创建数组最简单的方法。而且此方法可以自由指定元素的数值。采用基本规则是:(1)所有元素必须用方括号“[ ]”括起来;(2)元素之间必须用逗号“,”或空格“”分割;(3)每个元素可以用MATLAB表达式表示,既可以是实数,也可以是复数。通常,很多数组依赖数据最大值和最小值来产生数组的元素。区间限定法可以代替直接输入法中由用户计算元算的过程,依据指定数据的最大值last和最小值first 自动生成数组的每个元素。与一维数组相比,二维数组增加了一个维度,所以创建方法有所不同。直接输入法的使用增加了一个新规则:在方括号“[ ]”内的行与行之间必须用分号“;”分隔。区间限定法也可以直接用于二维数组的创建。 与数组的创建相似,矩阵的创建可以采用直接输入法。矩阵创建的基本规则是(1)所有元素必须用方括号“[ ]”括起来;(2)在[ ]内矩阵的行与行之间必须用分号“;”分隔;(3)元素之间必须用逗号“,”分隔;(4)每个元素可以用MATLAB表达式表示,既可以是实数,也可以是复数。 二,数组与矩阵的访问

(完整版)matlab中使用结构体汇总

matlab中使用结构体 结构(struct)数组 要在MALTAB中实现比较复杂的编程,就不能不用struct类型。而且在MATLAB中实现struct比C中更为方便。 4. 3.1 结构数组的创建 MATLAB提供了两种定义结构的方式:直接应用和使用struct函数。 1. 使用直接引用方式定义结构 与建立数值型数组一样,建立新struct对象不需要事先申明,可以直接引用,而且可以动态扩充。比如建立一个复数变量x: x.real = 0; % 创建字段名为real,并为该字段赋值为0 x.imag = 0 % 为x创建一个新的字段imag,并为该字段赋值为0 x = real: 0 imag: 0 然后可以将旗动态扩充为数组: x(2).real = 0; % 将x扩充为1×2的结构数组 x(2).imag = 0; 在任何需要的时候,也可以为数组动态扩充字段,如增加字段scale:x(1).scale = 0;

这样,所有x都增加了一个scale字段,而x(1)之外的其他变量的scale字段为空: x(1) % 查看结构数组的第一个元素的各个字段的内容 ans = real: 0 imag: 0 scale: 0 x(2) % 查看结构数组的第二个元素的各个字段的内容,注意没有赋值的字段为空 ans = real: 0 imag: 0 scale: [] 应该注意的是,x的real、imag、scale字段不一定是单个数据元素,它们可以是任意数据类型,可以是向量、数组、矩阵甚至是其他结构变量或元胞数组,而且不同字段之间其数据类型不需要相同。例如: clear x; x.real = [1 2 3 4 5]; x.imag = ones(10,10); 数组中不同元素的同一字段的数据类型也不要求一样: x(2).real = '123'; x(2).imag = rand(5,1);

Matlab使用单元数组和结构数组

Matlab使用单元数组(cell array)和结构数组(struct array) 要在MALTAB中实现比较复杂的编程,就不能不用单元数组(cell array)和结构数组(structarray)。而且在Matlab中实现struct比C中更为方便。 一. 单元数组 单元数组中的每一个元素称为单元(cell). 单元可以包含任何类型的matlab数据, 这些数据类型包括数值数组, 字符, 符号对象, 甚至其他的单元数组和结构体. 不同的单元可以包含不同的数据. 1.1单元数组创建与显示: 1、直接赋值法:按单元索引法和按内容索引法。(其实也就是将花括号放在等式的右边或是左边的区别)。注意:“按单元索引法”和“按内容索引法”是完全等效的,可以互换使用。通过下面实例,我们看到:花括号{}用于访问单元的值,而括号()用于标识单元(即:不用于访问单元的值)。具体理解{}和()区别可以在下面代码最后分别输入A{2,2}和A(2,2)。就会发现“按内容索引法{}”能显示完整的单元内容,而“按单元索引法()”有时无法显示完整的单元内容。 >> A(1,1)={[1 2 3; 4 5 6;7 8 9]}; % 按单元索引法 >> A(1,2)={2+3i}; >> A(2,1)={'A character'}; >> A(2,2)={12:-2:0}; >> A%要想详细显示A中的内容,可用指令:celldisp(A) A = [3x3 double] [2.0000 + 3.0000i] 'A character' [1x7 double] >> B{1,1}=[1 2 3;4 5 6;7 8 9]; % 按内容索引法。 >> B{1,2}=2+3i; >> B{2,1}='A character'; >> B{2,2}=12:-2:0; >>B B = [3x3 double] [2.0000 + 3.0000i] 'A character' [1x7 double] 2、利用cell函数法:即首先用cell函数生成一个空的单元数组,然后再向其中添加所需的数据。下面的代码生成一个2X3的空单元数组: >> C=cell(2,3) C = [] [] [] [] [] [] 利用cell生成空单元数组后,可以采用“按单元索引法”和“按内容索引法”对其进行赋值。在赋值时,用户一定要注意{}和()的用法。 >> C(1,1)={'This does work'} C = 'This does work' [] [] [] [] [] >> C{2,3}='This work' C = 'This does work' [] [] [] [] 'This work'

matlab中数组元素引用解析

Matlab中数组元素引用有三种方法: 1.下标法(subscripts) 2.索引法(index) 3.布尔法(Boolean) 在使用这三种方法之前,大家头脑一定要清晰的记住,Matlab中数组元素是按列存储(与Fortran一样),比如说下面的二维数组 A= 8 1 6 3 5 7 4 9 2 Matlab的存储顺序是8,3,4,1,5,9,6,7,2,也就是说先行后列,对于3维数组呢,就是先行后列再页 对应个元素的索引和下标分别为 Element Index Subscripts 8 1 (1,1) 3 2 (2,1) 4 3 (3,1) 1 4 (1,2) 5 5 (2,2) 9 6 (3,2) 6 7 (1,3)

7 8 (2,3) 2 9 (3,3) 从上面的例子中已经很清晰的说明了下标和索引的区别了,也就是说Matlab为没有个元素分配了一个唯一识别的ID(即index) 1.下标法引用 A(ii,jj):其中ii和jj可以是一维向量、标量、“:”号或者“end” 大家对下标估计比较熟悉,由于在C语言中接触过,但是我这里需要强调的是,Matlab的下标是可以多行多列同时引用的,而像C语言等一次只能引用一个,比如 A(2:3,3:-1:1)表示引用数组中的2~3行,3~1列对应的元素 A(:,end)表示引用最后一列元素,“:”表示所有列或行,“end”表示最后一列或列,“en d-n”表示倒数第n行或列 A(1,end-1)表示引用第1行倒数第2个元素 A([2 1 3 3],[1 1 2 2 1])表示引用按两个向量引用指定的元素,即A中的第2,1,3,3行和第1,1,2,2,1列对应的元素 >>A=magic(3) A = 8 1 6 3 5 7 4 9 2

第5章 matlab数组和数组运算(2)

1. 标准数组:全1数组,全0数组,单位矩阵,随机矩阵,对角矩阵以及元素为指定常数的数组。 2.全1数组用ones函数,全0数组用zeros函数。 对于ones和zeros函数,当只有一个输入参数时,即ones(n)或 zeros(n),Matlab就分别生成一个n×n的全1或者全0数组。当有两个输入参数时,即ones(r,c)或者zeros(r,c),Matlab就分别生成r 行c列的全1或者全0数组。要想生成一个与其他数组相同维数的全1或者全0数组,用户只要在ones或者zeros的参数中调用size函数就可以了。测试数组:ones(4),m = ones(4,8) zeros(4),zeros(3,5),size(m),zeros(size(m))。 3.单位矩阵用eye函数。该函数用与ones和zeros函数相同的语法格式来生成单位矩阵。单位矩阵或数组是具有如下取值的矩阵或数组:除 A(i,i)之外,所有其他元素都为0,其中i=min(r,c),min(r,c)是矩阵A中的行数和列数的最小数。 4.随机矩阵用rand函数。函数rand生成均匀分布的随机数组,其元素取值介于0-1之间。直接调用rand产生一个随机数,随机数组用 rand(n)。另外randn函数将生成均值为0,方差为1的正态分布矩阵。rand和randn用法和ones相同。 5.对角矩阵用diag函数。在该数组中,一个向量可以被放在与数组的主对角线平行的任何位置。验证:a = 1:5 diag(a) diag(a,1)diag(a,-2) 6.几种生成所有元素都相同的数组的方法,先令d=pi (1)d*one(3,4) slowest method (2)d+zeros(3,4) slower method (3)d(ones(3,4)) fast method (4)repmat(d,3,4) fastest method 数组的数据量较小时,4种方法都可以。随着数组维数的增大,含有标量乘法的方法d*one(3,4)就会使矩阵生成过程变慢。因为加法通常都比乘法运算速度快,较好的办法就是将用到的标量加到加到一个全0数组zeros(3,4)上。 后两种方法虽不直观,它们却是生成大数组的最快方法,因为都用到了数组索引。(3)d(ones(r,c))先生成一个r×c的全1数组,然后用这个数组来索引和复制标量d。尽管这种方法没有用到浮点运算,但生成一个全1临时数组将会占用内存,并且消耗时间,因此使得这种方法的速度变慢。 方法repmat(d,r,c)调用函数repmat,即replicate matrix(复制矩阵)的缩写。对于标量,该函数执行如下操作步骤:

matlab数组操作

1.一个三维数组由行、列和页三维组成,其中每一页包含一个由行和列构成的二维数组。 2.利用标准数组函数创建多维数组 A=zeros(4,3,2) 生成一个4行3列2页的三维全0数组,ones,rand和randn等函数有相似的用法。 3.利用直接索引方式生成多维数组 A=zeros(2,3) A(:,:,2)=ones(2,3) A(:,:,3)=4 上面的代码先生成一个二维数组作为三维数组的第一页,然后通过数组直接索引,添加第二页、第三页。 4.利用函数reshape和repmat生成多维数组 B=reshape(A,2,9) B=[A(:,:,1) A(:,:,2) A(:,:,3)] %结果与上面一样。 reshape(B,2,3,3) reshape(B,[2 3 3]) %结果与上面一样。 提示:reshape函数可以将任何维数的数组转变成其他维数的数组。 5.利用repmat函数生成多维数组 C=ones(2,3) repmat(C,[1 1 3]) % repmat写出类似reshape的repmat(C,1,1,3)将显示出错 提示:repmat是通过数组复制创建多维数组的,上面的代码即是将数组C在行维和列维分别复制一次,然后再页维复制三次得到2×3×3的三维数组。 6.利用cat函数创建多维数组 a=zeros(2); b=ones(2); c=repmat(2,2,2); D=cat(3,a,b,c)%创建三维数组 D=cat(4,a,b,c) %创建4维数组。 D(:,1,:,:) %查看第一列的数据。 size(D) %可以知道数组D的具体维数。 6.数组运算与处理 数组之间的运算要求两个数组在任何一维都必须具有相同的大小。 (1)squeeze函数用于删除多维数组中的单一维(即大小为1的那些维) E=squeeze(D) size(D) E的数据和D一样,但比D少了一维,只有2行、2列和3页。

Matlab使用单元数组和结构数组

Matlab使用字符串数组、单元数组(cell array)和结构数组(struct array) 要在MALTAB中实现比较复杂的编程,就不能不用单元数组(cell array)和结构数组(structarray)。而且在Matlab中实现struct比C中更为方便。 MATLAB字符串数组的创建与运算 字符串数组主要用于可视化编程内容,如界面设计和图形绘制。 1.字符串变量的创建 字符变量的创建方法是:在指令窗口中先把待建的字符放在“单引号对”中,再按回车键。注意,该“单引号对”必须在英文状态下输入。这“单引号对”是MATLAB用来识别字符串变量所必须的。如: >>a='This is an example.' a = This is an example. >>msg = 'You''re right!' %创建带单引号的字符串 msg = You're right! 2.字符串数组的标识 字符串变量的每个字符(英文字母、空格和标点都是平等的)占据一个元素位,在数组中元素所处的位置用自然数标识。如: >>a='This is an example.' >>b=a(1:4) % 提出一个子字符串 b = This ra=a(end:-1:1) % 字符串的倒排 ra = .elpmaxe na si sihT 又如: >>A='这是一个算例。'; >>B=size(A) % 符号数组A 的“大小” B = 1 7 >>C=A([5 6]) % 提出一个子字符串 C = 算例 3.字符串的ASCII码 字符串的存储是用ASCII码实现的。指令abs和double都可以用来获取串数组所对应的ASCII码数值数组。指令char可把ASCII码数组变为串数组。如

C++和MATLAB的相互调用及多维动态数组定义方式

转载:VC++与Matlab混合编程之引擎操作详解(1) 2009-12-18 10:51 Visual C++是当前主流的应用程序开发环境之一,开发环境强大,开发的程序执行速度快。但在科学计算方面函数库显得不够丰富、读取、显示数据图形不方便。Matlab是一款将数值分析、矩阵计算、信号处理和图形显示结合在一起,包含大量高度集成的函数可供调用,适合科学研究、工程设计等众多学科领域使用的一种简洁、高效的编程工具。不过由于Matlab使用的是解释性语言,大大限制了它的执行速度和应用场合。基于VC和Matlab混合编程是很多熟悉VC++编程而又需要进行科学计算、数据仿真的科研人员常用的一种方式,其中最简单也最直接的方法就是调用Matlab引擎。本文以下部分将详细介绍通过VC++6.0调用Matlab6.5引擎来达到VC++与Matlab数据共享编程的方法。 1. 什么是Matlab引擎 所谓Matlab引擎(engine),是指一组Matlab提供的接口函数,支持C/C++、Fortran等语言,通过这些接口函数,用户可以在其它编程环境中实现对Matlab 的控制。可以主要功能有: ★打开/关闭一个Matlab对话; ★向Matlab环境发送命令字符串; ★从Matlab环境中读取数据; ★向Matlab环境中写入数据。 与其它各种接口相比,引擎所提供的Matlab功能支持是最全面的。通过引擎方式,应用程序会打开一个新的Matlab进程,可以控制它完成任何计算和绘图操作。对所有的数据结构提供100%的支持。同时,引擎方式打开的Matlab进程会在任务栏显示自己的图标,打开该窗口,可以观察主程序通过engine方式控制Matlab运行的流程,并可在其中输入任何Matlab命令。 实际上,通过引擎方式建立的对话,是将Matlab以ActiveX控件方式启动的。在Matlab初次安装时,会自动执行一次: matlab /regserver 将自己在系统的控件库中注册。如果因为特殊原因,无法打开Matlab引擎,可以在Dos命令提示符后执行上述命令,重新注册。 2. 配置编译器 要在VC中成功编译Matlab引擎程序,必须包含引擎头文件engine.h并引入Matlab对应的库文件libmx.lib、libmat.lib、libeng.lib。具体的说,打开一个工程后,做如下设置(以VC6为例): 1) 通过菜单工程/选项,打开设置属性页,进入Directories页面,在目录下拉列表框中选择Include files,添加路径:"C:\matlab\extern\include"(假定matlab安装在C:\matlab目录)。 2) 选择Library files,添加路径:C:\matlab\extern\lib\win32\microsoft\msvc60。(vs2005的话,不加msvc60) 3) 通过菜单工程/设置,打开工程设置属性页,进入Link页面,在Object/library modules编辑框中,添加文件名libmx.lib libmat.lib libeng.lib。 以上步骤1)、2)只需设置一次,而步骤3)对每个工程都要单独设定,对于其它 C++编译器如Borland C++ builder,设置大体相同,不再赘述。

MATLAB的Cell数组操作

5.3 Cell数组的基本操作 本小节结合示例对元胞数组的一些基本操作进行介绍。【例3-26】元胞数组的合并。 >> C1 = {'Jan' 'Feb'; '10' '17'; uint16(2004) uint16(2001)}; >> C2 = {'Mar' 'Apr' 'May'; '31' '2' '10'; ... uint16(2006) uint16(2005) uint16(1994)}; >> C3 = {'Jun'; '23'; uint16(2002)}; >> C1 C1 = 'Jan' 'Feb' '10' '17' [2004] [2001] >> C2 C2 = 'Mar' 'Apr' 'May' '31' '2' '10' [2006] [2005] [1994] >> C3

C3 = 'Jun' '23' [2002] >> C4 = {C1 C2 C3} % 生成嵌套元胞数组 C4 = {3x2 cell} {3x3 cell} {3x1 cell} >> C5 = [C1 C2 C3] % 生成元胞数组 C5 = 'Jan' 'Feb' 'Mar' 'Apr' 'May' 'Jun' '10' '17' '31' '2' '10' '23' [2004] [2001] [2006] [2005] [1994] [2002] >> whos % 查看变量的结构 Name Size Bytes Class Attributes C1 3x2 696 cell C2 3x3 1042 cell C3 3x1 348 cell C4 1x3 2422 cell

Matlab 基础知识——矩阵操作及运算(矩阵、数组区别)

看论文时,经常看到矩阵,但在记忆里又看到数组。那么问题来了,矩阵和数组分别是什么?二者有什么区别?看论文时,经常看到矩阵,但在记忆里又看到数组。那么问题来了,矩阵和数组分别是什么?二者有什么区别? 在数学上,定义m×n个数(i=1, 2…, m ; j=1, 2,…n)排成的m行n列的数表示为m行n列的矩阵,并且用大写加粗黑色字母表示。 只有一行的矩阵:,也称之为行向量; 只有一列的矩阵,也称之为列向量。 矩阵最早来自于方程组的系数即常数所构成的方阵,这一个概念有19世纪英国数学家凯利首先提出。 数组是在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称之为数组。 在Matlab中,一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可以分为数值数组、字符数组、单元数组、结构数组等各种类别。 看完上面的内容,矩阵和数组的区别似乎懂了一点。矩阵和数组在Matlab中存在很多方面的区别: (1)矩阵是数学的概念,而数组是计算机程序设计领域的概念; (2)作为一种变换或映射算符的体现,矩阵运算有着明确而严格的数学规则。而数组运算是Matlab软件定义的规则,其目的是为了使数据管理方便,操作简单,命令形式自然,执行计算有效。

二者联系主要体现在:在Matlab中,矩阵是以数组的形式存在的。因此,一维数组相当于向量;二维数组相当于矩阵。所以矩阵是数组的子集。 对矩阵的基本操作,主要有矩阵的构建、矩阵维度和矩阵大小的改变、矩阵的索引、矩阵的属性信息的获取、矩阵结构的改变等。对于这些操作,Matlab中都有固定的指令或者相应的库函数与之相对应。在程序用到的时候,每次都要上网查,网上的很散。这里,我对我经常用的做了总结。以后用到可以查阅。 1、矩阵下表引用 下面将常用的几个举例说明: 例如:A=[1 2 3 4 5; 12 12 14 56 657; 23 46 34 67 56 ];

Matlab中数组元素引用

[转载]Matlab中数组元素引用 作者:MyheartVikie Matlab中数组元素引用有三种方法: 1.下标法(subscripts) 2.索引法(index) 3.布尔法(Boolean) 在使用这三种方法之前,大家头脑一定要清晰的记住,Matlab中数组元素是按列存储(与Fortran一样),比如说下面的二维数组 A= 8 1 6 3 5 7 4 9 2 Matlab的存储顺序是8,3,4,1,5,9,6,7,2,也就是说先行后列,对于3维数组呢,就是先行后列再页 对应个元素的索引和下标分别为 Element Index Subscripts 8 1 (1,1) 3 2 (2,1) 4 3 (3,1) 1 4 (1,2) 5 5 (2,2) 9 6 (3,2) 6 7 (1,3) 7 8 (2,3) 2 9 (3,3) 从上面的例子中已经很清晰的说明了下标和索引的区别了,也就是说Matlab为没有个元素分配了一个唯一识别的ID(即index) 1.下标法引用 A(ii,jj):其中ii和jj可以是一维向量、标量、“:”号或者“end” 大家对下标估计比较熟悉,由于在C语言中接触过,但是我这里需要强调的是,Matlab的下标是可以多行多列同时引用的,而像C语言等一次只能引用一个,比如

A(2:3,3:-1:1)表示引用数组中的2~3行,3~1列对应的元素 A(:,end)表示引用最后一列元素,“:”表示所有列或行,“end”表示最后一列或列,“end-n”表示倒数第n行或列 A(1,end-1)表示引用第1行倒数第2个元素 A([2 1 3 3],[1 1 2 2 1])表示引用按两个向量引用指定的元素,即A中的第2,1,3,3行和第1,1,2,2,1列对应的元素 >>A=magic(3) A = 8 1 6 3 5 7 4 9 2 >>A(2:3,3:-1:1) ans = 7 5 3 2 9 4 >>A(:,end) ans = 6 7 2 >>A(1,end-1) ans = 1 >>A([2 1 3 3],[1 1 2 2 1]) ans = 3 3 5 5 3 8 8 1 1 8 4 4 9 9 4 4 4 9 9 4 2.索引法引用(说白了索引就是存储顺序) A(index):index可以是任意的数组,index的元素必须是正整数,且不大于numel(A),返回的是一个尺寸与index一样的数组

MATLAB之数组索引3

MATLAB? 中的每个变量都是一个可包含许多数字的数组。如果要访问数组的选定元素,请使用索引。 以4×4 幻方矩阵A为例: A = magic(4) A = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 1 5 1 引用数组中的特定元素有两种方法。最常见的方法是指定行和列下标,例如 A(4,2) ans = 14 另一种方法不太常用,但有时非常有用,即使用单一下标按顺序向下遍历每一列: A(8) ans = 14 使用单一下标引用数组中特定元素的方法称为线性索引。 如果尝试在赋值语句右侧引用数组外部元素,MATLAB 会引发错误。 test = A(4,5) Index exceeds matrix dimensions. 不过,您可以在赋值语句左侧指定当前维外部的元素。数组大小会增大以便容纳新元素。A(4,5) = 17 A = 16 2 3 13 0 5 11 10 8 0

9 7 6 12 0 4 14 1 5 1 17 要引用多个数组元素,请使用冒号运算符,这使您可以指定一个格式为start:end的范围。例如,列出A前三行及第二列中的元素: A(1:3,2) ans = 2 11 7 单独的冒号(没有起始值或结束值)指定该维中的所有元素。例如,选择A第三行中的所有列: A(3,:) ans = 9 7 6 12 0 此外,冒号运算符还允许您使用较通用的格式start:step:end创建等距向量值。 B = 0:10:100 B = 0 10 20 30 40 50 60 70 80 90 100 如果省略中间的步骤(如start:end中),MATLAB 会使用默认步长值1。

相关主题
文本预览
相关文档 最新文档