Matlab疑难解答

Matlab 疑难解答
1、MATLAB 有几千个函数,而且很多函数有多种调用方式,怎样才能比较快的学习掌握?
答:MATLAB 函数众多,要想全面掌握 MATLAB,非常困难,即使只掌握 MATLAB 的基本函数,
也不是一件轻松的事。对于初学者,学习 MATLAB 有几点要注意:
(1)在学习中,要做到学中练,练中学,这样学习起来有兴趣,上手快,不易忘;
(2)熟练掌握 MATLAB 的在线帮助命令。MALTAB 的各个函数,不管是内建函数、M 文件函数、
还是 MEX 文件函数等,一般它们都有 M 文件的使用帮助和函数功能说明,各个工具箱通常情
况下也具有一个与工具箱名相同的 M 文件用来说明工具箱的构成内容等。在 MATLAB 命令窗
口中,可以通过帮助指令来获取这些纯文本的帮助信息。
(3)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 上的
1
n?
个圆盘想法转移到塔座 B 上,然后把塔
座 A 上的最后一个大圆盘转移到塔座 C 上,最后再把塔座 B 上的
1
n?
个圆盘转移到塔座 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
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值