Matlab中的参数化函数

目录

参数化函数

概述

使用嵌套函数参数化

使用匿名函数进行参数化

注意


参数化函数

概述

        介绍如何存储或访问向 MATLAB® 复合函数(如 fzero 或 integral)传递的数学函数的额外参数。

        MATLAB 复合函数基于某个值范围计算数学表达式。这些函数之所以称为复合函数是因为它们是接受函数句柄(函数的指针)作为输入的函数。这些函数的每一个都要求目标函数具有特定数量的输入变量。例如,fzero和 integral接受恰好具有一个输入变量的函数的句柄。

        假设需要在系数b和c具有不同的值时,计算三次多项式 x3 + bx + c 的零点。尽管可以创建接受三个输入变量(x、b 和 c)的函数,但无法将需要所有这三个输入的函数句柄传递给 fzero。不过,可以利用匿名函数或嵌套函数的属性来定义其他输入的值。

使用嵌套函数参数化

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

function y = findzero(b,c,x0)

y = fzero(@poly,x0);

   function y = poly(x)
   y = x^3 + b*x + c;
   end
end

        该嵌套函数定义具有一个输入变量 x 的三次多项式。父函数接受参数 b 和 c 作为输入值。将 poly 嵌套于 findzero 内的原因是,嵌套函数共享其父函数的工作区。因此,poly 函数可以访问传递给 findzero 的 b 和 c 的值。

        要求 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 = fzero(cubicpoly,0)

x =
   -1.0945

        变量 cubicpoly 是具有一个输入 x 的匿名函数的函数句柄。匿名函数的输入以包含在括号中的形式显示,并紧跟用于创建函数句柄的 @ 符号之后。由于在创建 cubicpoly 时 b 和 c 位于工作区中,因此匿名函数不需要这些系数的输入。

        无需为匿名函数创建中间变量 cubicpoly。可以将函数句柄的整个定义包含在对 fzero 的调用中:

b = 2;
c = 3.5;
x = fzero(@(x) x^3 + b*x + c,0)

x =
   -1.0945

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

function y = cubicpoly(x,b,c)
y = x^3 + b*x + c;
end

        在命令行上,定义 b 和 c,然后使用调用 cubicpoly 的匿名函数调用 fzero:

b = 2;
c = 3.5;
x = fzero(@(x) cubicpoly(x,b,c),0)

x =
   -1.0945

注意

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

b = 10;
c = 25;
x = fzero(@(x) x^3 + b*x + c,0);

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值