主要内容

参数化功能

概述

本主题解释如何存储或访问传递给MATLAB的数学函数的额外参数®函数的功能,例如fzero积分

MATLAB函数函数在一定范围内计算数学表达式。它们被称为函数函数,因为它们是接受函数句柄(指向函数的指针)作为输入的函数。这些函数中的每一个都期望你的目标函数有特定数量的输入变量。例如,fzero而且积分接受只有一个输入变量的函数的句柄。

假设你想求三次多项式的零点x3.+bx+c对于不同的系数值b而且c.尽管您可以创建一个接受三个输入变量的函数(xb,c),则不能将需要所有这三个输入的函数句柄传递给fzero.但是,您可以利用匿名函数或嵌套函数的属性为其他输入定义值。

使用嵌套函数进行参数化

定义参数的一种方法是使用嵌套函数-程序文件中完全包含在另一个函数中的函数。对于本例,创建一个名为findzero.m包含父函数的findzero和一个嵌套函数

函数Y = findzero(b,c,x0) Y = fzero(@poly,x0);函数Y = poly(x) Y = x^3 + b*x + c;结束结束

嵌套函数定义了带有一个输入变量的三次多项式,x.父函数接受参数b而且c作为输入值。筑巢的原因findzero嵌套函数共享其父函数的工作空间。因此,函数的值b而且c你传递给findzero

求多项式的零B = 2而且C = 3.5,使用起点X0 = 0,你可以打电话findzero从命令行:

X = findzero(2,3.5,0)
X = -1.0945

使用匿名函数参数化

访问额外参数的另一种方法是使用匿名函数.匿名函数是可以在单个命令中定义的函数,而无需创建单独的程序文件。他们可以使用当前工作区中可用的任何变量。

例如,创建一个描述三次多项式的匿名函数的句柄,并找到零:

B = 2;C = 3.5;Cubicpoly = @(x) x^3 + b*x + c;X = f0 (cubicpoly,0)
X = -1.0945

变量cubicpoly是匿名函数的函数句柄,该匿名函数只有一个输入,x.属性后面的圆括号中显示匿名函数的输入@创建函数句柄的符号。因为b而且c创建时是否在工作区中cubicpoly,匿名函数不需要这些系数的输入。

你不需要创建一个中间变量,cubicpoly,表示匿名函数。相反,可以在调用中包含函数句柄的整个定义fzero

B = 2;C = 3.5;X = f0 (@(X) X ^3 + b* X + c,0)
X = -1.0945

您还可以使用匿名函数调用在函数文件中定义的更复杂的目标函数。例如,假设您有一个名为cubicpoly.m函数定义如下:

函数Y = cubicpoly(x,b,c) Y = x^3 + b*x + c;结束

在命令行中,定义b而且c,然后调用fzero调用的匿名函数cubicpoly

B = 2;C = 3.5;X = f0 (@(X)立方多边形(X,b,c),0)
X = -1.0945

请注意

要更改参数的值,必须创建一个新的匿名函数。例如:

B = 10;C = 25;X = f0 (@(X) X ^3 + b* X + c,0);

相关的话题