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

上传人:b****0 文档编号:17743381 上传时间:2023-08-03 格式:DOCX 页数:16 大小:57.17KB
下载 相关 举报
Matlab编程和其他语言的区别.docx_第1页
第1页 / 共16页
Matlab编程和其他语言的区别.docx_第2页
第2页 / 共16页
Matlab编程和其他语言的区别.docx_第3页
第3页 / 共16页
Matlab编程和其他语言的区别.docx_第4页
第4页 / 共16页
Matlab编程和其他语言的区别.docx_第5页
第5页 / 共16页
Matlab编程和其他语言的区别.docx_第6页
第6页 / 共16页
Matlab编程和其他语言的区别.docx_第7页
第7页 / 共16页
Matlab编程和其他语言的区别.docx_第8页
第8页 / 共16页
Matlab编程和其他语言的区别.docx_第9页
第9页 / 共16页
Matlab编程和其他语言的区别.docx_第10页
第10页 / 共16页
Matlab编程和其他语言的区别.docx_第11页
第11页 / 共16页
Matlab编程和其他语言的区别.docx_第12页
第12页 / 共16页
Matlab编程和其他语言的区别.docx_第13页
第13页 / 共16页
Matlab编程和其他语言的区别.docx_第14页
第14页 / 共16页
Matlab编程和其他语言的区别.docx_第15页
第15页 / 共16页
Matlab编程和其他语言的区别.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

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

《Matlab编程和其他语言的区别.docx》由会员分享,可在线阅读,更多相关《Matlab编程和其他语言的区别.docx(16页珍藏版)》请在冰点文库上搜索。

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

Matlab编程和其他语言的区别

Matlab编程和其他语言的区别

一、字符和字符串

在MATLAB中不管是字符,还是字符串都是用单引号。

而在C、C++、C#、Java等语言中,字符是用单引号的,字符串则必须用双引号。

因此在MATLAB中如果需要在字符串中用到单引号的话,就要用两个单引号来代替。

如:

>>a='this''isanapple'

a=

this'isanapple

同理,如果字符串中需要双引号的话,可以用四个单引号来代替。

如下:

