matlab中如何定义局部变量,转 MATLAB⾃定义函数及局部变
在开始学习MATLAB的时候并没有发现这个软件有着这么强⼤的功能,随着课题的不断深⼊,也在逼迫着⾃⼰不断的去应⽤新的公式并开发新的算法,这就牵涉
到了如何在MATLAB中⾃定义函数的问题,随之⽽来⾃然就是所有编程语⾔所⾯临的问题,函数调⽤、局部变量等等。下⾯就我⾃⼰整理的⼀些⼼得与⼤家交
流。希望对你也有所帮助。
1、编写⾃定义函数时尽量分以下四部分:
(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.
2、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
3、怎样编写递归函数?
答:在建⽴数学模型时,经常会遇到利⽤递归表达的式⼦,这种数学表达式简单明了,在
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];matlab定义函数表达式
%把中间当作第⼀根,
原来第⼀根当作中间柱⼦, 继续移动
result=hanoi(disknum-1,midpillar,beginpillar,endpillar,result);
end

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。