Matlab编程和其他语言的区别.docx

上传人:asd****56 文档编号:70344163 上传时间:2023-01-19 格式:DOCX 页数:11 大小:65.71KB
返回 下载 相关 举报
Matlab编程和其他语言的区别.docx_第1页
第1页 / 共11页
Matlab编程和其他语言的区别.docx_第2页
第2页 / 共11页
点击查看更多>>
资源描述

《Matlab编程和其他语言的区别.docx》由会员分享,可在线阅读,更多相关《Matlab编程和其他语言的区别.docx(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、Matlab编程和其他语言的区别一、字符和字符串在MATLAB中不管是字符,还是字符串都是用单引号。而在C、C+、C#、Java等语言中,字符是用单引号的,字符串则必须用双引号。因此在MATLAB中如果需要在字符串中用到单引号的话,就要用两个单引号来代替。如: a=thisis an applea =thisis an apple同理,如果字符串中需要双引号的话,可以用四个单引号来代替。如下: b=Iam Timb =Iam Tim在MATLAB中的字符串连接,我们可以使用一对中括号。当然,这种连接方式也适用于向量、矩阵等的连接。如下: c=a bc =thisis an appleIam T

2、im a1=1 2;b1=3 4; c1=a1 b1c1 = 1 2 3 4 c2=a1;b1c2 = 1 2 3 4但是,对于字符串的连接不能使用加号(+)来进行。这点和在C+、C#、Java等语言中是不一样的。因为在MATLAB中这些字符串也是以矩阵的形式存储的,你要是用加号的话,需要两个矩阵的大小一致。比如: a2=hello;b2=mustb; a2+b2ans = 213 218 223 224 209但是,很明显,加完之后都是一系列的值了。本来,这些字符串也是以数值的形式存储的。而我们要取的字符串中某一个字符的时候,也是很方便的,直接像引用矩阵的元素一样。如下: a2(1)ans

3、=h a2(4)ans =l find(a2i)ans = 3 4 5可以看到,a2里面在字母i后面的字符有第3、4、5个字符,也就是llo了。在MATLAB中要将一个数字转换为字符可以用num2str,将字符转换为数字可以用str2num。如下: stra1=num2str(a1)stra1 =1 2 class(stra1)ans =char strb1=3 4; str2num(strb1)ans = 3 4对于strb1,我们可以使用eval函数,该函数可以将字符串作为一个MATLAB命令去执行。如下: p=eval(strb1)p = 3 4相当于p=3 4。当然了,C语言里面的sp

4、rintf、fprintf函数我们都是可以在MATLAB中使用的。比如: sprintf(Tim is %d years old.,24)ans =Tim is 24 years old.至于fprintf函数,则需要用fopen去打开一个文件,然后写入数据进去。如下: fd=fopen(a.txt,w+); fprintf(fd,I am Tim.n); fprintf(fd,My age is %dn,24); fclose(fd);然后,用MATLAB Editor打开MATLAB当前目录下的a.txt就可以看到:但是,当你用记事本打开的时候会看到:这是因为在Windows上要想换行需要

5、rn,而不能单是n。二、if语句、for语句、switch语句、while语句、try-catch语句都以end结尾在MATLAB中,没有goto和doloop和dowhile语句。而且语句的结尾都是以end结尾的。 t=4; if(t if(t5),disp(t is bigger than 5.),else,disp(t is smaller than 5.),endt is smaller than 5.还可以用elseif。 if(t5),disp(t is bigger than 5.),elseif(t=5),disp(t is equal 5.),else,disp(t is s

6、maller than 5.),endt is smaller than 5.在MATLAB中,由于矩阵的索引都是从1开始的,这点和C、C+、C#、JAVA等语言是不一样的。所以,在循环的时候建议从1开始循环,而且循环的时候不推荐用变量i和j。因为这两个变量在MATLAB中表示的是复数的虚部变量。当然,如果你的程序里面没有复数,就不用怕。如果有复数,就要小心了。之所以从1开始,是因为大多数时候我们使用循环是为了依次能访问到矩阵的每一个元素,所以,如果矩阵的索引出现了0,那么就会报出错误。所以,从1开始循环,是一种很好的习惯,而不是要求你必须这样做。而且,在for循环中,你的循环变量不仅可以是一

7、个数,也可以是一个向量。看下面的程序: aa=1 2;3 4; 5 6;7 8; for i=aa,disp(i),end 1 3 5 7 2 4 6 8 aaaa = 1 2 3 4 5 6 7 8也就是说,i第一次的值是aa的第一列,i第二次的值是aa的第二列。这样的话,这个循环变量i就不仅仅是一个数了,二是一列数。在MATLAB中,switch语句中是不用break的,而且默认的选项不是default,而是otherwise。如下:a=5;switch(a), case 1, disp(a is 1.); case 2, disp(a is 2.); case 5, disp(a is

8、5.); otherwise, disp(sorry, i do not know.);end还需要注意的是case后面没有分号,而C、C+、C#、Java等语言中是必须是分号的。在MATLAB中可是没有分号,我程序中的逗号,也可以是没有的。指向上面的程序,在MATLAB中的输出是:a is 5.至于while语句的使用和C、C+、C#、Java等语言中的while基本上是一致的。如下:a=5;b=0;while a0 b=b+a; a=a-1;endbaMatlab命令窗口的输出是这样的:b = 15a = 0try-catch语句一般是用来捕捉错误的。try a=input(Input a

9、 number: );catch error(unknown error.);end当运行上面的程序,在MATLAB中输入:Input a number: #? Error using = tim_try at 4unknown error.三、变量不用声明在MATLAB中的变量是可以不用声明的,这点和C类语言和Java是有很大区别的。但是,为了程序更清晰和加快程序的执行速度,提供初始化和声明有时是必要的。不如,b=;for i=1:10 b=b i;endb在MATLAB命令窗口的输出如下:b = 1 2 3 4 5 6 7 8 9 10如果你不初始化b为空的话,如下:for i=1:10

10、b=b i;endb在命令窗口的输出如下:? Undefined function or variable b.上面说过了,中括号可以用来合并向量的,这里变量b不存在,因此不能合并。所以会出错。四、没有+、-操作符在MATLAB中是没有+和-操作符的,因此需要转换。如a+; 可以转化为a=a+1;至于+a;你只需要将a=a+1的位置放到前面就可以了。五、点乘、点除,但没有点加、点减在点乘,是矩阵中的对应元素相乘。而不是矩阵的乘法。点除也是同样道理,对应元素想除。至于点加,就相当于加法。因为加减法本身就是对应元素的加减。六、左除和右除在C类和Java等语言中,除法就是一个操作符(/),但在MAT

11、LAB中(/)和()是有区别的。/代表的是右除,代表的是左除。 A=1 2;3 4;B=5 6;7 8; C1=ABC1 = -3 -4 4 5所以A左除B,就相当于A的逆矩阵乘B。 inv(A)*Bans = -3.0000 -4.00004.0000 5.0000那么可想而知,A右除B,就相当于A乘B的逆矩阵。 A/Bans = 3.0000 -2.00002.0000 -1.0000 A*inv(B)ans = 3.0000 -2.00002.0000 -1.0000七、MATLAB的编程思想当你用MATLAB来写程序的时候,尽量以向量、矩阵为单位来考虑问题。也就是在MATLAB中常常能

12、用一个点乘来代替多个循环的操作。也就是用向量化的操作来代替循环,这样能够大大的提高MATLAB程序的运行速度。举个简单的例子:clear allclca=round(rand(100)*100);b=round(rand(100)*100);tic f1=a.*b;toctic for i=1:100, for j=1:100, f2(i,j)=a(i,j)*b(i,j); end endtoc在命令窗口的输出如下:Elapsed time is 0.000035 seconds.Elapsed time is 0.001871 seconds.如果我们给f2初始化下,看看能不能加快速度。cl

13、ear allclca=round(rand(100)*100);b=round(rand(100)*100);tic f1=a.*b;tocf2=zeros(100);tic for i=1:100, for j=1:100, f2(i,j)=a(i,j)*b(i,j); end endtoc此时,命令窗口的输出如下:Elapsed time is 0.000024 seconds.Elapsed time is 0.000147 seconds.可以看到后面的循环的时间明显提高了很多。那么我们为上面的点乘运算的f1也初始化的话,速度会如何?Elapsed time is 0.000022

14、seconds.Elapsed time is 0.000146 seconds.可以看到速度提升的不是很明显。如果你将a和b的维数增长到10000的话,提示的速度就明显了很多了。八 函数和脚本的区别在别的语言中,程序应该没有这两个的分别吧。说白了,就是脚本就是一堆MATLAB命令的集合,而函数则是将实现某个功能的MATLAB程序封在一起,且需要有关键字function。脚本的工作空间就是整个MATLAB的工作空间,而每个function都有自己的一个工作空间,因此两个函数中可以有相同的变量名,他们是不会被混淆的,请放心。当然了,除非你用把它设置为global,不然,你不能应用另一个函数中的某

15、个变量。2、matlab中zeros 和 ones 这两个函数的用法ones产生全1数组,zeros产生全零数组。ones(a,b)产生a行b列全1数组ones(a)产生a行a列全1数组例如:ones(1,3)产生1行3列全1数组1 1 1ones(2)产生1 1 1 1zeros用法同ones,只是产生的是全0数组3、matlab 中时间计数器 tic toc循环调用时需要注意的问题每一次遇toc时,程序自动计算toc和最近一次的tic之间的时间 你的”运行时间“,能够正常实现,是正确的 但是”总时间“是错误的,你的总时间计算的是,最后一次for j=1:2循环的tic到最后的toc之间的时

16、间,也就是我在上面说的toc是计算与最近一个tic直接的时间,而最近一个tic就是最后一次循环中出现的tic 我们可以使用下面的程序进行验证 tic; t1=clock; for i=1:3 tic ;t2=clock; k=0; for j=1:2 k=k+i*j; pause(0.5) end disp(运行时间:); toc; etime(clock,t2) end disp(总时间:); toc;etime(clock,t1) 还有一个验证是 tic puase(0.5) toc puase(0.5) toc puase(0.5) toc puase(0.5) toc4、Matlab-

17、size,length和numel函数size:获取数组的行数和列数length:数组长度(即行数或列数中的较大值)numel:元素总数。s=size(A),当只有一个输出参数时,返回一个行向量,该行向量的第一个元素时数组的行数,第二个元素是数组的列数。r,c=size(A),当有两个输出参数时,size函数将数组的行数返回到第一个输出变量,将数组的列数返回到第二个输出变量。如果在size函数的输入参数中再添加一项,并用1或2为该项赋值,则size将返回数组的行数或列数。 其中r=size(A,1)该语句返回的时数组A的行数, c=size(A,2) 该语句返回的时数组A的列数。n=numel

18、(A)该语句返回数组中元素的总数。 n=length(A):如果A为非空数组,返回行数和列数两者之间数值较大的那一个值,即相当于执行了max(size(A);如果A为空数组,则返回0;如果A是一个向量则返回A的长度。n=max(size(A):若A为非空数组,返回A的最大维数;若A为空数组,返回A中最长的非0维数。5、matlab中max函数 请多用help自己帮助自己help maxMAX Largest component. For vectors, MAX(X) is the largest element in X. For matrices, MAX(X) is a row vect

19、or containing the maximum element from each column. For N-D arrays, MAX(X) operates along the first non-singleton dimension. Y,I = MAX(X) returns the indices of the maximum values in vector I. If the values along the first non-singleton dimension contain more than one maximal element, the index of t

20、he first one is returned. MAX(X,Y) returns an array the same size as X and Y with the largest elements taken from X or Y. Either one can be a scalar. Y,I = MAX(X,DIM) operates along the dimension DIM. When complex, the magnitude MAX(ABS(X) is used, and the angle ANGLE(X) is ignored. NaNs are ignored

21、 when computing the maximum. Example: If X = 2 8 4 then max(X,1) is 7 8 9, 7 3 9 max(X,2) is 8 and max(X,5) is 5 8 5 9, 7 5 9.6、matlab中的std2和mean2std2计算矩阵元素的标准差;mean2计算矩阵元素的平均数。help std2STD2 Compute standard deviation of matrix elements. B = STD2(A) computes the standard deviation of the values in A

22、. Class Support - A can be numeric or logical. B is a scalar of class double. Example - I = imread(liftingbody.png); val = std2(I) See also corr2, mean2, mean, std. Reference page in Help browser doc std2help mean2MEAN2 Compute mean of matrix elements. B = MEAN2(A) computes the mean of the values in

23、 A. Class Support - A can be numeric or logical. B is a scalar of class double. Example - I = imread(liftingbody.png); val = mean2(I) See also mean, std, std2. Reference page in Help browser doc mean27、matlab中的narginnargin返回用户函数的参数个数help narginNARGIN Number of function input arguments. Inside the bo

24、dy of a user-defined function, NARGIN returns the number of input arguments that were used to call the function. NARGIN(fun) returns the number of declared inputs for the M-file function fun. The number of arguments is negative if the function has a variable number of input arguments. See also nargout, varargin, nargchk, nargoutchk, inputname, mfilename. Overloaded functions or methods (ones with the same name in other directories) help inline/nargin.m help fittype/nargin.m Reference page in Help browser doc nargin

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