主要内容

参数化功能

概述

本主题介绍如何存储或访问您传递给Matlab的数学函数的额外参数®函数的功能,如Fzero.或者积分

MATLAB函数函数在数值范围内计算数学表达式。它们被称为函数函数,因为它们接受函数句柄(指向函数的指针)作为输入。每个函数都要求目标函数具有特定数量的输入变量。例如,Fzero.积分接受只有一个输入变量的函数句柄。

假设您想找到立方多项式的零x3.+bx+c对于不同的系数值bc.尽管可以创建一个接受三个输入变量的函数(xb, 和c),则不能传递需要所有这三个输入的函数句柄Fzero..但是,您可以利用匿名函数或嵌套函数的属性来定义附加输入的值。

使用嵌套函数参数化

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

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

嵌套函数定义了一个只有一个输入变量的三次多项式,x.父函数接受参数bc作为输入值。筑巢的原因polyfindzero嵌套函数共享其父函数的工作区。因此,poly的值bc你传递给他们的findzero

求多项式的零b = 2c = 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 = fzero(cubicpoly,0)
x = -1.0945

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

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

b = 2;c = 3.5;X = f (@(X) X ^3 + b* X + c,0)
x = -1.0945

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

函数Y = x^3 + b*x + c;结束

在命令行,定义bc,然后调用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);

相关话题