参数化功能
概述
本主题解释如何存储或访问传递给MATLAB的数学函数的额外参数®函数的功能,例如fzero
或积分
.
MATLAB函数函数在一定范围内计算数学表达式。它们被称为函数函数,因为它们是接受函数句柄(指向函数的指针)作为输入的函数。这些函数中的每一个都期望你的目标函数有特定数量的输入变量。例如,fzero
而且积分
接受只有一个输入变量的函数的句柄。
假设你想求三次多项式的零点x3.+
bx+
c对于不同的系数值b而且c.尽管您可以创建一个接受三个输入变量的函数(x,b,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);