MATLAB中搜索、查询和全局变量的⽤法(摘录)
1、MATLAB有⼏千个函数,⽽且很多函数有多种调⽤⽅式,怎样才能⽐较快的学习掌握?
(1)熟练掌握MATLAB的在线帮助命令。MALTAB的各个函数,不管是内建函数、M⽂件函数、还是MEX⽂件函数等,⼀般它们都有M⽂件的使⽤帮助和函数功能说明,各个⼯具箱通常情况下也具有⼀个与⼯具箱名相同的M⽂件⽤来说明⼯具箱的构成内容等。在MATLAB 命令窗⼝中,可以通过帮助指令来获取这些纯⽂本的帮助信息。
(2)MATLAB的基本数据结构是矩阵(数组),为更好的学习使⽤MATLAB,在遇到问题时,要尽量⽤矩阵(数组)表⽰数学模型,这样在MATLAB中易于实现,⽽且运算速度快。
2、在MATLAB中怎样使⽤帮助?
答:MATLAB有两种帮助形式,⼀种在命令窗⼝使⽤帮助指令搜索帮助;另⼀种是使⽤MATLAB的帮助系统,从菜单help进⼊,点击MATLAB help即可出现该系统。第⼀种形式⽐较简单,适合快速的寻求帮助。第⼆种需要安装MATLAB的帮助⽂档(占⽤空间⽐较⼤),但内容经过分类整理,⽐较丰富。⼀般常⽤的帮助⽅式是第⼀种。
3、MATLAB有些什么帮助指令?
答:MATLAB常⽤帮助指令有以下⼏类:
(1)help指令,常⽤⽅式如下:
l 直接使⽤“help”指令,可以获取当前电脑上MATLAB的分类列表,即当前安装的⼯具箱名称以及其简要描述。
l 使⽤“help ⼯具箱名”,可以获取该⼯具箱的相关的函数、图形⽤户⼯具以及演⽰⽂件名等。⼀般使⽤时先查出其所在⼯具箱的具体名称。然后,再⽤help ⼯具箱名 就可以得到该⼯具箱的函数列表,每个函数后⾯有简要的说明,可以根据其说明来确定可能需要的是哪个函数。
l 使⽤“help 函数名”可以获得该函数的纯⽂本的帮助信息,通常也带有少量的例⼦。
(2) lookfor指令
lookfor指令是在MATLAB的搜索路径所有M⽂件的第⼀个注释⾏搜索特定关键字。通常在我们不确定需要搜索的函数,知道该函数的功能的时候,也可以通过lookfor 搜索该功能的关键字。例如,想查⼀个画椭圆的命令,我们可以lookfor ellipse。
(3) which 指令
which指令可以⽤来定位该函数的位置,通过这个位置信息,可以获取该函数所属的类别。通常,编程⼈员在⾃⼰创建⼀个M⽂件或者保存⼀个M⽂件的时候,为了避免与系统函数等同名,就应该先⽤which ⽂件(函数)名 –all 搜索查是否存在你想要保存的⽂件名或者函数名。另外,很好的利⽤得到的位置信息可以进⾏⼀些相关联的⽂件的帮助信息。例如,在编程过程中,需要⼀个保存⽂件对话框,但想不起该函数名,也不确定是否确实有此函数,但是我们很清楚的是有个与此类似打开⽂件对话框,函数名为 uigetfile,因此,采⽤which定位uigetfile
(4) set/get 指令
set 指令可以获取图形对象的属性列表和被选属性值。在GUI编程和数据可视化的时候,有时想改变某些对象的属性,让它按照⾃⼰的想法实现,但是⼜想不起这些对象的属性名,更不知道如何设置它们。这时,可以⽤ get(objecthandles)得到此对象的所有的属性及其当前值,⽤set(handles)可以得到对象所有可以设置的属性及其可能的取值。到需要的属性名和可能的取值之后,就⽤
set(handles,propertyname,values)设置此对象此属性的值。
(5)doc指令
doc 函数名可以在MATLAB的帮助⽂档浏览器中调出该函数的⽂档。
(6) type指令
type M⽂件函数名可以在命令窗⼝中打印出该M⽂件源代码
(7) edit指令
edit M⽂件函数名可以在M⽂件编辑器中打开该M⽂件函数源代码,以便查看该函数源⽂件
(8) helpwin指令
helpwin 函数名 与 help 函数名获得的帮助信息⼀样,只是将其在帮助⽂件浏览器中打开。
4、在MATLAB命令窗⼝中输⼊指令时,如果⼀⾏命令太长,怎么办?
答:如果表达式⽆法在⼀⾏输⼊完,⽤三点“…”加回车键表⽰下⼀⾏继续该语句的输⼊。例如:
s = 1 -1/2 + 1/3 -1/4 + 1/5 - 1/6 + 1/7 ...
- 1/8 + 1/9 - 1/10 + 1/11 - 1/12;
"=","+"和"-"符号前后的空格可以省略,但使⽤可以增加易读性.
5、如果不知道矩阵的维数,怎样访问矩阵最后⼀⾏的元素?
答:有两种⽅法:
(1) 先取得矩阵的⾏数,再访问最后⼀⾏:i=size(A,1);A(i,: );
(2) ⽤end指令直接访问:A(end,: )。
6、怎样编写标准的⾃定义函数?
答:编写⾃定义函数时尽量分以下四部分:
(1) 函数定义⾏:function[out1,out2,..]=filename(in1,in2,..),输⼊和输出参数个数分别由nargin和nargout两个MATLAB保留的变量来给出。
(2) 第⼀⾏帮助⾏,以%开头,作为lookfor指令搜索的⾏
(3) 函数体说明及有关注解:以(%)开头,⽤以说明函数的作⽤及有关内容。如果不希望显⽰某段信息,可在它的前⾯加空⾏
(4) 函数体:函数体内使⽤的除返回和输⼊变量这些在function语句中直接引⽤的变量以外的所有变量
都是局部变量,即在该函数返回之后,这些变量会⾃动在MATLAB的⼯作空间中清除掉。如果希望这些中间变量成为在整个程序中都起作⽤的变量,则可以将它们设置为全局变量。
例如下⾯就是⼀个标准的⾃字义函数。
function A=myhilb(n, m)
% MYHILB 是⼀个⽰范性的 M-function.
% A=MYHILB(N, M) 会⽣成⼀个N×M的Hilbert矩阵A.
% A=MYHILB(N)会⽣成⼀个N×N的Hilbert矩阵.
% MYHILB(N,M) 仅仅显⽰⼀个Hilbert矩阵,⽽不会返回任何矩阵。
%这些内容在⽤help时不会显⽰
if nargout>1, error('Too many output arguments.'); end
if nargin==1, m=n;
elseif nargin==0 | nargin>2
error('Wrong number of iutput arguments.');
end
A1=zeros(n,m);
for i=1: n
for j=1:m
A1(i,j)=1/(i+j-1);
end
end
if nargout==1, A=A1;
elseif nargout==0, disp(A1);
end
把该函数保存在MATLAB的某个搜索路径中(⽐如work⽬录中),在命令窗⼝输⼊:
>> help myhilb
MYHILB 是⼀个⽰范性的 M-function.
A=MYHILB(N, M) 会⽣成⼀个N×M的Hilbert矩阵A.
A=MYHILB(N)会⽣成⼀个N×N的Hilbert矩阵.
MYHILB(N,M) 仅仅显⽰⼀个Hilbert矩阵,⽽不会返回任何矩阵。
>> lookfor myhilb
MYHILB 是⼀个⽰范性的 M-function.
7、MATLAB中全局变量与局部变量有什么区别?
答:如果⼀个函数内的变量没有特别声明,那么这个变量只在函数内部使⽤,即为局部变量。如果两个或多个函数共⽤⼀个变量(或者说在⼦程序中也要⽤到主程序中的变量,注意不是参数),那么可以⽤global来将它声明为全局变量。
全局变量的使⽤可以减少参数传递,合理利⽤全局变量可以提⾼程序执⾏的效率。
如果需要⽤到其他函数的变量。就要利⽤在主程序与⼦程序中分别都声明全局变量的⽅式实现变量的传递。否则函数体内使⽤的都为局部变量。⽐如下例:
⽂件名:exam1.m global a
x=1:100;
a=2;
c=prods(x)⽂件名:prods.m
function result=prods(x) global a
result=a*sum(x);
>> exam1
c =
10100
8、怎样编写递归函数?
答:在建⽴数学模型时,经常会遇到利⽤递归表达的式⼦,这种数学表达式简单明了,在MATLAB中实现该模型,对应的需要建⽴递归函数。写⼀个好的递归函数,关键是到递归的边界条件,和在中间某步骤中会发⽣的各种情况,然后再对应到程序中即可。试看Hanoi 塔例⼦:要将塔座A上的n个圆盘全部转移到塔座C上,如n=1,直接把这⼀⽚移到⽬标柱⼦即可;若n>1,可以先把塔座A上的个圆盘想法转移到塔座B上,然后把塔座A上的最后⼀个⼤圆盘转移到塔座C上,最后再把塔座B上的个圆盘转移到塔座C上。把上⾯思想对应到递归程序中,就得到如下代码:
function result=hanoi(disknum,beginpillar,midpillar,endpillar,sch)
if disknum==1%添加⼀⾏移动⽅式,递归的边界
result=[sch;1,beginpillar,endpillar];
else%下⾯⼀句相当于把上⾯n-1⽚移到中间柱⼦
result=hanoi(disknum-1,beginpillar,endpillar,midpillar,sch);
%然后把最后⼀⽚移到⽬标柱⼦上
result=[result;disknum,beginpillar,endpillar];
%把中间当作第⼀根, 原来第⼀根当作中间柱⼦, 继续移动
result=hanoi(disknum-1,midpillar,beginpillar,endpillar,result);
end
关于递归的编写和使⽤还不熟悉
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论