>>b='I''''amTim'

b=

I''amTim

在MATLAB中的字符串连接,我们可以使用一对中括号。

当然,这种连接方式也适用于向量、矩阵等的连接。

如下:

>>c=[ab]

c=

this'isanappleI''amTim

>>a1=[12];b1=[34];

>>c1=[a1b1]

c1=

    1    2    3    4

>>c2=[a1;b1]

c2=

    1    2

    3    4

但是,对于字符串的连接不能使用加号(+)来进行。

这点和在C++、C#、Java等语言中是不一样的。

因为在MATLAB中这些字符串也是以矩阵的形式存储的,你要是用加号的话,需要两个矩阵的大小一致。

比如:

>>a2='hello';b2='mustb';

>>a2+b2

ans=

  213  218  223  224  209

但是,很明显,加完之后都是一系列的值了。

本来,这些字符串也是以数值的形式存储的。

而我们要取的字符串中某一个字符的时候,也是很方便的,直接像引用矩阵的元素一样。

如下:

>>a2

(1)

ans=

h

>>a2(4)

ans=

l

>>find(a2>'i')

ans=

    3    4    5

可以看到,a2里面在字母i后面的字符有第3、4、5个字符,也就是llo了。

在MATLAB中要将一个数字转换为字符可以用num2str,将字符转换为数字可以用str2num。

如下:

>>stra1=num2str(a1)

stra1=

1 2

>>class(stra1)

ans=

char

>>strb1='[34]';

>>str2num(strb1)

ans=

    3    4

对于strb1,我们可以使用eval函数,该函数可以将字符串作为一个MATLAB命令去执行。

如下:

>>p=eval(strb1)

p=

    3    4

相当于p=[34]。

当然了,C语言里面的sprintf、fprintf函数我们都是可以在MATLAB中使用的。

比如:

>>sprintf('Timis%dyearsold.',24)

ans=

Timis24yearsold.

至于fprintf函数,则需要用fopen去打开一个文件,然后写入数据进去。

如下:

>>fd=fopen('a.txt','w+');

>>fprintf(fd,'IamTim.\n');

>>fprintf(fd,'Myageis%d\n',24);

>>fclose(fd);

然后,用MATLABEditor打开MATLAB当前目录下的a.txt就可以看到:

但是,当你用记事本打开的时候会看到:

这是因为在Windows上要想换行需要\r\n,而不能单是\n。

 

二、if语句、for语句、switch语句、while语句、try-catch语句都以end结尾

在MATLAB中,没有goto和do…loop和do…while语句。

而且语句的结尾都是以end结尾的。

>>t=4;

>>if(t<5),disp('tissmallerthan5.'),end

tissmallerthan5.

当然,if语句也可以有else语句。

>>if(t>5),disp('tisbiggerthan5.'),else,disp('tissmallerthan5.'),end

tissmallerthan5.

还可以用elseif。

>>if(t>5),disp('tisbiggerthan5.'),elseif(t==5),disp('tisequal5.'),else,disp('tissmallerthan5.'),end

tissmallerthan5.

在MATLAB中,由于矩阵的索引都是从1开始的,这点和C、C++、C#、JAVA等语言是不一样的。

所以,在循环的时候建议从1开始循环,而且循环的时候不推荐用变量i和j。

因为这两个变量在MATLAB中表示的是复数的虚部变量。

当然,如果你的程序里面没有复数,就不用怕。

如果有复数,就要小心了。

之所以从1开始,是因为大多数时候我们使用循环是为了依次能访问到矩阵的每一个元素,所以,如果矩阵的索引出现了0,那么就会报出错误。

所以,从1开始循环,是一种很好的习惯,而不是要求你必须这样做。

而且,在for循环中,你的循环变量不仅可以是一个数,也可以是一个向量。

看下面的程序:

>>aa=[12;34;56;78];

>>fori=aa,disp(i),end

    1

    3

    5

    7

    2

    4

    6

    8

>>aa

aa=

    1    2

    3    4

    5    6

    7    8

也就是说,i第一次的值是aa的第一列,i第二次的值是aa的第二列。

这样的话,这个循环变量i就不仅仅是一个数了,二是一列数。

在MATLAB中,switch语句中是不用break的,而且默认的选项不是default,而是otherwise。

如下:

a=5;

switch(a),

   case1,

       disp('ais1.');

   case2,

       disp('ais2.');

   case5,

       disp('ais5.');

   otherwise,

       disp('sorry,idonotknow.');

end

还需要注意的是case后面没有分号,而C、C++、C#、Java等语言中是必须是分号的。

在MATLAB中可是没有分号,我程序中的逗号,也可以是没有的。

指向上面的程序,在MATLAB中的输出是:

ais5.

至于while语句的使用和C、C++、C#、Java等语言中的while基本上是一致的。

如下:

a=5;

b=0;

whilea>0

   b=b+a;

   a=a-1;

end

b

a

Matlab命令窗口的输出是这样的:

b=

   15

a=

    0

try-catch语句一般是用来捕捉错误的。

try

   a=input('Inputanumber:

 ');

catch

   error('unknownerror.');

end

当运行上面的程序,在MATLAB中输入:

Inputanumber:

 #

?

?

?

Errorusing==>tim_tryat4

unknownerror.

 

三、变量不用声明

在MATLAB中的变量是可以不用声明的,这点和C类语言和Java是有很大区别的。

但是,为了程序更清晰和加快程序的执行速度,提供初始化和声明有时是必要的。

不如,

b=[];

fori=1:

10

   b=[bi];

end

b

在MATLAB命令窗口的输出如下:

b=

    1    2    3    4    5    6    7    8    9   10

如果你不初始化b为空的话,如下:

fori=1:

10

   b=[bi];

end

b

在命令窗口的输出如下:

?

?

?

Undefinedfunctionorvariable'b'.

上面说过了,中括号[]可以用来合并向量的,这里变量b不存在,因此不能合并。

所以会出错。

 

四、没有++、--操作符

在MATLAB中是没有++和--操作符的,因此需要转换。

如a++;可以转化为a=a+1;至于++a;你只需要将a=a+1的位置放到前面就可以了。

 

五、点乘、点除,但没有点加、点减

在点乘,是矩阵中的对应元素相乘。

而不是矩阵的乘法。

点除也是同样道理,对应元素想除。

至于点加,就相当于加法。

因为加减法本身就是对应元素的加减。

 

六、左除和右除

在C类和Java等语言中,除法就是一个操作符(/),但在MATLAB中(/)和(\)是有区别的。

/代表的是右除,\代表的是左除。

>>A=[12;34];B=[56;78];

>>C1=A\B

C1=

   -3   -4

    4    5

所以A左除B,就相当于A的逆矩阵乘B。

>>inv(A)*B

ans=

  -3.0000  -4.0000

4.0000   5.0000

那么可想而知,A右除B,就相当于A乘B的逆矩阵。

>>A/B

ans=

   3.0000  -2.0000

2.0000  -1.0000

>>A*inv(B)

ans=

   3.0000  -2.0000

2.0000  -1.0000

 

七、MATLAB的编程思想

当你用MATLAB来写程序的时候,尽量以向量、矩阵为单位来考虑问题。

也就是在MATLAB中常常能用一个点乘来代替多个循环的操作。

也就是用向量化的操作来代替循环,这样能够大大的提高MATLAB程序的运行速度。

举个简单的例子:

clearall

clc

a=round(rand(100)*100);

b=round(rand(100)*100);

 

tic

   f1=a.*b;

toc

 

tic

   fori=1:

100,

       forj=1:

100,

           f2(i,j)=a(i,j)*b(i,j);

       end

   end

toc

在命令窗口的输出如下:

Elapsedtimeis0.000035seconds.

Elapsedtimeis0.001871seconds.

如果我们给f2初始化下,看看能不能加快速度。

clearall

clc

a=round(rand(100)*100);

b=round(rand(100)*100);

 

tic

   f1=a.*b;

toc

 

f2=zeros(100);

tic

   fori=1:

100,

       forj=1:

100,

           f2(i,j)=a(i,j)*b(i,j);

       end

   end

toc

此时,命令窗口的输出如下:

Elapsedtimeis0.000024seconds.

Elapsedtimeis0.000147seconds.

可以看到后面的循环的时间明显提高了很多。

那么我们为上面的点乘运算的f1也初始化的话,速度会如何?

Elapsedtimeis0.000022seconds.

Elapsedtimeis0.000146seconds.

可以看到速度提升的不是很明显。

如果你将a和b的维数增长到10000的话,提示的速度就明显了很多了。

八函数和脚本的区别

在别的语言中,程序应该没有这两个的分别吧。

说白了,就是脚本就是一堆MATLAB命令的集合,而函数则是将实现某个功能的MATLAB程序封在一起,且需要有关键字function。

脚本的工作空间就是整个MATLAB的工作空间,而每个function都有自己的一个工作空间,因此两个函数中可以有相同的变量名,他们是不会被混淆的,请放心。

当然了,除非你用把它设置为global,不然,你不能应用另一个函数中的某个变量。

2、matlab中zeros和ones这两个函数的用法

ones产生全1数组,zeros产生全零数组。

ones(a,b)产生a行b列全1数组

ones(a)产生a行a列全1数组

例如:

ones(1,3)产生1行3列全1数组[111]

ones

(2)产生  11

             11

zeros用法同ones,只是产生的是全0数组

3、matlab中时间计数器tictoc循环调用时需要注意的问题

每一次遇toc时,程序自动计算toc和最近一次的tic之间的时间

你的”运行时间“,能够正常实现,是正确的

但是”总时间“是错误的,你的总时间计算的是,最后一次forj=1:

2循环的tic到最后的toc之间的时间,也就是我在上面说的toc是计算与最近一个tic直接的时间,而最近一个tic就是最后一次循环中出现的tic

我们可以使用下面的程序进行验证

tic;t1=clock;

fori=1:

3

tic;t2=clock;

k=0;

forj=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)

toc

4、Matlab---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(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自己帮助自己

helpmax

 MAX   Largestcomponent.

   Forvectors,MAX(X)isthelargestelementinX.Formatrices,

   MAX(X)isarowvectorcontainingthemaximumelementfromeach

   column.ForN-Darrays,MAX(X)operatesalongthefirst

   non-singletondimension.

 

   [Y,I]=MAX(X)returnstheindicesofthemaximumvaluesinvectorI.

   Ifthevaluesalongthefirstnon-singletondimensioncontainmore

   thanonemaximalelement,theindexofthefirstoneisreturned.

 

   MAX(X,Y)returnsanarraythesamesizeasXandYwiththe

   largestelementstakenfromXorY. Eitheronecanbeascalar.

 

   [Y,I]=MAX(X,[],DIM)operatesalongthedimensionDIM.

 

   Whencomplex,themagnitudeMAX(ABS(X))isused,andtheangle

   ANGLE(X)isignored. NaN'sareignoredwhencomputingthemaximum.

 

   Example:

IfX=[284  thenmax(X,[],1)is[789],

                    739]

 

       max(X,[],2)is[8   andmax(X,5)is[585

                       9],                  759].

6、matlab中的std2和mean2

std2计算矩阵元素的标准差;mean2计算矩阵元素的平均数。

helpstd2

 STD2Computestandarddeviationofmatrixelements.

   B=STD2(A)computesthestandarddeviationofthevaluesin

   A.

 

   ClassSupport

   -------------

   Acanbenumericorlogical.Bisascalarofclassdouble.

 

   Example

   -------

       I=imread('liftingbody.png');

       val=std2(I)

 

   Seealsocorr2,mean2,mean,std.

   ReferencepageinHelpbrowser

      docstd2

helpmean2

 MEAN2Computemeanofmatrixelements.

   B=MEAN2(A)computesthemeanofthevaluesinA.

 

   ClassSupport

   -------------

   Acanbenumericorlogical.Bisascalarofclassdouble.

 

   Example

   -------

       I=imread('liftingbody.png');

       val=mean2(I)

  

   Seealsomean,std,std2.

   ReferencepageinHelpbrowser

      docmean2

7、matlab中的nargin

nargin返回用户函数的参数个数

helpnargin

 NARGINNumberoffunctioninputarguments.

   Insidethebodyofauser-definedfunction,NARGINreturns

   thenumberofinputargumentsthatwereusedtocallthe

   function.

 

   NARGIN('fun')returnsthenumberofdeclaredinputsforthe

   M-filefunction'fun'. Thenumberofargumentsisnegativeifthe

   functionhasavariablenumberofinputarguments.

 

   Seealsonargout,varargin,nargchk,nargoutchk,inputname,

      mfilename.

   Overloadedfunctionsormethods(oneswiththesamenameinotherdirectories)

      helpinline/nargin.m

      helpfittype/nargin.m

   ReferencepageinHelpbrowser

      docnargin

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2