文档gydF4y2Ba

嵌套函数gydF4y2Ba

这个示例展示了如何使用嵌套函数轻松地共享数据,以及如何创建自定义函数。gydF4y2Ba

例1:共享数据gydF4y2Ba

让我们先来看看gydF4y2BataxDemo.mgydF4y2Ba,其中包含嵌套函数。gydF4y2Ba

类型gydF4y2BataxDemo.mgydF4y2Ba
function y = taxDemo(income) % taxDemo用于NESTEDDEMO。%计算所得税。版权所有1984-2014 The MathWorks, Inc.调整收入=收入- 6000;%计算调整后的收入%不通过“调整收入”作为参数而调用“computeTax”。y = computeTax;这个函数可以在调用函数的工作区中看到变量'AdjustedIncome' %;结束结束gydF4y2Ba

嵌套函数gydF4y2BacomputeTaxgydF4y2Ba可以在父函数的工作区中看到变量。这使得在多个嵌套函数之间共享数据变得容易,在处理大型数据集时尤其有用。我们可以用通常的方法调用这个函数。gydF4y2Ba

80 y = taxDemo (e3)gydF4y2Ba8万美元的收入要交什么税?gydF4y2Ba
y = 2.0720 e + 04gydF4y2Ba

对于嵌套函数,gydF4y2Ba结束gydF4y2Ba语句必须在函数的末尾使用。您还可以将函数嵌套到任何级别。gydF4y2Ba

例2:创建自定义函数gydF4y2Ba

嵌套函数允许创建定制函数。让我们来看看gydF4y2Bamakefcn.mgydF4y2Ba其中包含一个嵌套函数。gydF4y2Ba

类型gydF4y2Bamakefcn.mgydF4y2Ba
function fcn = makefcn(a,b,c) % makefcn用于NESTEDDEMO。这个函数返回一个自定义版本的“抛物线”句柄。% a,b,c指定函数的系数。% Copyright 1984-2014 The MathWorks, Inc. fcn = @parabola;这个嵌套函数可以看到变量'a','b',和'c' y = a*x。^2 + b.*x + c;结束结束gydF4y2Ba

当你打电话gydF4y2BamakefcngydF4y2Ba,它返回自定义函数的函数句柄。例如:gydF4y2Ba

f = makefcn (3 2, 10);25 g = makefcn (0 5);gydF4y2Ba

fgydF4y2Ba和gydF4y2BaggydF4y2Ba是两个函数的句柄,每个函数都有不同的系数。我们可以通过使用函数句柄和传入参数来计算函数的值。gydF4y2Ba

y = f (2)gydF4y2Ba
y = 26gydF4y2Ba
y = g (2)gydF4y2Ba
y = 35gydF4y2Ba

我们也可以将句柄传递给函数函数,比如优化或集成。gydF4y2Ba

最小= fminbnd (f, 5、5);gydF4y2Ba

或者在一个范围内绘制函数。gydF4y2Ba

fplot (f (6 - 6)gydF4y2Ba“b -”gydF4y2Ba)gydF4y2Ba在x范围内画出fgydF4y2Ba持有gydF4y2Ba在gydF4y2Ba;图(2 f (2),gydF4y2Ba“bd”gydF4y2Ba);gydF4y2Ba在(2,f(2))处绘制标记gydF4y2Ba情节(至少,f(最低),gydF4y2Ba“废话”gydF4y2Ba);gydF4y2Ba%绘制最小fgydF4y2Ba文本(至少,f(最低)2,gydF4y2Ba“最低”gydF4y2Ba);fplot (g, 6 [6],gydF4y2Ba的r -gydF4y2Ba)图(2 g (2)gydF4y2Ba“路”gydF4y2Ba);gydF4y2Ba在(2,g(2))处绘制标记gydF4y2Baylim (60 [-10])gydF4y2Ba从gydF4y2Ba;gydF4y2Ba

例3:创建带状态的自定义函数gydF4y2Ba

让我们来看看gydF4y2Bamakecounter.mgydF4y2Ba其中包含一个嵌套函数。gydF4y2Ba

类型gydF4y2Bamakecounter.mgydF4y2Ba
function countfcn = makecounter(initvalue) % makecounter由NESTEDDEMO使用。这个函数返回一个自定义嵌套函数getCounter的句柄。% initvalue指定返回其句柄的计数器的初始值。% Copyright 1984-2014 The MathWorks, Inc. currentCount = initvalue;%初始值countfcn = @getCounter;当变量currentCount %被调用时(使用它的函数句柄),该函数增加变量currentCount的值。currentCount = currentCount + 1;数= currentCount;结束结束gydF4y2Ba

当你打电话gydF4y2BamakecountergydF4y2Ba,它返回嵌套函数的句柄gydF4y2BagetCountergydF4y2Ba.gydF4y2BagetCountergydF4y2Ba是由initvalue的值定制的,这个变量可以通过嵌套在makecounter的工作空间中看到。gydF4y2Ba

counter1 = makecounter (0);gydF4y2Ba定义计数器初始化为0gydF4y2Bacounter2 = makecounter (10);gydF4y2Ba定义计数器初始化为10gydF4y2Ba

这里我们创建了两个定制的计数器:一个从0开始,一个从10开始。每个句柄都是函数及其调用工作区的单独实例。现在我们可以通过它的句柄调用内部嵌套函数。gydF4y2Bacounter1gydF4y2Ba不需要参数,但可以。gydF4y2Ba

counter1Value = counter1 ()gydF4y2Ba
counter1Value = 1gydF4y2Ba

我们可以独立地调用这两个函数,因为父函数有两个独立的工作空间。当嵌套函数的句柄存在时,它们将留在内存中。在这种情况下gydF4y2BacurrentCountgydF4y2Ba当调用counter1时,变量被更新。gydF4y2Ba

counter1Value = counter1 ()gydF4y2Ba
counter1Value = 2gydF4y2Ba
counter2Value = counter2 ()gydF4y2Ba
counter2Value = 11gydF4y2Ba
这个话题有用吗?gydF4y2Ba