matlab函数定义

如图,第一幅图的函数,如果调用的话是my=A(1,2);这种
第二幅图的不懂,请指点。

第二幅图的是嵌套函数(Nested Function)。

 

嵌套函数是在另一函数内部定义的函数,和普通的函数主要有以下几点差别:

 

1、函数必须以end结束。只要某个M文件中使用的嵌套函数,则该文件内所有的函数都必须以end结束——无论该函数是否为嵌套函数。

 

2、调用规则:

嵌套函数按照以下的规则调用:

(1)外层的嵌套函数的直接内层,例如varScope1可以调nestfun1,而nestfun1可以调用nestfun2,但varScope1不能调nestfun2;

(2)有相同父函数的同层嵌套函数(本例不存在);

(3)内层的函数可以调用任何外层的函数,例如,nestfun2可以调用nestfun1和varScope1。

其他函数调用时,只能调最外面一层的函数(varScope1),而不能调用调nestfun1和nestfun2。

 

3、变量作用域:

通常,函数的工作区只对其自身可见,其他函数不能访问。但对于嵌套函数而言,处于内层的函数可以访问外层函数的工作区(例如,nestfun2可以访问varScope1的局部变量x),反之则不可以。

追问

谢谢。
另外,是不是第一幅图中A,B是函数名,而x,y是返回值,p1,p2是输入参数。第二幅图中varScope1等是函数名,无返回值和输入参数。
设out是返回值,name是函数名,in是输入参数,是不是一个函数定义,可以仅包含函数名,或者函数名和返回值,或者包括三者?
也就是说只有函数名是必须的,其他的可选,任意组合?

追答

基本正确。作为一个函数,函数名当然是必需的,而输入和输出参数则都是可选的,可以都没有,可以只有一种,也可以都没有,一共有四种情况。

说错了一点,应该是【也可以都有】。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-17
M文件函数(M file function)
在线函数(Inline Function)
匿名函数(Anonymous Function)
1.M文件函数
范例
function c=myadd(a,b)
%这里可以写函数的使用说明,前面以%开头
%在工作区中,help myadd将显示此处的说明
c=a+b;
%end %非必须的
第一行function告诉Matlab这是一个函数,a,b是输入,c是输出,myadd是函数名。以m文件定义的函数必须保存为函数名的形式,上例中,函数应保存为myadd.m。要使用myadd函数,该函数必须在Matlab的搜索路径中。
调用方式:
在Matlab命令符后输入
a=1;b=2;
c=myadd(a,b)
关于m文件定义函数还有许多的说明,暂时略去。。。
2.在线函数(Inline Function)
通常作为参数传递给另外一个函数。比如fminsearch,lsqcurvefit等函数需要以函数作为参数。
在线函数从字符串表达式创建函数,例如:
f=inline('x.^2','x');
创建了函数f(x)=x^2。要计算f(3),在工作区输入f(3)即可。f([2 3 4])计算在x=2 3 4时的值
f=inline('x+y','x','y')
创建了二元函数f(x,y)=x+y,工作区输入f(2,3)计算2+3,等同于feval_r(f,2,3)。
3.匿名函数(Anonymous Function)
匿名函数使用函数句柄来表示匿名函数,定义形式为
函数句柄=@(变量名) 函数表达式
例如:
f=@(x) x.^2
定义了函数f(x)=x^2,f(2)计算在x=2处的值。
匿名函数可以调用Matlab函数,也可以使用工作区中存在的变量,例如
a=2;
f=@(x) x.^2+a
f(2) %计算时引用了变量a
a=0;
f(2) %仍然引用的是a=2
匿名函数也可以由Matlab的内置函数或M文件函数创建,例如
f=@sin %f(x)=sin(x)
f(pi/2) %sin(pi/2)
functions(f) %查看函数信息
利用单元数组可以创建多个函数的句柄,例如
f={@sin @cos}
f{1}(pi/2) %计算sin(pi/2)
f{2}(pi) %计算cos(pi)
函数句柄的另一个重要特征是可以用来表示子函数、私有函数和嵌套函数。
Matlab 7以后,建议以匿名函数取代在线函数!!!
在创建匿名函数时,Matlab记录了关于函数的信息,当使用句柄调用该函数的时候,Matlab不再进行搜索,而是立即执行该函数,极大提高了效率。
相似回答