matlab编程和其他语言的区别.docx
- 文档编号:6295554
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:14
- 大小:20.68KB
matlab编程和其他语言的区别.docx
《matlab编程和其他语言的区别.docx》由会员分享,可在线阅读,更多相关《matlab编程和其他语言的区别.docx(14页珍藏版)》请在冰豆网上搜索。
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('','w+');
>>fprintf(fd,'IamTim.\n');
>>fprintf(fd,'Myageis%d\n',24);
>>fclose(fd);
然后,用MATLABEditor打开MATLAB当前目录下的就可以够看到:
可是,当你用记事本打开的时候会看到:
这是因为在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=
那么可想而知,A右除B,就相当于A乘B的逆矩阵。
>>A/B
ans=
>>A*inv(B)
ans=
七、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
在命令窗口的输出如下:
Elapsedtimeisseconds.
Elapsedtimeisseconds.
若是咱们给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
此时,命令窗口的输出如下:
Elapsedtimeisseconds.
Elapsedtimeisseconds.
可以看到后面的循环的时间明显提高了很多。
那么咱们为上面的点乘运算的f1也初始化的话,速度会如何?
Elapsedtimeisseconds.
Elapsedtimeisseconds.
可以看到速度提升的不是很明显。
若是你将a和b的维数增加到10000的话,提示的速度就明显了很多了。
八函数和脚本的区别
在别的语言中,程序应该没有这两个的别离吧。
说白了,就是脚本就是一堆MATLAB命令的集合,而函数则是将实现某个功能的MATLAB程序封在一路,且需要有关键字function。
脚本的工作空间就是整个MATLAB的工作空间,而每一个function都有自己的一个工作空间,因此两个函数中可以有相同的变量名,他们是不会被混淆的,请安心。
固然了,除非你用把它设置为global,不然,你不能应用另一个函数中的某个变量。
二、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
end
disp('运行时间:
');
toc;etime(clock,t2)
end
disp('总时间:
');
toc;etime(clock,t1)
还有一个验证是
tic
puase
toc
puase
toc
puase
toc
puase
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维数。
五、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].
六、matlab中的std2和mean2
std2计算矩阵元素的标准差;mean2计算矩阵元素的平均数。
helpstd2
STD2Computestandarddeviationofmatrixelements.
B=STD2(A)computesthestandarddeviationofthevaluesin
A.
ClassSupport
-------------
Acanbenumericorlogical.Bisascalarofclassdouble.
Example
-------
I=imread('');
val=std2(I)
Seealsocorr2,mean2,mean,std.
ReferencepageinHelpbrowser
docstd2
helpmean2
MEAN2Computemeanofmatrixelements.
B=MEAN2(A)computesthemeanofthevaluesinA.
ClassSupport
-------------
Acanbenumericorlogical.Bisascalarofclassdouble.
Example
-------
I=imread('');
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/
helpfittype/
ReferencepageinHelpbrowser
docnargin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab 编程 其他 语言 区别