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指令,常用方式如下:

        直接使用“help”指令,可以获取当前电脑上MATLAB的分类列表,即当前安装的工具箱名称以及其简要描述。

        使用“help 工具箱名”,可以获取该工具箱的相关的函数、图形用户工具以及演示文件名等。一般使用时先查找出其所在工具箱的具体名称。然后,再用help 工具箱名 就可以得到该工具箱的函数列表,每个函数后面有简要的说明,可以根据其说明来确定可能需要的是哪个函数。

        使用“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

 

关于递归的编写和使用还不熟悉!!!

 

 

 

posted @ 2009-06-23 10:13  小饭  阅读(22257)  评论(0编辑  收藏  举报