本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

非线性函数的运算

函数句柄

可以创建任何 MATLAB® 函数的句柄,并将该句柄用作引用该函数的一种方式。函数句柄通常在参数列表中传递给其他函数,然后,其他函数可以使用该句柄执行或计算相应函数。

在 MATLAB 中,使用 at 符号 @ 在函数名称前面构造函数句柄。下面的示例为 sin 函数创建一个函数句柄,并将其赋值给变量 fhandle

fhandle = @sin;

您可以按照使用函数名称调用函数的相同方式,通过函数句柄来调用函数。语法为

fhandle(arg1, arg2, ...);

下面显示的函数 plot_fhandle 接收函数句柄和数据,使用函数句柄生成 y 轴数据,并对数据绘图:

function plot_fhandle(fhandle, data)
plot(data, fhandle(data))

当调用带有如下 sin 函数的句柄和参数的 plot_fhandle 时,得到的计算结果会生成正弦波图:

plot_fhandle(@sin, -pi:0.01:pi)

功能函数

名为“接受函数句柄的函数”的函数类与标量变量的非线性函数配合使用。也就是说,某个函数基于另一个函数运行。接受函数句柄的函数包括

  • 找零

  • 优化

  • 求积

  • 常微分方程

MATLAB 通过定义非线性函数的文件来表示非线性函数。例如,以下是 matlab/demos 文件夹中的 humps 函数的简化版本:

function y = humps(x)
y = 1./((x-.3).^2 + .01) + 1./((x-.9).^2 + .04) - 6;

使用以下命令在区间 0 ≤ x ≤ 1 中的一组点处计算此函数

x = 0:.002:1;
y = humps(x);

然后,使用以下命令绘制该函数

plot(x,y)

此图形表明,该函数在 x = 0.6 附近具有局部最小值。函数 fminsearch 会求最小值,即此函数采用此最小值时的 x 值。fminsearch 的第一个参数是此函数达到最小值时的函数句柄,第二个参数是猜测的最小值的大致位置:

p = fminsearch(@humps,.5)
p =
    0.6370

要在极小值处计算此函数,

humps(p)

ans =
   11.2528

数值分析采用术语求积积分来区别定积分的近似数值和常微分方程的数值积分。MATLAB 正交例程包括 quadquadl。语句

Q = quadl(@humps,0,1)

计算此图形中曲线下方的面积,并生成

Q =
   29.8583

最后,此图形表明该函数在此区间中永远不会为零。这样,如果使用

z = fzero(@humps,.5)

搜索零,则会在此区间外部找到一个零:

z =
   -0.1316